From a2d3338e90a3a11385e2f63bedaa9750612f8719 Mon Sep 17 00:00:00 2001 From: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com> Date: Sun, 11 Oct 2026 16:12:46 +0800 Subject: [PATCH] feat(website): add multilingual editions and translation workflow --- .github/workflows/website-pages.yml | 4 +- .gitignore | 3 + README_ar.md | 20 +- README_de.md | 20 +- README_es.md | 20 +- README_fa.md | 20 +- README_fr.md | 20 +- README_id.md | 20 +- README_it.md | 20 +- README_ja.md | 20 +- README_ko.md | 20 +- README_pl.md | 20 +- README_pt-BR.md | 20 +- README_ru.md | 20 +- README_th.md | 20 +- README_tr.md | 20 +- README_uk.md | 20 +- README_vi.md | 20 +- README_zh-TW.md | 20 +- README_zh.md | 20 +- scripts/ci/plan.mjs | 1 + scripts/ci/scopes.mjs | 2 + scripts/prepare-website.py | 11 +- scripts/test-website.py | 166 +- scripts/verify-website.py | 50 +- scripts/website.py | 25 +- scripts/website_i18n.py | 637 + .../boundary/filesystem/ciChangeScope.test.ts | 10 + website/AGENTS.md | 14 +- website/README.md | 39 +- website/locales/README.md | 136 + website/locales/ar/messages.po | 13086 +++++++++++++++ website/locales/de/messages.po | 13594 ++++++++++++++++ website/locales/es/messages.po | 13522 +++++++++++++++ website/locales/fa/messages.po | 13227 +++++++++++++++ website/locales/fr/messages.po | 13540 +++++++++++++++ website/locales/id/messages.po | 13406 +++++++++++++++ website/locales/it/messages.po | 13472 +++++++++++++++ website/locales/ja/messages.po | 12589 ++++++++++++++ website/locales/ko/messages.po | 12519 ++++++++++++++ website/locales/languages.json | 51 + website/locales/messages.pot | 10962 +++++++++++++ website/locales/pl/messages.po | 13371 +++++++++++++++ website/locales/pt-BR/messages.po | 13448 +++++++++++++++ website/locales/ru/messages.po | 13494 +++++++++++++++ website/locales/th/messages.po | 13083 +++++++++++++++ website/locales/tr/messages.po | 13351 +++++++++++++++ website/locales/uk/messages.po | 13446 +++++++++++++++ website/locales/vi/messages.po | 13339 +++++++++++++++ website/locales/zh-CN/messages.po | 12298 ++++++++++++++ website/locales/zh-TW/messages.po | 12306 ++++++++++++++ website/public/assets/aegis-demo.js | 28 +- website/public/assets/dino-demo.js | 47 +- website/public/assets/home.js | 8 +- website/public/assets/i18n.js | 31 + website/public/assets/main.js | 282 +- website/public/assets/styles.css | 186 +- website/public/blog/index.html | 45 +- .../blog/touhou-reconstruction/index.html | 45 +- website/public/examples/dino-lab/index.html | 49 +- website/public/faq/index.html | 57 +- website/public/first-investigation/index.html | 98 +- website/public/get-started/index.html | 62 +- website/public/guides/browser/index.html | 54 +- website/public/guides/index.html | 45 +- website/public/guides/javascript/index.html | 73 +- website/public/guides/native/index.html | 45 +- website/public/index.html | 88 +- website/public/showcase/aegis/index.html | 54 +- website/public/showcase/ctf/index.html | 45 +- website/public/showcase/dx-ball/index.html | 45 +- website/public/showcase/index.html | 45 +- website/public/showcase/notion/index.html | 61 +- website/public/showcase/th04/index.html | 45 +- website/requirements.txt | 2 + website/style-guide.md | 7 + website/templates/header.html.tmpl | 3 +- website/templates/sharing.html.tmpl | 3 + website/wrangler.toml | 4 +- 79 files changed, 250648 insertions(+), 471 deletions(-) create mode 100644 scripts/website_i18n.py create mode 100644 website/locales/README.md create mode 100644 website/locales/ar/messages.po create mode 100644 website/locales/de/messages.po create mode 100644 website/locales/es/messages.po create mode 100644 website/locales/fa/messages.po create mode 100644 website/locales/fr/messages.po create mode 100644 website/locales/id/messages.po create mode 100644 website/locales/it/messages.po create mode 100644 website/locales/ja/messages.po create mode 100644 website/locales/ko/messages.po create mode 100644 website/locales/languages.json create mode 100644 website/locales/messages.pot create mode 100644 website/locales/pl/messages.po create mode 100644 website/locales/pt-BR/messages.po create mode 100644 website/locales/ru/messages.po create mode 100644 website/locales/th/messages.po create mode 100644 website/locales/tr/messages.po create mode 100644 website/locales/uk/messages.po create mode 100644 website/locales/vi/messages.po create mode 100644 website/locales/zh-CN/messages.po create mode 100644 website/locales/zh-TW/messages.po create mode 100644 website/public/assets/i18n.js diff --git a/.github/workflows/website-pages.yml b/.github/workflows/website-pages.yml index 3d20f7ea1..3c2251658 100644 --- a/.github/workflows/website-pages.yml +++ b/.github/workflows/website-pages.yml @@ -68,7 +68,7 @@ jobs: import os from pathlib import Path - Path("website/public/deployment.json").write_text( + Path("website/_site/deployment.json").write_text( json.dumps({"commit": os.environ["GITHUB_SHA"]}) + "\n", encoding="utf-8", ) @@ -78,7 +78,7 @@ jobs: - name: Upload the website uses: actions/upload-pages-artifact@v4 with: - path: website/public + path: website/_site deploy: needs: prepare diff --git a/.gitignore b/.gitignore index e88c33a87..cdad8b14d 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,6 @@ Thumbs.db /docs/public/product-catalog.json /docs/verification/managed-conformance-manifest.json /docs/verification/managed-conformance-ledger.json + +# Complete static website output, including generated language editions. +website/_site/ diff --git a/README_ar.md b/README_ar.md index b7f28aa89..b6667add4 100644 --- a/README_ar.md +++ b/README_ar.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[الموقع](https://rea.tools/) · [الأدلة](https://rea.tools/guides/) · [دراسات الحالة](https://rea.tools/showcase/)** +**[الموقع](https://rea.tools/ar/) · [الأدلة](https://rea.tools/ar/guides/) · [دراسات الحالة](https://rea.tools/ar/showcase/)** [البدء السريع](#البدء-السريع) · [كيف يعمل REA](#كيف-يعمل-rea) · [ما الذي يمكنك تحليله](#ما-الذي-يمكنك-تحليله) · [دراسات الحالة](#دراسات-الحالة) · [الأسئلة الشائعة](#الأسئلة-الشائعة) · [التوثيق](#التوثيق) @@ -54,7 +54,7 @@ يسجّل الإعداد REA لدى وكيلك ويثبّت تعليمات سير العمل المطابقة. يمكن لتحليل الشيفرة الأصلية استخدام تثبيت موجود من Hopper أو Ghidra؛ ويمكن للإعداد أيضًا تثبيت Hopper اختياريًا بعد موافقتك. لا يحتاج التحليل الثابت لـ JavaScript إلى أي من المحركين. -> **[زر موقع REA](https://rea.tools/)** للاطلاع على تعليمات الإعداد والأدلة المصوّرة ودراسات الحالة الفعلية. +> **[زر موقع REA](https://rea.tools/ar/)** للاطلاع على تعليمات الإعداد والأدلة المصوّرة ودراسات الحالة الفعلية. ## البدء السريع @@ -133,12 +133,12 @@ npx rea-agents@latest setup | الهدف | ما يعيده REA | المتطلبات والدليل | | ------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| الملفات الثنائية للشيفرة الأصلية | شيفرة شبه برمجية، وتعليمات تجميع، وسلاسل نصية، ورموز، واستدعاءات، ومراجع | Hopper أو Ghidra أو IDA؛ [تحليل الشيفرة الأصلية](https://rea.tools/guides/native/) | +| الملفات الثنائية للشيفرة الأصلية | شيفرة شبه برمجية، وتعليمات تجميع، وسلاسل نصية، ورموز، واستدعاءات، ومراجع | Hopper أو Ghidra أو IDA؛ [تحليل الشيفرة الأصلية](https://rea.tools/ar/guides/native/) | | بنية ELF دون تشغيل | الأقسام والمقاطع والرموز ومعلومات إعادة التموضع الأصلية، وآليات الحماية المحتملة المستدلّ عليها بالفحص الثابت | pwntools يوفّره المستدعي على Linux x64؛ [تشخيص الملفات الثنائية](docs/binary-diagnostics.md) | | شيفرة EVM البايتية | محددات التوجيه، وإزاحات البايتات، والمعاملات المستنتجة، وقابلية تغيير الحالة | مدخل محلي يحمل بايتات خامًا أو تمثيلًا سداسيًا عشريًا على Linux x64؛ [دليل EVM دون تشغيل](docs/evm-bytecode.md) | | أعطال Linux المسجّلة | سجلات note الخام، ومسجّلات المعالج/الإشارات لكل خيط مسجّل، وترشيحات اختيارية لخرائط الذاكرة | pwntools يوفّره المستدعي على Linux x64؛ GDB/pwndbg اختياريان؛ [الأعطال المسجّلة](docs/recorded-crashes.md) | -| JavaScript / Electron | الوحدات، وعمليات الاستيراد، وخرائط المصدر، والمسارات، وIPC، وعلاقات إضافات الشيفرة الأصلية | Node.js وnpm؛ [تحليل التطبيقات](https://rea.tools/guides/javascript/) | -| المواقع | بنية الصفحة، والسكربتات، وملاحظات الشبكة، ولقطات الشاشة المطلوبة | متصفح من عائلة Chrome؛ [تحليل المتصفح](https://rea.tools/guides/browser/) | +| JavaScript / Electron | الوحدات، وعمليات الاستيراد، وخرائط المصدر، والمسارات، وIPC، وعلاقات إضافات الشيفرة الأصلية | Node.js وnpm؛ [تحليل التطبيقات](https://rea.tools/ar/guides/javascript/) | +| المواقع | بنية الصفحة، والسكربتات، وملاحظات الشبكة، ولقطات الشاشة المطلوبة | متصفح من عائلة Chrome؛ [تحليل المتصفح](https://rea.tools/ar/guides/browser/) | | تسجيلات الشبكة المحفوظة | الطلبات، والاستجابات، ومحتويات الحمولة المتاحة، ومواضعها في المصدر | HAR؛ وmitmdump على Linux لتسجيلات mitmproxy بصيغتها الأصلية؛ [دليل تسجيلات الشبكة](docs/web-network-captures.md) | | تجميعات .NET | البيانات الوصفية، وتعليمات CIL، واعتماديات الشيفرة الأصلية المعلنة، ومقارنات البناء | فحص ثابت؛ [دليل الشيفرة المُدارة](docs/managed-code-analysis.md) | | حزم Android APK | تصريحات ملف manifest، والأصناف، والدوال الناتجة عن فك الترجمة، والمراجع | JADX دون واجهة رسومية وJDK كامل على Linux/macOS/Windows x64؛ [دليل Android](docs/android-analysis.md) | @@ -157,26 +157,26 @@ npx rea-agents@latest setup ## دراسات الحالة -[![رسوم توضيحية لأمثلة توزيع الصوت في DX-Ball وجسر الحافظة في Notion وحلقة الطلقات في TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![رسوم توضيحية لأمثلة توزيع الصوت في DX-Ball وجسر الحافظة في Notion وحلقة الطلقات في TH04](docs/assets/rea-showcases.png)](https://rea.tools/ar/showcase/) ### DX-Ball: إعادة بناء حساب توزيع الصوت بين القناتين تتبّع استدعاء صوت إلى الدالة المساعدة التي تحوّل الموضع إلى توزيع بين القناتين، وافحص التعليمات، وحوّل الشيفرة شبه البرمجية غير المكتملة إلى C. تجتاز إعادة البناء 3,205 حالات اختبار على x86 الأصلي، وتعيد إنتاج جميع بايتات الدالة المترجمة البالغ عددها 63 بايتًا. -[اقرأ دراسة الحالة](https://rea.tools/showcase/dx-ball/) · +[اقرأ دراسة الحالة](https://rea.tools/ar/showcase/dx-ball/) · [مستودع إعادة البناء](https://github.com/N0zoM1z0/dx-ball) ### Notion: تتبّع جسر الحافظة في Electron اعثر على API الحافظة في عملية العرض، وتتبّعه عبر preload وIPC إلى العملية الرئيسية، وافحص صيغة الحافظة ذات التنسيق الغني. -[اقرأ دراسة الحالة](https://rea.tools/showcase/notion/) +[اقرأ دراسة الحالة](https://rea.tools/ar/showcase/notion/) ### TH04: استعادة حساب حلقة المقذوفات في DOS افحص تعليمات اللعبة الأصلية على PC-98 ذات 16 بت، واستعد حساب الزوايا الثابتة والموجّهة نحو الهدف، وقارن شيفرة C++ المعاد بناؤها بمخرجات المترجم المستخدم آنذاك. -[اقرأ دراسة الحالة](https://rea.tools/showcase/th04/) · +[اقرأ دراسة الحالة](https://rea.tools/ar/showcase/th04/) · [مستودع إعادة البناء](https://github.com/N0zoM1z0/th04) إذا استخدمت REA لفحص هدف مثير للاهتمام، فنود الاطلاع عليه. شارك حالتك في [issue](https://github.com/morluto/rea/issues) أو [pull request](https://github.com/morluto/rea/pulls)، مع ذكر الهدف، وسؤالك، وكيف ساعدك REA، وما توصلت إليه. @@ -248,7 +248,7 @@ npx rea-agents@latest setup ## التوثيق -ابدأ بـ [الأدلة العملية](https://rea.tools/guides/) على الموقع. للخيارات الدقيقة والمتطلبات وعقود النتائج: +ابدأ بـ [الأدلة العملية](https://rea.tools/ar/guides/) على الموقع. للخيارات الدقيقة والمتطلبات وعقود النتائج: - [التثبيت والإعداد](docs/installation.md): تسجيل الوكلاء، وتهيئة الموفّرين، والتحديثات، وإلغاء التثبيت. - [الجاهزية واستكشاف الأخطاء](docs/installation.md#check-readiness-for-your-task): تشخيص وكيل أو محرك تحليل محدد. diff --git a/README_de.md b/README_de.md index cbc6b6a00..7f1ee9eb6 100644 --- a/README_de.md +++ b/README_de.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Website](https://rea.tools/) · [Anleitungen](https://rea.tools/guides/) · [Fallstudien](https://rea.tools/showcase/)** +**[Website](https://rea.tools/de/) · [Anleitungen](https://rea.tools/de/guides/) · [Fallstudien](https://rea.tools/de/showcase/)** [Schnellstart](#schnellstart) · [So funktioniert REA](#so-funktioniert-rea) · [Was du analysieren kannst](#was-du-analysieren-kannst) · [Fallstudien](#fallstudien) · [Häufige Fragen](#häufige-fragen) · [Dokumentation](#dokumentation) @@ -54,7 +54,7 @@ REA verbindet deinen Agenten mit Werkzeugen zum Untersuchen nativer Binärdateie Die Einrichtung registriert REA bei deinem Agenten und installiert passende Workflow-Anweisungen. Für native Analysen kannst du eine vorhandene Hopper- oder Ghidra-Installation verwenden. Mit deiner Zustimmung kann die Einrichtung auch Hopper installieren. Statische JavaScript-Analysen benötigen keines der beiden Programme. -> **[Besuche die REA-Website](https://rea.tools/)** für Einrichtungshinweise, bebilderte Anleitungen und echte Fallstudien. +> **[Besuche die REA-Website](https://rea.tools/de/)** für Einrichtungshinweise, bebilderte Anleitungen und echte Fallstudien. ## Schnellstart @@ -133,12 +133,12 @@ REA benötigt Node.js 22.x (>=22.19), 24.x (>=24.11) oder 26+ sowie npm. Zusätz | Ziel | Was REA zurückgibt | Voraussetzungen und Anleitung | | ----------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| Native Binärdateien | Pseudocode, Assemblercode, Zeichenketten, Symbole, Aufrufe und Verweise | Hopper, Ghidra oder IDA; [native Analyse](https://rea.tools/guides/native/) | +| Native Binärdateien | Pseudocode, Assemblercode, Zeichenketten, Symbole, Aufrufe und Verweise | Hopper, Ghidra oder IDA; [native Analyse](https://rea.tools/de/guides/native/) | | Offline-ELF-Struktur | Sektionen, Segmente, ursprüngliche Symbole/Relokationen und mögliche Schutzmaßnahmen aus statischer Analyse | Vom Aufrufer bereitgestelltes pwntools unter Linux x64; [Binärdiagnostik](docs/binary-diagnostics.md) | | EVM-Bytecode | Dispatch-Selektoren, Byte-Offsets, abgeleitete Argumente und Veränderbarkeit des Zustands | Lokale Eingabe mit Rohbytes oder Hexdarstellung unter Linux x64; [Offline-EVM-Leitfaden](docs/evm-bytecode.md) | | Aufgezeichnete Linux-Abstürze | Unverarbeitete Note-Einträge, Register/Signale aller aufgezeichneten Threads und optionale Zuordnungskandidaten | Vom Aufrufer bereitgestelltes pwntools unter Linux x64; optional GDB/pwndbg; [aufgezeichnete Abstürze](docs/recorded-crashes.md) | -| JavaScript / Electron | Module, Imports, Source Maps, Routen, IPC und Beziehungen zu nativen Add-ons | Node.js und npm; [Anwendungsanalyse](https://rea.tools/guides/javascript/) | -| Websites | Seitenstruktur, Skripte, Netzwerkbeobachtungen und angeforderte Screenshots | Ein Browser aus der Chrome-Familie; [Browseranalyse](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Module, Imports, Source Maps, Routen, IPC und Beziehungen zu nativen Add-ons | Node.js und npm; [Anwendungsanalyse](https://rea.tools/de/guides/javascript/) | +| Websites | Seitenstruktur, Skripte, Netzwerkbeobachtungen und angeforderte Screenshots | Ein Browser aus der Chrome-Familie; [Browseranalyse](https://rea.tools/de/guides/browser/) | | Gespeicherte Netzwerkaufzeichnungen | Anfragen, Antworten, zugängliche Nutzdaten und Quellpositionen | HAR; mitmdump unter Linux für Aufzeichnungen im nativen mitmproxy-Format; [Leitfaden zu Netzwerkaufzeichnungen](docs/web-network-captures.md) | | .NET-Assemblies | Metadaten, CIL-Anweisungen, deklarierte native Abhängigkeiten und Build-Vergleiche | Statische Untersuchung; [Leitfaden für verwalteten Code](docs/managed-code-analysis.md) | | Android-APKs | Manifest-Deklarationen, Klassen, dekompilierte Methoden und Verweise | JADX ohne grafische Oberfläche und ein vollständiges JDK unter Linux/macOS/Windows x64; [Android-Leitfaden](docs/android-analysis.md) | @@ -157,25 +157,25 @@ Native Formate und unterstützte Hostsysteme unterscheiden sich je nach Provider ## Fallstudien -[![Illustrationen der Fallstudien zu DX-Balls Klangbalance, Notions Zwischenablage-Brücke und TH04s Geschossring](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Illustrationen der Fallstudien zu DX-Balls Klangbalance, Notions Zwischenablage-Brücke und TH04s Geschossring](docs/assets/rea-showcases.png)](https://rea.tools/de/showcase/) ### DX-Ball: Eine Stereo-Panning-Berechnung rekonstruieren Verfolge einen Sound-Aufruf zur Hilfsfunktion, die Positionen in Panning-Werte umrechnet, untersuche die Anweisungen und überführe unvollständigen Pseudocode in C. Die Rekonstruktion besteht 3.205 Tests mit dem ursprünglichen x86-Code und reproduziert alle 63 Bytes der kompilierten Funktion. -[Fallstudie lesen](https://rea.tools/showcase/dx-ball/) · [Rekonstruktionsrepository](https://github.com/N0zoM1z0/dx-ball) +[Fallstudie lesen](https://rea.tools/de/showcase/dx-ball/) · [Rekonstruktionsrepository](https://github.com/N0zoM1z0/dx-ball) ### Notion: Die Electron-Zwischenablagebrücke verfolgen Finde die Zwischenablage-API des Renderers, verfolge sie über preload und IPC bis zum Hauptprozess und untersuche das Zwischenablageformat samt Formatierungsdaten. -[Fallstudie lesen](https://rea.tools/showcase/notion/) +[Fallstudie lesen](https://rea.tools/de/showcase/notion/) ### TH04: Eine DOS-Geschossring-Berechnung wiederherstellen Untersuche die 16-Bit-Anweisungen des ursprünglichen PC-98-Spiels, rekonstruiere die festen und zielgerichteten Winkelberechnungen und vergleiche das rekonstruierte C++ mit der Ausgabe des damaligen Compilers. -[Fallstudie lesen](https://rea.tools/showcase/th04/) · [Rekonstruktionsrepository](https://github.com/N0zoM1z0/th04) +[Fallstudie lesen](https://rea.tools/de/showcase/th04/) · [Rekonstruktionsrepository](https://github.com/N0zoM1z0/th04) Wenn du mit REA etwas Interessantes untersucht hast, würden wir es gern sehen. Teile deine Fallstudie in einem [Issue](https://github.com/morluto/rea/issues) oder [Pull Request](https://github.com/morluto/rea/pulls) und beschreibe das Ziel, deine Frage, wie REA geholfen hat und was du herausgefunden hast. @@ -246,7 +246,7 @@ Wenn du einen Agenten verwendest, schließe die [Aktualisierung der Einrichtung] ## Dokumentation -Beginne mit den [praxisnahen Anleitungen](https://rea.tools/guides/) auf der Website. Genaue Optionen, Voraussetzungen und Ergebniskontrakte findest du hier: +Beginne mit den [praxisnahen Anleitungen](https://rea.tools/de/guides/) auf der Website. Genaue Optionen, Voraussetzungen und Ergebniskontrakte findest du hier: - [Installation und Einrichtung](docs/installation.md): Agentenregistrierung, Provider-Konfiguration, Updates und Deinstallation. - [Bereitschaft und Fehlerbehebung](docs/installation.md#check-readiness-for-your-task): Diagnose eines bestimmten Agenten oder einer Analyse-Engine. diff --git a/README_es.md b/README_es.md index 44d297fea..d1e28f0b4 100644 --- a/README_es.md +++ b/README_es.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Sitio web](https://rea.tools/) · [Guías](https://rea.tools/guides/) · [Casos prácticos](https://rea.tools/showcase/)** +**[Sitio web](https://rea.tools/es/) · [Guías](https://rea.tools/es/guides/) · [Casos prácticos](https://rea.tools/es/showcase/)** [Inicio rápido](#inicio-rápido) · [Cómo funciona REA](#cómo-funciona-rea) · [Qué puedes analizar](#qué-puedes-analizar) · [Casos prácticos](#casos-prácticos) · [Preguntas frecuentes](#preguntas-frecuentes) · [Documentación](#documentación) @@ -54,7 +54,7 @@ REA conecta tu agente con herramientas para inspeccionar binarios nativos, aplic La configuración registra REA en tu agente e instala las instrucciones de trabajo correspondientes. El análisis nativo puede usar una instalación existente de Hopper o Ghidra; la configuración también puede instalar Hopper, si lo autorizas. El análisis estático de JavaScript no necesita ninguno de los dos motores. -> **[Visita el sitio web de REA](https://rea.tools/)** para encontrar instrucciones de configuración, guías ilustradas y casos reales. +> **[Visita el sitio web de REA](https://rea.tools/es/)** para encontrar instrucciones de configuración, guías ilustradas y casos reales. ## Inicio rápido @@ -133,12 +133,12 @@ REA requiere Node.js 22.x (>=22.19), 24.x (>=24.11) o 26+, además de npm. Las h | Objetivo | Qué devuelve REA | Requisitos y guía | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -| Binarios nativos | Pseudocódigo, ensamblador, cadenas, símbolos, llamadas y referencias | Hopper, Ghidra o IDA; [análisis nativo](https://rea.tools/guides/native/) | +| Binarios nativos | Pseudocódigo, ensamblador, cadenas, símbolos, llamadas y referencias | Hopper, Ghidra o IDA; [análisis nativo](https://rea.tools/es/guides/native/) | | Estructura ELF sin ejecutar | Secciones, segmentos, símbolos/reubicaciones originales y posibles medidas de mitigación detectadas mediante análisis estático | pwntools proporcionado por quien llama, en Linux x64; [diagnóstico de binarios](docs/binary-diagnostics.md) | | Bytecode EVM | Selectores de despacho, desplazamientos en bytes, argumentos inferidos y mutabilidad | Entrada local con bytes sin procesar o representación hexadecimal, en Linux x64; [guía de EVM sin ejecutar](docs/evm-bytecode.md) | | Fallos de Linux registrados | Registros note sin procesar, registros/señales de cada hilo registrado y posibles correspondencias de memoria opcionales | pwntools proporcionado por quien llama, en Linux x64; GDB/pwndbg opcionales; [fallos registrados](docs/recorded-crashes.md) | -| JavaScript / Electron | Módulos, importaciones, mapas de código fuente, rutas, IPC y relaciones con complementos nativos | Node.js y npm; [análisis de aplicaciones](https://rea.tools/guides/javascript/) | -| Sitios web | Estructura de la página, scripts, observaciones de red y capturas de pantalla solicitadas | Un navegador de la familia Chrome; [análisis del navegador](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Módulos, importaciones, mapas de código fuente, rutas, IPC y relaciones con complementos nativos | Node.js y npm; [análisis de aplicaciones](https://rea.tools/es/guides/javascript/) | +| Sitios web | Estructura de la página, scripts, observaciones de red y capturas de pantalla solicitadas | Un navegador de la familia Chrome; [análisis del navegador](https://rea.tools/es/guides/browser/) | | Capturas de red guardadas | Solicitudes, respuestas, contenido accesible de las cargas útiles y ubicaciones de origen | HAR; mitmdump en Linux para capturas en formato nativo de mitmproxy; [guía de capturas](docs/web-network-captures.md) | | Ensamblados .NET | Metadatos, instrucciones CIL, dependencias nativas declaradas y comparaciones de compilaciones | Inspección estática; [guía de código administrado](docs/managed-code-analysis.md) | | APK de Android | Declaraciones del manifiesto, clases, métodos descompilados y referencias | JADX sin interfaz gráfica y un JDK completo en Linux/macOS/Windows x64; [guía de Android](docs/android-analysis.md) | @@ -157,25 +157,25 @@ Los formatos nativos y los sistemas anfitriones compatibles varían según el pr ## Casos prácticos -[![Ilustraciones de los casos de panoramización de sonido de DX-Ball, el puente del portapapeles de Notion y el anillo de proyectiles de TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Ilustraciones de los casos de panoramización de sonido de DX-Ball, el puente del portapapeles de Notion y el anillo de proyectiles de TH04](docs/assets/rea-showcases.png)](https://rea.tools/es/showcase/) ### DX-Ball: reconstruir un cálculo de panoramización de sonido Sigue una llamada de sonido hasta la función auxiliar que convierte la posición en panoramización, inspecciona las instrucciones y transforma el pseudocódigo incompleto en C. La reconstrucción supera 3.205 casos con el x86 original y reproduce los 63 bytes de la función compilada. -[Lee el caso práctico](https://rea.tools/showcase/dx-ball/) · [Repositorio de reconstrucción](https://github.com/N0zoM1z0/dx-ball) +[Lee el caso práctico](https://rea.tools/es/showcase/dx-ball/) · [Repositorio de reconstrucción](https://github.com/N0zoM1z0/dx-ball) ### Notion: seguir el puente del portapapeles de Electron Encuentra la API del portapapeles del proceso de renderizado, síguela a través de preload e IPC hasta el proceso principal e inspecciona el formato enriquecido del portapapeles. -[Lee el caso práctico](https://rea.tools/showcase/notion/) +[Lee el caso práctico](https://rea.tools/es/showcase/notion/) ### TH04: recuperar el cálculo de un anillo de proyectiles en DOS Inspecciona las instrucciones de 16 bits del juego original para PC-98, recupera los cálculos de ángulos fijos y dirigidos, y compara el C++ reconstruido con la salida del compilador de la época. -[Lee el caso práctico](https://rea.tools/showcase/th04/) · [Repositorio de reconstrucción](https://github.com/N0zoM1z0/th04) +[Lee el caso práctico](https://rea.tools/es/showcase/th04/) · [Repositorio de reconstrucción](https://github.com/N0zoM1z0/th04) Si has usado REA para investigar algo interesante, nos gustaría verlo. Comparte tu caso en una [issue](https://github.com/morluto/rea/issues) o una [pull request](https://github.com/morluto/rea/pulls), incluyendo el objetivo, tu pregunta, cómo te ayudó REA y qué encontraste. @@ -246,7 +246,7 @@ Si usas un agente, completa la [actualización de la configuración](#actualiza- ## Documentación -Empieza con las [guías prácticas](https://rea.tools/guides/) del sitio web. Para opciones exactas, requisitos y contratos de resultados: +Empieza con las [guías prácticas](https://rea.tools/es/guides/) del sitio web. Para opciones exactas, requisitos y contratos de resultados: - [Instalación y configuración](docs/installation.md): registro de agentes, configuración de proveedores, actualizaciones y desinstalación. - [Preparación y resolución de problemas](docs/installation.md#check-readiness-for-your-task): diagnóstico de un agente o motor de análisis concreto. diff --git a/README_fa.md b/README_fa.md index b19c2fd12..40f23bde0 100644 --- a/README_fa.md +++ b/README_fa.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[وب‌سایت](https://rea.tools/) · [راهنماها](https://rea.tools/guides/) · [نمونه‌های عملی](https://rea.tools/showcase/)** +**[وب‌سایت](https://rea.tools/fa/) · [راهنماها](https://rea.tools/fa/guides/) · [نمونه‌های عملی](https://rea.tools/fa/showcase/)** [شروع سریع](#شروع-سریع) · [REA چگونه کار می‌کند؟](#rea-چگونه-کار-میکند) · [چه چیزهایی را میتوان تحلیل کرد؟](#چه-چیزهایی-را-میتوان-تحلیل-کرد) · [نمونه‌های عملی](#نمونههای-عملی) · [پرسش‌های متداول](#پرسشهای-متداول) · [مستندات](#مستندات) @@ -46,7 +46,7 @@ REA ایجنت شما را به ابزارهایی برای بررسی باین فرایند راه‌اندازی، REA را در ایجنت شما ثبت می‌کند و دستورالعمل‌های گردش‌کار متناظر را نصب می‌کند. تحلیل بومی می‌تواند از نصب موجود Hopper یا Ghidra استفاده کند؛ همچنین راه‌اندازی می‌تواند با تأیید شما Hopper را به‌صورت اختیاری نصب کند. تحلیل ایستای JavaScript به هیچ‌یک از این موتورهای تحلیل نیاز ندارد. -> برای دستورالعمل‌های راه‌اندازی، راهنماهای تصویری و مطالعات موردی واقعی، **[به وب‌سایت REA مراجعه کنید](https://rea.tools/)**. +> برای دستورالعمل‌های راه‌اندازی، راهنماهای تصویری و مطالعات موردی واقعی، **[به وب‌سایت REA مراجعه کنید](https://rea.tools/fa/)**. ## شروع سریع @@ -125,12 +125,12 @@ REA به Node.js 22.x (>=22.19)، 24.x (>=24.11) یا 26+، به‌همراه np | هدف | خروجی REA | پیش‌نیازها و راهنما | | --------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| باینری‌های بومی | شبه‌کد، اسمبلی، رشته‌ها، نمادها، فراخوانی‌ها و ارجاعات | Hopper، Ghidra یا IDA؛ [تحلیل بومی](https://rea.tools/guides/native/) | +| باینری‌های بومی | شبه‌کد، اسمبلی، رشته‌ها، نمادها، فراخوانی‌ها و ارجاعات | Hopper، Ghidra یا IDA؛ [تحلیل بومی](https://rea.tools/fa/guides/native/) | | ساختار ELF آفلاین | بخش‌ها، سگمنت‌ها، نمادها و relocationهای اصلی و گزینه‌های احتمالی کاهش آسیب‌پذیری ایستا | pwntools تأمین‌شده توسط فراخواننده روی Linux x64؛ [تشخیص باینری](docs/binary-diagnostics.md) | | بایت‌کد EVM | selectorهای dispatch، offsetهای بایتی، آرگومان‌های استنباط‌شده و قابلیت تغییر وضعیت | دادهٔ خام/hex محلی روی Linux x64؛ [راهنمای EVM آفلاین](docs/evm-bytecode.md) | | کرش‌های ثبت‌شدهٔ لینوکس | یادداشت‌های خام، رجیسترها/سیگنال‌های تمام threadهای ثبت‌شده و گزینه‌های احتمالی نگاشت | pwntools تأمین‌شده توسط فراخواننده روی Linux x64؛ GDB/pwndbg اختیاری؛ [کرش‌های ثبت‌شده](docs/recorded-crashes.md) | -| JavaScript / Electron | ماژول‌ها، importها، source mapها، مسیرها، IPC و ارتباط افزونه‌های بومی | Node.js و npm؛ [تحلیل برنامه](https://rea.tools/guides/javascript/) | -| وب‌سایت‌ها | ساختار صفحه، اسکریپت‌ها، مشاهدات شبکه و اسکرین‌شات‌های درخواستی | مرورگر مبتنی بر Chrome؛ [تحلیل مرورگر](https://rea.tools/guides/browser/) | +| JavaScript / Electron | ماژول‌ها، importها، source mapها، مسیرها، IPC و ارتباط افزونه‌های بومی | Node.js و npm؛ [تحلیل برنامه](https://rea.tools/fa/guides/javascript/) | +| وب‌سایت‌ها | ساختار صفحه، اسکریپت‌ها، مشاهدات شبکه و اسکرین‌شات‌های درخواستی | مرورگر مبتنی بر Chrome؛ [تحلیل مرورگر](https://rea.tools/fa/guides/browser/) | | داده‌های ضبط‌شدهٔ شبکه | درخواست‌ها، پاسخ‌ها، payloadهای آشکارشده و مکان آن‌ها در منبع | HAR؛ ابزار mitmdump در لینوکس برای ضبط‌های بومی mitmproxy؛ [راهنمای ضبط شبکه](docs/web-network-captures.md) | | اسمبلی‌های .NET | فراداده، دستورالعمل‌های CIL، وابستگی‌های بومی اعلام‌شده و مقایسهٔ buildها | بررسی ایستا؛ [راهنمای کد مدیریت‌شده](docs/managed-code-analysis.md) | | فایل‌های APK اندروید | تعاریف Manifest، کلاس‌ها، متدهای دیکامپایل‌شده و ارجاعات | JADX بدون رابط گرافیکی و JDK کامل در Linux/macOS/Windows x64؛ [راهنمای اندروید](docs/android-analysis.md) | @@ -149,25 +149,25 @@ REA به Node.js 22.x (>=22.19)، 24.x (>=24.11) یا 26+، به‌همراه np ## نمونه‌های عملی -[![تصویرهایی از نمونه‌های پنینگ صدای DX-Ball، پل کلیپ‌بورد Notion و حلقهٔ گلوله‌های TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![تصویرهایی از نمونه‌های پنینگ صدای DX-Ball، پل کلیپ‌بورد Notion و حلقهٔ گلوله‌های TH04](docs/assets/rea-showcases.png)](https://rea.tools/fa/showcase/) ### DX-Ball: بازسازی محاسبهٔ موقعیت استریوی صدا یک فراخوانی صوتی را تا تابع کمکی تبدیل موقعیت به pan دنبال کنید، دستورالعمل‌ها را بررسی کنید و شبه‌کد ناقص را به C تبدیل کنید. بازسازی حاصل، هر ۳٬۲۰۵ مورد آزمایش x86 اصلی را با موفقیت پشت سر می‌گذارد و هر ۶۳ بایت تابع کامپایل‌شده را دقیقاً بازتولید می‌کند. -[مطالعهٔ موردی](https://rea.tools/showcase/dx-ball/) · [مخزن بازسازی](https://github.com/N0zoM1z0/dx-ball) +[مطالعهٔ موردی](https://rea.tools/fa/showcase/dx-ball/) · [مخزن بازسازی](https://github.com/N0zoM1z0/dx-ball) ### Notion: ردیابی پل کلیپ‌بورد Electron API کلیپ‌بورد در renderer را پیدا کنید، مسیر آن را از preload و IPC تا فرایند اصلی دنبال کنید و قالب غنی کلیپ‌بورد را بررسی کنید. -[مطالعهٔ موردی](https://rea.tools/showcase/notion/) +[مطالعهٔ موردی](https://rea.tools/fa/showcase/notion/) ### TH04: بازیابی محاسبهٔ حلقهٔ گلوله در DOS دستورالعمل‌های ۱۶بیتی بازی اصلی PC-98 را بررسی کنید، محاسبات زاویهٔ ثابت و هدف‌گیری‌شده را بازیابی کنید و کد C++ بازسازی‌شده را با خروجی کامپایلر تاریخی مقایسه کنید. -[مطالعهٔ موردی](https://rea.tools/showcase/th04/) · [مخزن بازسازی](https://github.com/N0zoM1z0/th04) +[مطالعهٔ موردی](https://rea.tools/fa/showcase/th04/) · [مخزن بازسازی](https://github.com/N0zoM1z0/th04) اگر از REA برای بررسی موضوع جالبی استفاده کرده‌اید، خوشحال می‌شویم آن را به اشتراک بگذارید. یک [issue](https://github.com/morluto/rea/issues) یا [pull request](https://github.com/morluto/rea/pulls) ثبت کنید و هدف، پرسش خود، نقش REA و یافته‌هایتان را توضیح دهید. @@ -231,7 +231,7 @@ npx rea-agents@latest setup ## مستندات -از [راهنماهای عملی وب‌سایت](https://rea.tools/guides/) شروع کنید. برای گزینه‌های دقیق، پیش‌نیازها و قراردادهای خروجی: +از [راهنماهای عملی وب‌سایت](https://rea.tools/fa/guides/) شروع کنید. برای گزینه‌های دقیق، پیش‌نیازها و قراردادهای خروجی: - [نصب و راه‌اندازی](docs/installation.md): ثبت ایجنت، پیکربندی ارائه‌دهنده، به‌روزرسانی و حذف نصب. - [آمادگی و رفع اشکال](docs/installation.md#check-readiness-for-your-task): عیب‌یابی یک ایجنت یا موتور تحلیل. diff --git a/README_fr.md b/README_fr.md index 9df9441e9..dcbb00325 100644 --- a/README_fr.md +++ b/README_fr.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Site web](https://rea.tools/) · [Guides](https://rea.tools/guides/) · [Études de cas](https://rea.tools/showcase/)** +**[Site web](https://rea.tools/fr/) · [Guides](https://rea.tools/fr/guides/) · [Études de cas](https://rea.tools/fr/showcase/)** [Démarrage rapide](#démarrage-rapide) · [Comment fonctionne REA](#comment-fonctionne-rea) · [Ce que vous pouvez analyser](#ce-que-vous-pouvez-analyser) · [Études de cas](#études-de-cas) · [Questions fréquentes](#questions-fréquentes) · [Documentation](#documentation) @@ -54,7 +54,7 @@ REA connecte votre agent à des outils d'inspection de binaires natifs, d'applic Setup enregistre REA auprès de votre agent et installe les instructions de workflow correspondantes. L'analyse native peut utiliser une installation existante de Hopper ou de Ghidra ; Setup peut aussi installer Hopper après votre accord. L'analyse statique JavaScript ne nécessite aucun de ces moteurs. -> **[Visitez le site web de REA](https://rea.tools/)** pour les instructions d'installation, des guides illustrés et des études de cas réelles. +> **[Visitez le site web de REA](https://rea.tools/fr/)** pour les instructions d'installation, des guides illustrés et des études de cas réelles. ## Démarrage rapide @@ -134,12 +134,12 @@ REA nécessite Node.js 22.x (>=22.19), 24.x (>=24.11) ou 26+, ainsi que npm. Les | Cible | Ce que REA renvoie | Prérequis et guide | | ---------------------------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| Binaires natifs | Pseudo-code, assembleur, chaînes, symboles, appels et références | Hopper, Ghidra ou IDA ; [analyse native](https://rea.tools/guides/native/) | +| Binaires natifs | Pseudo-code, assembleur, chaînes, symboles, appels et références | Hopper, Ghidra ou IDA ; [analyse native](https://rea.tools/fr/guides/native/) | | Structure ELF hors ligne | Sections, segments, symboles et relocations d'origine, et protections statiques candidates | pwntools fourni par l'utilisateur sous Linux x64 ; [diagnostics binaires](docs/binary-diagnostics.md) | | Bytecode EVM | Sélecteurs de dispatch, offsets en octets, arguments inférés et mutabilité | Fichier local brut ou hexadécimal sous Linux x64 ; [guide EVM hors ligne](docs/evm-bytecode.md) | | Crashs Linux enregistrés | Notes brutes, registres et signaux de chaque thread enregistré, et correspondances de mappings facultatives | pwntools fourni par l'utilisateur sous Linux x64 ; GDB/pwndbg en option ; [crashs enregistrés](docs/recorded-crashes.md) | -| JavaScript / Electron | Modules, imports, source maps, routes, IPC et relations avec les modules natifs | Node.js et npm ; [analyse d'applications](https://rea.tools/guides/javascript/) | -| Sites web | Structure des pages, scripts, observations réseau et captures d'écran demandées | Un navigateur de la famille Chrome ; [analyse du navigateur](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Modules, imports, source maps, routes, IPC et relations avec les modules natifs | Node.js et npm ; [analyse d'applications](https://rea.tools/fr/guides/javascript/) | +| Sites web | Structure des pages, scripts, observations réseau et captures d'écran demandées | Un navigateur de la famille Chrome ; [analyse du navigateur](https://rea.tools/fr/guides/browser/) | | Captures réseau enregistrées | Requêtes, réponses, payloads exposés et emplacements dans le code source | HAR ; mitmdump sous Linux pour les captures mitmproxy natives ; [guide des captures](docs/web-network-captures.md) | | Assemblys .NET | Métadonnées, instructions CIL, dépendances natives déclarées et comparaisons de builds | Inspection statique ; [guide du code managé](docs/managed-code-analysis.md) | | APK Android | Déclarations du manifeste, classes, méthodes décompilées et références | JADX headless et un JDK complet sous Linux/macOS/Windows x64 ; [guide Android](docs/android-analysis.md) | @@ -158,25 +158,25 @@ Les formats natifs et les hôtes pris en charge varient selon le fournisseur. Co ## Études de cas -[![Illustrations des études sur la spatialisation sonore de DX-Ball, le pont du presse-papiers de Notion et le cercle de projectiles de TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Illustrations des études sur la spatialisation sonore de DX-Ball, le pont du presse-papiers de Notion et le cercle de projectiles de TH04](docs/assets/rea-showcases.png)](https://rea.tools/fr/showcase/) ### DX-Ball : reconstruire un calcul de panoramique sonore Suivez un appel sonore jusqu'à la fonction qui convertit une position en panoramique, inspectez ses instructions et transformez un pseudo-code incomplet en C. La reconstruction réussit 3 205 cas issus du x86 d'origine et reproduit à l'identique les 63 octets de la fonction compilée. -[Lire l'étude de cas](https://rea.tools/showcase/dx-ball/) · [Dépôt de la reconstruction](https://github.com/N0zoM1z0/dx-ball) +[Lire l'étude de cas](https://rea.tools/fr/showcase/dx-ball/) · [Dépôt de la reconstruction](https://github.com/N0zoM1z0/dx-ball) ### Notion : suivre le pont du presse-papiers d'Electron Trouvez l'API de presse-papiers du renderer, suivez-la à travers le preload et l'IPC jusqu'au processus principal, puis inspectez le format de presse-papiers enrichi. -[Lire l'étude de cas](https://rea.tools/showcase/notion/) +[Lire l'étude de cas](https://rea.tools/fr/showcase/notion/) ### TH04 : retrouver un calcul d'anneau de projectiles sous DOS Inspectez les instructions 16 bits du jeu PC-98 d'origine, retrouvez les calculs d'angles fixes et visés, et comparez le C++ reconstruit avec la sortie du compilateur d'époque. -[Lire l'étude de cas](https://rea.tools/showcase/th04/) · [Dépôt de la reconstruction](https://github.com/N0zoM1z0/th04) +[Lire l'étude de cas](https://rea.tools/fr/showcase/th04/) · [Dépôt de la reconstruction](https://github.com/N0zoM1z0/th04) Si vous avez utilisé REA sur un projet intéressant, nous serions ravis de le découvrir. Partagez votre cas dans une [issue](https://github.com/morluto/rea/issues) ou une [pull request](https://github.com/morluto/rea/pulls), en précisant la cible, votre question, la manière dont REA vous a aidé et ce que vous avez découvert. @@ -247,7 +247,7 @@ Si vous utilisez un agent, terminez l'[actualisation de la configuration](#mettr ## Documentation -Commencez par les [guides pas à pas](https://rea.tools/guides/) du site web. Pour les options exactes, les prérequis et les contrats de résultats : +Commencez par les [guides pas à pas](https://rea.tools/fr/guides/) du site web. Pour les options exactes, les prérequis et les contrats de résultats : - [Installation et configuration](docs/installation.md) : enregistrement des agents, configuration des fournisseurs, mises à jour et désinstallation. - [Vérification et dépannage](docs/installation.md#check-readiness-for-your-task) : diagnostiquer un agent ou un moteur d'analyse précis. diff --git a/README_id.md b/README_id.md index cf3586cac..f924db9ab 100644 --- a/README_id.md +++ b/README_id.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Situs Web](https://rea.tools/) · [Panduan](https://rea.tools/guides/) · [Contoh Penggunaan](https://rea.tools/showcase/)** +**[Situs Web](https://rea.tools/id/) · [Panduan](https://rea.tools/id/guides/) · [Contoh Penggunaan](https://rea.tools/id/showcase/)** [Mulai Cepat](#mulai-cepat) · [Cara Kerja REA](#cara-kerja-rea) · [Hal yang Dapat Anda Analisis](#hal-yang-dapat-anda-analisis) · [Contoh Penggunaan](#contoh-penggunaan) · [FAQ](#faq) · [Dokumentasi](#dokumentasi) @@ -54,7 +54,7 @@ REA menghubungkan agen Anda dengan berbagai alat untuk memeriksa biner native, a Proses penyiapan mendaftarkan REA ke agen Anda dan memasang instruksi alur kerja yang sesuai. Analisis native dapat menggunakan instalasi Hopper, Ghidra, atau IDA yang sudah ada. Proses penyiapan juga dapat memasang Hopper secara opsional setelah mendapatkan persetujuan. Analisis JavaScript statis tidak memerlukan mesin analisis native. -> **[Kunjungi situs web REA](https://rea.tools/)** untuk mendapatkan petunjuk penyiapan, panduan bergambar, dan studi kasus nyata. +> **[Kunjungi situs web REA](https://rea.tools/id/)** untuk mendapatkan petunjuk penyiapan, panduan bergambar, dan studi kasus nyata. ## Mulai Cepat @@ -137,12 +137,12 @@ Alat tambahan dan dukungan sistem host bergantung pada target yang dianalisis: | Target | Hasil yang diberikan REA | Persyaratan dan panduan | | -------------------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| Biner native | Pseudocode, assembly, string, simbol, pemanggilan, dan referensi | Hopper, Ghidra, atau IDA; [analisis native](https://rea.tools/guides/native/) | +| Biner native | Pseudocode, assembly, string, simbol, pemanggilan, dan referensi | Hopper, Ghidra, atau IDA; [analisis native](https://rea.tools/id/guides/native/) | | Tata letak ELF offline | Bagian, segmen, simbol/relokasi asli, dan kandidat mitigasi statis | pwntools yang disediakan pemanggil pada Linux x64; [diagnostik biner](docs/binary-diagnostics.md) | | Bytecode EVM | Selector dispatch, offset byte, argumen yang disimpulkan, dan sifat mutabilitas | Pembawa data raw/hex lokal; [panduan EVM offline](docs/evm-bytecode.md) | | Crash Linux yang direkam | Catatan mentah, register/sinyal setiap thread yang direkam, dan kandidat pemetaan opsional | pwntools yang disediakan pemanggil; GDB/pwndbg opsional; [crash yang direkam](docs/recorded-crashes.md) | -| JavaScript / Electron | Modul, impor, source map, rute, IPC, dan hubungan add-on native | Node.js dan npm; [analisis aplikasi](https://rea.tools/guides/javascript/) | -| Situs web | Struktur halaman, skrip, pengamatan jaringan, dan tangkapan layar yang diminta | Peramban berbasis Chrome; [analisis peramban](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Modul, impor, source map, rute, IPC, dan hubungan add-on native | Node.js dan npm; [analisis aplikasi](https://rea.tools/id/guides/javascript/) | +| Situs web | Struktur halaman, skrip, pengamatan jaringan, dan tangkapan layar yang diminta | Peramban berbasis Chrome; [analisis peramban](https://rea.tools/id/guides/browser/) | | Rekaman jaringan tersimpan | Permintaan, respons, payload yang terekspos, dan lokasi sumber | HAR; mitmdump di Linux untuk rekaman native mitmproxy; [panduan rekaman](docs/web-network-captures.md) | | Assembly .NET | Metadata, instruksi CIL, dependensi native yang dideklarasikan, dan perbandingan build | Tidak ada (hanya analisis statis); [panduan kode terkelola](docs/managed-code-analysis.md) | | APK Android | Deklarasi manifest, kelas, metode hasil dekompilasi, dan referensi | JADX mode headless dan JDK lengkap di Linux/macOS/Windows x64; [panduan Android](docs/android-analysis.md) | @@ -169,25 +169,25 @@ Periksa [ketersediaan rilis](docs/installation.md#released-package-and-main) unt ## Contoh Penggunaan -[![Ilustrasi contoh penggunaan DX-Ball sound-pan, Notion clipboard-bridge, dan TH04 bullet-ring](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Ilustrasi contoh penggunaan DX-Ball sound-pan, Notion clipboard-bridge, dan TH04 bullet-ring](docs/assets/rea-showcases.png)](https://rea.tools/id/showcase/) ### DX-Ball: merekonstruksi perhitungan sound-pan Ikuti pemanggilan suara hingga ke fungsi pembantu yang mengubah posisi menjadi nilai pan, periksa instruksinya, lalu ubah pseudocode yang belum lengkap menjadi C. Hasil rekonstruksi tersebut lolos pada 3.205 kasus x86 asli dan mereproduksi seluruh 63 byte fungsi hasil kompilasi. -[Baca studi kasus](https://rea.tools/showcase/dx-ball/) · [Repositori rekonstruksi](https://github.com/N0zoM1z0/dx-ball) +[Baca studi kasus](https://rea.tools/id/showcase/dx-ball/) · [Repositori rekonstruksi](https://github.com/N0zoM1z0/dx-ball) ### Notion: menelusuri jembatan clipboard Electron Temukan API clipboard pada renderer, telusuri jalurnya melalui preload dan IPC hingga ke proses utama, lalu periksa format clipboard kaya. -[Baca studi kasus](https://rea.tools/showcase/notion/) +[Baca studi kasus](https://rea.tools/id/showcase/notion/) ### TH04: memulihkan perhitungan bullet-ring DOS Periksa instruksi 16-bit dari gim PC-98 asli, pulihkan perhitungan sudut tetap dan sudut yang diarahkan, lalu bandingkan C++ hasil rekonstruksi dengan keluaran historis kompiler. -[Baca studi kasus](https://rea.tools/showcase/th04/) · [Repositori rekonstruksi](https://github.com/N0zoM1z0/th04) +[Baca studi kasus](https://rea.tools/id/showcase/th04/) · [Repositori rekonstruksi](https://github.com/N0zoM1z0/th04) Jika Anda telah menggunakan REA untuk menganalisis sesuatu yang menarik, kami ingin melihat hasilnya. Bagikan kasus Anda melalui [issue](https://github.com/morluto/rea/issues) atau [pull request](https://github.com/morluto/rea/pulls), sertakan target, pertanyaan Anda, bagaimana REA membantu, dan apa yang Anda temukan. @@ -266,7 +266,7 @@ Coba kembali tugas yang sama. Jika masalah masih terjadi, [buat issue](https://g ## Dokumentasi -Mulailah dengan [panduan praktik di situs web](https://rea.tools/guides/). +Mulailah dengan [panduan praktik di situs web](https://rea.tools/id/guides/). Untuk mengetahui opsi, prasyarat, dan kontrak hasil secara tepat: diff --git a/README_it.md b/README_it.md index 2dcbc6fcd..8238fb28b 100644 --- a/README_it.md +++ b/README_it.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Sito web](https://rea.tools/) · [Guide](https://rea.tools/guides/) · [Showcase](https://rea.tools/showcase/)** +**[Sito web](https://rea.tools/it/) · [Guide](https://rea.tools/it/guides/) · [Showcase](https://rea.tools/it/showcase/)** [Quick start](#quick-start) · [Come funziona REA](#come-funziona-rea) · [Cosa puoi analizzare](#cosa-puoi-analizzare) · [Showcase](#showcase) · [FAQ](#faq) · [Documentazione](#documentazione) @@ -54,7 +54,7 @@ REA collega il tuo agente a strumenti per ispezionare binari nativi, app JavaScr La configurazione registra REA con il tuo agente e installa le istruzioni di workflow corrispondenti. L'analisi nativa può usare un'installazione esistente di Hopper, Ghidra o IDA; la configurazione può installare opzionalmente Hopper previa approvazione. L'analisi statica JavaScript non richiede alcun motore di analisi nativo. -> **[Visita il sito web di REA](https://rea.tools/)** per istruzioni di configurazione, guide illustrate e veri casi studio. +> **[Visita il sito web di REA](https://rea.tools/it/)** per istruzioni di configurazione, guide illustrate e veri casi studio. ## Quick start @@ -134,12 +134,12 @@ REA richiede Node.js 22.x (>=22.19), 24.x (>=24.11) o 26+, oltre a npm. Strument | Obiettivo | Cosa restituisce REA | Requisiti e guida | | ---------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| Binari nativi | Pseudocodice, assembly, stringhe, simboli, chiamate e riferimenti | Hopper, Ghidra o IDA; [analisi nativa](https://rea.tools/guides/native/) | +| Binari nativi | Pseudocodice, assembly, stringhe, simboli, chiamate e riferimenti | Hopper, Ghidra o IDA; [analisi nativa](https://rea.tools/it/guides/native/) | | Layout ELF offline | Sezioni, segmenti, simboli/relocazioni originali e candidati mitigazioni statiche | pwntools fornito dal chiamante su Linux x64; [diagnostica binaria](docs/binary-diagnostics.md) | | Bytecode EVM | Selettori di dispatch, offset dei byte, argomenti inferiti e mutabilità | Carrier raw/hex locale; [guida EVM offline](docs/evm-bytecode.md) | | Crash Linux registrati | Note grezze, registri/segnai di ogni thread registrato e candidati mapping opzionali | pwntools fornito dal chiamante; GDB/pwndbg opzionale; [crash registrati](docs/recorded-crashes.md) | -| JavaScript / Electron | Moduli, import, source map, route, IPC e relazioni con add-on nativi | Node.js e npm; [analisi delle applicazioni](https://rea.tools/guides/javascript/) | -| Siti web | Struttura della pagina, script, osservazioni di rete e screenshot richiesti | Un browser della famiglia Chrome; [analisi browser](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Moduli, import, source map, route, IPC e relazioni con add-on nativi | Node.js e npm; [analisi delle applicazioni](https://rea.tools/it/guides/javascript/) | +| Siti web | Struttura della pagina, script, osservazioni di rete e screenshot richiesti | Un browser della famiglia Chrome; [analisi browser](https://rea.tools/it/guides/browser/) | | Acquisizioni di rete salvate | Richieste, risposte, payload esposti e posizioni sorgente | HAR; mitmdump su Linux per acquisizioni mitmproxy native; [guida alle acquisizioni](docs/web-network-captures.md) | | Assembly .NET | Metadati, istruzioni CIL, dipendenze native dichiarate e confronti di build | Nessuno (solo statico); [guida managed-code](docs/managed-code-analysis.md) | | APK Android | Dichiarazioni manifest, classi, metodi decompilati e riferimenti | JADX headless e un JDK completo su Linux/macOS/Windows x64; [guida Android](docs/android-analysis.md) | @@ -158,25 +158,25 @@ I formati nativi e il supporto host variano in base al provider. Vedi la [config ## Showcase -[![Illustrazioni degli showcase del sound-pan di DX-Ball, del clipboard-bridge di Notion e dell'anello di proiettili di TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Illustrazioni degli showcase del sound-pan di DX-Ball, del clipboard-bridge di Notion e dell'anello di proiettili di TH04](docs/assets/rea-showcases.png)](https://rea.tools/it/showcase/) ### DX-Ball: ricostruisci un calcolo sound-pan Segui una chiamata sonora fino al suo helper posizione-to-pan, ispeziona le istruzioni e trasforma il pseudocodice incompleto in C. La ricostruzione supera 3.205 casi x86 originali e riproduce tutti i 63 byte di funzione compilati. -[Leggi il case study](https://rea.tools/showcase/dx-ball/) · [Repository di ricostruzione](https://github.com/N0zoM1z0/dx-ball) +[Leggi il case study](https://rea.tools/it/showcase/dx-ball/) · [Repository di ricostruzione](https://github.com/N0zoM1z0/dx-ball) ### Notion: traccia il clipboard bridge di Electron Trova l'API clipboard del renderer, seguila attraverso preload e IPC fino al processo principale e ispeziona il formato rich clipboard. -[Leggi il case study](https://rea.tools/showcase/notion/) +[Leggi il case study](https://rea.tools/it/showcase/notion/) ### TH04: recupera un calcolo dell'anello di proiettili DOS Ispeziona le istruzioni a 16 bit del gioco PC-98 originale, recupera i calcoli dell'angolo fisso e mirato e confronta il C++ ricostruito con l'output del compilatore storico. -[Leggi il case study](https://rea.tools/showcase/th04/) · [Repository di ricostruzione](https://github.com/N0zoM1z0/th04) +[Leggi il case study](https://rea.tools/it/showcase/th04/) · [Repository di ricostruzione](https://github.com/N0zoM1z0/th04) Se hai usato REA su qualcosa di interessante, ci piacerebbe vederlo. Condividi il tuo caso in una [issue](https://github.com/morluto/rea/issues) o in una [pull request](https://github.com/morluto/rea/pulls), includendo il bersaglio, la tua domanda, come REA ti ha aiutato e cosa hai scoperto. @@ -247,7 +247,7 @@ Se stai usando un agente, completa l'[aggiornamento della configurazione](#aggio ## Documentazione -Inizia dalle [guide pratiche](https://rea.tools/guides/) del sito web. Per opzioni esatte, prerequisiti e contratti dei risultati: +Inizia dalle [guide pratiche](https://rea.tools/it/guides/) del sito web. Per opzioni esatte, prerequisiti e contratti dei risultati: - [Installazione e configurazione](docs/installation.md): registrazione agente, configurazione provider, aggiornamenti e disinstallazione. - [Pronto all'uso e risoluzione dei problemi](docs/installation.md#check-readiness-for-your-task): diagnostica un agente o un motore di analisi. diff --git a/README_ja.md b/README_ja.md index efcde189b..0d83bcf9a 100644 --- a/README_ja.md +++ b/README_ja.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[ウェブサイト](https://rea.tools/) · [ガイド](https://rea.tools/guides/) · [事例](https://rea.tools/showcase/)** +**[ウェブサイト](https://rea.tools/ja/) · [ガイド](https://rea.tools/ja/guides/) · [事例](https://rea.tools/ja/showcase/)** [クイックスタート](#クイックスタート) · [REA の仕組み](#rea-の仕組み) · [分析できる対象](#分析できる対象) · [事例](#事例) · [よくある質問](#よくある質問) · [ドキュメント](#ドキュメント) @@ -54,7 +54,7 @@ REA はエージェントを分析ツールにつなぎ、ネイティブバイ セットアップはエージェントに REA を登録し、対応するワークフローの手順をインストールします。ネイティブ分析には既存の Hopper または Ghidra を使えます。承認すれば、セットアップで Hopper をインストールすることもできます。静的な JavaScript 分析には、どちらのエンジンも必要ありません。 -> **[REA のウェブサイト](https://rea.tools/)**で、セットアップ手順、図解ガイド、実際の事例を確認できます。 +> **[REA のウェブサイト](https://rea.tools/ja/)**で、セットアップ手順、図解ガイド、実際の事例を確認できます。 ## クイックスタート @@ -133,12 +133,12 @@ REA には Node.js 22.x(>=22.19)、24.x(>=24.11)、または 26+ と npm | 対象 | REA が返すもの | 要件とガイド | | -------------------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| ネイティブバイナリ | 疑似コード、アセンブリ、文字列、シンボル、呼び出し、参照 | Hopper、Ghidra、または IDA;[ネイティブ分析](https://rea.tools/guides/native/) | +| ネイティブバイナリ | 疑似コード、アセンブリ、文字列、シンボル、呼び出し、参照 | Hopper、Ghidra、または IDA;[ネイティブ分析](https://rea.tools/ja/guides/native/) | | オフライン ELF レイアウト | セクション、セグメント、元のシンボル/再配置情報、静的解析によるセキュリティ対策の候補 | Linux x64 で利用者が用意する pwntools;[バイナリ診断](docs/binary-diagnostics.md) | | EVM バイトコード | ディスパッチセレクター、バイトオフセット、推定された引数と状態変更の可否 | Linux x64 上のローカルの生バイト/16 進数の入力ファイル;[オフライン EVM ガイド](docs/evm-bytecode.md) | | 記録済みの Linux クラッシュ | 生の note レコード、記録された全スレッドのレジスター/シグナル、任意のマッピング候補 | Linux x64 で利用者が用意する pwntools;GDB/pwndbg は任意;[記録済みクラッシュ](docs/recorded-crashes.md) | -| JavaScript / Electron | モジュール、インポート、ソースマップ、ルート、IPC、ネイティブアドオンの関係 | Node.js と npm;[アプリケーション分析](https://rea.tools/guides/javascript/) | -| ウェブサイト | ページ構造、スクリプト、ネットワークの観測結果、依頼されたスクリーンショット | Chrome 系ブラウザー;[ブラウザー分析](https://rea.tools/guides/browser/) | +| JavaScript / Electron | モジュール、インポート、ソースマップ、ルート、IPC、ネイティブアドオンの関係 | Node.js と npm;[アプリケーション分析](https://rea.tools/ja/guides/javascript/) | +| ウェブサイト | ページ構造、スクリプト、ネットワークの観測結果、依頼されたスクリーンショット | Chrome 系ブラウザー;[ブラウザー分析](https://rea.tools/ja/guides/browser/) | | 保存済みのネットワークキャプチャ | リクエスト、レスポンス、取得可能なペイロード、ソース内の位置 | HAR;mitmproxy ネイティブ形式のキャプチャには Linux 上の mitmdump;[キャプチャガイド](docs/web-network-captures.md) | | .NET アセンブリ | メタデータ、CIL 命令、宣言されたネイティブ依存関係、ビルドの比較 | 静的な検査;[マネージドコードのガイド](docs/managed-code-analysis.md) | | Android APK | マニフェストの宣言、クラス、逆コンパイルされたメソッド、参照 | Linux/macOS/Windows x64 上のヘッドレス JADX と完全な JDK;[Android ガイド](docs/android-analysis.md) | @@ -157,26 +157,26 @@ REA には Node.js 22.x(>=22.19)、24.x(>=24.11)、または 26+ と npm ## 事例 -[![DX-Ball の音声パン、Notion のクリップボードブリッジ、TH04 の弾幕リングの事例を表すイラスト](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![DX-Ball の音声パン、Notion のクリップボードブリッジ、TH04 の弾幕リングの事例を表すイラスト](docs/assets/rea-showcases.png)](https://rea.tools/ja/showcase/) ### DX-Ball:音声のパン計算を再構築する 音声の呼び出しから位置をパンに変換する補助関数をたどり、命令を調べ、不完全な疑似コードを C に書き直します。再構築した実装は、元の x86 に対する 3,205 ケースの検証を通過し、コンパイル後の関数の全 63 バイトを再現しています。 -[事例を読む](https://rea.tools/showcase/dx-ball/) · +[事例を読む](https://rea.tools/ja/showcase/dx-ball/) · [再構築リポジトリ](https://github.com/N0zoM1z0/dx-ball) ### Notion:Electron のクリップボードブリッジを追跡する レンダラーのクリップボード API を見つけ、preload と IPC を経由してメインプロセスまでたどり、リッチなクリップボード形式を調べます。 -[事例を読む](https://rea.tools/showcase/notion/) +[事例を読む](https://rea.tools/ja/showcase/notion/) ### TH04:DOS の弾幕リングの計算を復元する 元の PC-98 ゲームの 16 ビット命令を調べ、固定角度と自機を狙う角度の計算を復元し、再構築した C++ を当時のコンパイラーの出力と比較します。 -[事例を読む](https://rea.tools/showcase/th04/) · +[事例を読む](https://rea.tools/ja/showcase/th04/) · [再構築リポジトリ](https://github.com/N0zoM1z0/th04) REA で興味深い対象を調べたら、ぜひ共有してください。[issue](https://github.com/morluto/rea/issues) または [pull request](https://github.com/morluto/rea/pulls) に、対象、調べたかったこと、REA がどう役立ったか、何が分かったかを記載してください。 @@ -248,7 +248,7 @@ npx rea-agents@latest setup ## ドキュメント -まずはウェブサイトの[実践ガイド](https://rea.tools/guides/)を参照してください。正確なオプション、前提条件、結果の契約については、以下を参照してください。 +まずはウェブサイトの[実践ガイド](https://rea.tools/ja/guides/)を参照してください。正確なオプション、前提条件、結果の契約については、以下を参照してください。 - [インストールとセットアップ](docs/installation.md):エージェントの登録、プロバイダーの設定、更新、アンインストール。 - [準備状況の確認とトラブルシューティング](docs/installation.md#check-readiness-for-your-task):特定のエージェントや分析エンジンを診断。 diff --git a/README_ko.md b/README_ko.md index 0a9f89b66..aeeda0498 100644 --- a/README_ko.md +++ b/README_ko.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[웹사이트](https://rea.tools/) · [가이드](https://rea.tools/guides/) · [사례](https://rea.tools/showcase/)** +**[웹사이트](https://rea.tools/ko/) · [가이드](https://rea.tools/ko/guides/) · [사례](https://rea.tools/ko/showcase/)** [빠른 시작](#빠른-시작) · [REA의 작동 방식](#rea의-작동-방식) · [분석할 수 있는 대상](#분석할-수-있는-대상) · [사례](#사례) · [자주 묻는 질문](#자주-묻는-질문) · [문서](#문서) @@ -54,7 +54,7 @@ REA는 에이전트를 분석 도구에 연결해 네이티브 바이너리, Jav 설정 과정은 에이전트에 REA를 등록하고 해당 버전에 맞는 워크플로 지침을 설치합니다. 네이티브 분석에는 기존 Hopper 또는 Ghidra 설치를 사용할 수 있습니다. 승인하면 설정 과정에서 Hopper를 설치할 수도 있습니다. 정적 JavaScript 분석에는 두 엔진 모두 필요하지 않습니다. -> **[REA 웹사이트](https://rea.tools/)**에서 설정 방법, 그림으로 설명한 가이드, 실제 사례를 확인하세요. +> **[REA 웹사이트](https://rea.tools/ko/)**에서 설정 방법, 그림으로 설명한 가이드, 실제 사례를 확인하세요. ## 빠른 시작 @@ -133,12 +133,12 @@ REA에는 Node.js 22.x(>=22.19), 24.x(>=24.11) 또는 26+와 npm이 필요합니 | 대상 | REA가 반환하는 내용 | 요구 사항 및 가이드 | | --------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| 네이티브 바이너리 | 의사 코드, 어셈블리, 문자열, 심볼, 호출, 참조 | Hopper, Ghidra 또는 IDA; [네이티브 분석](https://rea.tools/guides/native/) | +| 네이티브 바이너리 | 의사 코드, 어셈블리, 문자열, 심볼, 호출, 참조 | Hopper, Ghidra 또는 IDA; [네이티브 분석](https://rea.tools/ko/guides/native/) | | 오프라인 ELF 레이아웃 | 섹션, 세그먼트, 원본 심볼/재배치 정보, 정적 분석으로 얻은 보안 완화 기법 후보 | Linux x64에서 호출자가 제공하는 pwntools; [바이너리 진단](docs/binary-diagnostics.md) | | EVM 바이트코드 | 디스패치 선택자, 바이트 오프셋, 추론한 인자와 상태 변경 가능 여부 | Linux x64의 로컬 원시 바이트/16진수 입력 파일; [오프라인 EVM 가이드](docs/evm-bytecode.md) | | 기록된 Linux 크래시 | 원시 note 레코드, 기록된 모든 스레드의 레지스터/시그널, 선택적 매핑 후보 | Linux x64에서 호출자가 제공하는 pwntools; GDB/pwndbg는 선택 사항; [기록된 크래시](docs/recorded-crashes.md) | -| JavaScript / Electron | 모듈, 임포트, 소스 맵, 라우트, IPC, 네이티브 애드온 관계 | Node.js와 npm; [애플리케이션 분석](https://rea.tools/guides/javascript/) | -| 웹사이트 | 페이지 구조, 스크립트, 네트워크 관찰 결과, 요청한 스크린샷 | Chrome 계열 브라우저; [브라우저 분석](https://rea.tools/guides/browser/) | +| JavaScript / Electron | 모듈, 임포트, 소스 맵, 라우트, IPC, 네이티브 애드온 관계 | Node.js와 npm; [애플리케이션 분석](https://rea.tools/ko/guides/javascript/) | +| 웹사이트 | 페이지 구조, 스크립트, 네트워크 관찰 결과, 요청한 스크린샷 | Chrome 계열 브라우저; [브라우저 분석](https://rea.tools/ko/guides/browser/) | | 저장된 네트워크 캡처 | 요청, 응답, 접근 가능한 페이로드, 소스 위치 | HAR; mitmproxy 네이티브 캡처에는 Linux의 mitmdump; [캡처 가이드](docs/web-network-captures.md) | | .NET 어셈블리 | 메타데이터, CIL 명령, 선언된 네이티브 의존성, 빌드 비교 | 정적 검사; [관리 코드 가이드](docs/managed-code-analysis.md) | | Android APK | 매니페스트 선언, 클래스, 디컴파일된 메서드, 참조 | Linux/macOS/Windows x64의 헤드리스 JADX와 전체 JDK; [Android 가이드](docs/android-analysis.md) | @@ -157,26 +157,26 @@ REA에는 Node.js 22.x(>=22.19), 24.x(>=24.11) 또는 26+와 npm이 필요합니 ## 사례 -[![DX-Ball 사운드 패닝, Notion 클립보드 브리지, TH04 탄환 고리 사례를 보여 주는 그림](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![DX-Ball 사운드 패닝, Notion 클립보드 브리지, TH04 탄환 고리 사례를 보여 주는 그림](docs/assets/rea-showcases.png)](https://rea.tools/ko/showcase/) ### DX-Ball: 사운드 패닝 계산 재구현 사운드 호출에서 위치를 패닝 값으로 변환하는 보조 함수까지 추적하고, 명령을 검사하여 불완전한 의사 코드를 C로 옮깁니다. 재구현한 코드는 원본 x86에 대한 3,205개 테스트 케이스를 통과했으며, 컴파일된 함수의 63바이트 전체를 재현합니다. -[사례 읽기](https://rea.tools/showcase/dx-ball/) · +[사례 읽기](https://rea.tools/ko/showcase/dx-ball/) · [재구현 저장소](https://github.com/N0zoM1z0/dx-ball) ### Notion: Electron 클립보드 브리지 추적 렌더러의 클립보드 API를 찾고, preload와 IPC를 거쳐 메인 프로세스까지 추적한 뒤, 서식 있는 클립보드 형식을 검사합니다. -[사례 읽기](https://rea.tools/showcase/notion/) +[사례 읽기](https://rea.tools/ko/showcase/notion/) ### TH04: DOS 원형 탄막 계산 복원 원본 PC-98 게임의 16비트 명령을 검사하고 고정 각도와 조준 각도의 계산을 복원합니다. 재구현한 C++를 당시 컴파일러의 출력과 비교합니다. -[사례 읽기](https://rea.tools/showcase/th04/) · +[사례 읽기](https://rea.tools/ko/showcase/th04/) · [재구현 저장소](https://github.com/N0zoM1z0/th04) REA로 흥미로운 대상을 분석했다면 알려 주세요. [issue](https://github.com/morluto/rea/issues) 또는 [pull request](https://github.com/morluto/rea/pulls)에 대상, 조사하려던 질문, REA가 어떻게 도움이 되었는지, 무엇을 알아냈는지를 담아 공유하세요. @@ -248,7 +248,7 @@ npx rea-agents@latest setup ## 문서 -웹사이트의 [실습 가이드](https://rea.tools/guides/)부터 읽어 보세요. 정확한 옵션, 사전 요구 사항, 결과 계약은 다음 문서를 참고하세요. +웹사이트의 [실습 가이드](https://rea.tools/ko/guides/)부터 읽어 보세요. 정확한 옵션, 사전 요구 사항, 결과 계약은 다음 문서를 참고하세요. - [설치 및 설정](docs/installation.md): 에이전트 등록, 제공자 설정, 업데이트, 제거. - [준비 상태 확인 및 문제 해결](docs/installation.md#check-readiness-for-your-task): 특정 에이전트 또는 분석 엔진 진단. diff --git a/README_pl.md b/README_pl.md index 3ebfc6578..1968e4bf2 100644 --- a/README_pl.md +++ b/README_pl.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Strona internetowa](https://rea.tools/) · [Przewodniki](https://rea.tools/guides/) · [Przykłady zastosowań](https://rea.tools/showcase/)** +**[Strona internetowa](https://rea.tools/pl/) · [Przewodniki](https://rea.tools/pl/guides/) · [Przykłady zastosowań](https://rea.tools/pl/showcase/)** [Szybki start](#szybki-start) · [Jak działa REA](#jak-działa-rea) · [Co możesz analizować](#co-możesz-analizować) · [Przykłady zastosowań](#przykłady-zastosowań) · [FAQ](#faq) · [Dokumentacja](#dokumentacja) @@ -54,7 +54,7 @@ REA łączy Twojego agenta z narzędziami do analizy natywnych plików binarnych Konfigurator rejestruje REA w Twoim agencie i instaluje pasujące instrukcje pracy. Analiza kodu natywnego może korzystać z istniejącej instalacji Hoppera lub Ghidry; konfigurator może też zainstalować Hoppera po uzyskaniu zgody. Statyczna analiza JavaScript nie wymaga żadnego z tych silników. -> **[Odwiedź stronę REA](https://rea.tools/)**, aby znaleźć instrukcje konfiguracji, ilustrowane przewodniki i rzeczywiste studia przypadków. +> **[Odwiedź stronę REA](https://rea.tools/pl/)**, aby znaleźć instrukcje konfiguracji, ilustrowane przewodniki i rzeczywiste studia przypadków. ## Szybki start @@ -133,12 +133,12 @@ REA wymaga Node.js 22.x (>=22.19), 24.x (>=24.11) lub 26+ oraz npm. Dodatkowe na | Cel | Co zwraca REA | Wymagania i przewodnik | | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| Natywne pliki binarne | Pseudokod, kod asemblera, ciągi znaków, symbole, wywołania i odwołania | Hopper, Ghidra lub IDA; [analiza kodu natywnego](https://rea.tools/guides/native/) | +| Natywne pliki binarne | Pseudokod, kod asemblera, ciągi znaków, symbole, wywołania i odwołania | Hopper, Ghidra lub IDA; [analiza kodu natywnego](https://rea.tools/pl/guides/native/) | | Układ pliku ELF w trybie offline | Sekcje, segmenty, oryginalne symbole/relokacje i potencjalne mechanizmy zabezpieczeń wskazane przez analizę statyczną | pwntools dostarczone przez użytkownika w systemie Linux x64; [diagnostyka plików binarnych](docs/binary-diagnostics.md) | | Kod bajtowy EVM | Selektory wywołań, przesunięcia bajtowe, wywnioskowane argumenty i mutowalność | Lokalny plik z surowymi bajtami lub zapisem szesnastkowym w systemie Linux x64; [przewodnik EVM offline](docs/evm-bytecode.md) | | Zarejestrowane awarie systemu Linux | Surowe rekordy note, rejestry/sygnały każdego zarejestrowanego wątku i opcjonalni kandydaci na mapowania | pwntools dostarczone przez użytkownika w systemie Linux x64; opcjonalnie GDB/pwndbg; [zarejestrowane awarie](docs/recorded-crashes.md) | -| JavaScript / Electron | Moduły, importy, mapy źródeł, trasy, IPC i powiązania z natywnymi dodatkami | Node.js i npm; [analiza aplikacji](https://rea.tools/guides/javascript/) | -| Strony internetowe | Struktura strony, skrypty, obserwacje sieciowe i zamówione zrzuty ekranu | Przeglądarka z rodziny Chrome; [analiza w przeglądarce](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Moduły, importy, mapy źródeł, trasy, IPC i powiązania z natywnymi dodatkami | Node.js i npm; [analiza aplikacji](https://rea.tools/pl/guides/javascript/) | +| Strony internetowe | Struktura strony, skrypty, obserwacje sieciowe i zamówione zrzuty ekranu | Przeglądarka z rodziny Chrome; [analiza w przeglądarce](https://rea.tools/pl/guides/browser/) | | Zapisane przechwycenia ruchu sieciowego | Żądania, odpowiedzi, dostępne dane przesyłane i lokalizacje źródłowe | HAR; mitmdump w systemie Linux dla natywnych przechwyceń mitmproxy; [przewodnik przechwytywania](docs/web-network-captures.md) | | Zestawy .NET | Metadane, instrukcje CIL, zadeklarowane zależności natywne i porównania kompilacji | Analiza statyczna; [przewodnik kodu zarządzanego](docs/managed-code-analysis.md) | | Pakiety APK dla Androida | Deklaracje manifestu, klasy, zdekompilowane metody i odwołania | JADX bez interfejsu graficznego i pełny JDK w systemach Linux/macOS/Windows x64; [przewodnik Androida](docs/android-analysis.md) | @@ -157,25 +157,25 @@ Obsługiwane formaty natywne i platformy zależą od dostawcy analizy. Zobacz [k ## Przykłady zastosowań -[![Ilustracje studiów przypadku panoramowania dźwięku w DX-Ball, mostka schowka w Notion i pierścienia pocisków w TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Ilustracje studiów przypadku panoramowania dźwięku w DX-Ball, mostka schowka w Notion i pierścienia pocisków w TH04](docs/assets/rea-showcases.png)](https://rea.tools/pl/showcase/) ### DX-Ball: odtworzenie obliczania panoramy dźwięku Prześledź wywołanie dźwięku do funkcji pomocniczej przeliczającej pozycję na panoramę, sprawdź instrukcje i przekształć niepełny pseudokod w C. Odtworzona implementacja przechodzi 3 205 przypadków dla oryginalnego x86 i odtwarza wszystkie 63 bajty skompilowanej funkcji. -[Przeczytaj studium przypadku](https://rea.tools/showcase/dx-ball/) · [Repozytorium odtworzonej implementacji](https://github.com/N0zoM1z0/dx-ball) +[Przeczytaj studium przypadku](https://rea.tools/pl/showcase/dx-ball/) · [Repozytorium odtworzonej implementacji](https://github.com/N0zoM1z0/dx-ball) ### Notion: śledzenie mostu schowka w Electron Znajdź API schowka w procesie renderującym, prześledź je przez preload i IPC do procesu głównego, a następnie sprawdź format schowka wraz z danymi formatowania. -[Przeczytaj studium przypadku](https://rea.tools/showcase/notion/) +[Przeczytaj studium przypadku](https://rea.tools/pl/showcase/notion/) ### TH04: odtworzenie obliczania pierścienia pocisków w DOS-ie Sprawdź 16-bitowe instrukcje oryginalnej gry na PC-98, odtwórz obliczenia kątów stałych i skierowanych na cel oraz porównaj odtworzony C++ z wynikiem historycznego kompilatora. -[Przeczytaj studium przypadku](https://rea.tools/showcase/th04/) · [Repozytorium odtworzonej implementacji](https://github.com/N0zoM1z0/th04) +[Przeczytaj studium przypadku](https://rea.tools/pl/showcase/th04/) · [Repozytorium odtworzonej implementacji](https://github.com/N0zoM1z0/th04) Jeśli użyłeś REA do czegoś ciekawego, chętnie to zobaczymy. Opisz swój przypadek w [zgłoszeniu](https://github.com/morluto/rea/issues) lub [pull requeście](https://github.com/morluto/rea/pulls), podając cel analizy, pytanie, sposób, w jaki REA pomogło, i swoje ustalenia. @@ -246,7 +246,7 @@ Jeśli używasz agenta, wykonaj [odświeżenie konfiguracji](#zaktualizuj-rea) i ## Dokumentacja -Zacznij od [przewodników z przykładami](https://rea.tools/guides/) na stronie internetowej. Dokładne opcje, wymagania wstępne i kontrakty wyników opisano tutaj: +Zacznij od [przewodników z przykładami](https://rea.tools/pl/guides/) na stronie internetowej. Dokładne opcje, wymagania wstępne i kontrakty wyników opisano tutaj: - [Instalacja i konfiguracja](docs/installation.md): rejestracja agentów, konfiguracja dostawców analizy, aktualizacje i odinstalowanie. - [Gotowość i rozwiązywanie problemów](docs/installation.md#check-readiness-for-your-task): diagnostyka jednego agenta lub silnika analizy. diff --git a/README_pt-BR.md b/README_pt-BR.md index 138b46862..840c7a2e0 100644 --- a/README_pt-BR.md +++ b/README_pt-BR.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Site](https://rea.tools/) · [Guias](https://rea.tools/guides/) · [Casos de uso](https://rea.tools/showcase/)** +**[Site](https://rea.tools/pt-BR/) · [Guias](https://rea.tools/pt-BR/guides/) · [Casos de uso](https://rea.tools/pt-BR/showcase/)** [Início rápido](#início-rápido) · [Como o REA funciona](#como-o-rea-funciona) · [O que você pode analisar](#o-que-você-pode-analisar) · [Casos de uso](#casos-de-uso) · [Perguntas frequentes](#perguntas-frequentes) · [Documentação](#documentação) @@ -54,7 +54,7 @@ O REA conecta seu agente a ferramentas para inspecionar binários nativos, aplic A configuração registra o REA no seu agente e instala as instruções de fluxo de trabalho correspondentes. A análise nativa pode usar uma instalação existente do Hopper ou do Ghidra; a configuração também pode instalar o Hopper opcionalmente, mediante aprovação. A análise estática de JavaScript não precisa de nenhum dos dois motores. -> **[Visite o site do REA](https://rea.tools/)** para instruções de configuração, guias ilustrados e estudos de caso reais. +> **[Visite o site do REA](https://rea.tools/pt-BR/)** para instruções de configuração, guias ilustrados e estudos de caso reais. ## Início rápido @@ -133,12 +133,12 @@ O REA requer Node.js 22.x (>=22.19), 24.x (>=24.11) ou 26+, além do npm. As fer | Alvo | O que o REA retorna | Requisitos e guia | | --------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| Binários nativos | Pseudocódigo, assembly, strings, símbolos, chamadas e referências | Hopper, Ghidra ou IDA; [análise nativa](https://rea.tools/guides/native/) | +| Binários nativos | Pseudocódigo, assembly, strings, símbolos, chamadas e referências | Hopper, Ghidra ou IDA; [análise nativa](https://rea.tools/pt-BR/guides/native/) | | Estrutura ELF sem execução | Seções, segmentos, símbolos/relocações originais e possíveis mecanismos de mitigação identificados por análise estática | pwntools fornecido pelo chamador no Linux x64; [diagnóstico de binários](docs/binary-diagnostics.md) | | Bytecode EVM | Seletores de despacho, offsets de bytes, argumentos inferidos e mutabilidade | Entrada local com bytes brutos ou representação hexadecimal no Linux x64; [guia de EVM sem execução](docs/evm-bytecode.md) | | Falhas do Linux registradas | Registros note brutos, registradores/sinais de cada thread registrada e candidatos opcionais a mapeamentos | pwntools fornecido pelo chamador no Linux x64; GDB/pwndbg opcionais; [falhas registradas](docs/recorded-crashes.md) | -| JavaScript / Electron | Módulos, importações, source maps, rotas, IPC e relações com complementos nativos | Node.js e npm; [análise de aplicativos](https://rea.tools/guides/javascript/) | -| Sites | Estrutura da página, scripts, observações de rede e capturas de tela solicitadas | Um navegador da família Chrome; [análise do navegador](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Módulos, importações, source maps, rotas, IPC e relações com complementos nativos | Node.js e npm; [análise de aplicativos](https://rea.tools/pt-BR/guides/javascript/) | +| Sites | Estrutura da página, scripts, observações de rede e capturas de tela solicitadas | Um navegador da família Chrome; [análise do navegador](https://rea.tools/pt-BR/guides/browser/) | | Capturas de rede salvas | Requisições, respostas, payloads acessíveis e localizações de origem | HAR; mitmdump no Linux para capturas no formato nativo do mitmproxy; [guia de capturas](docs/web-network-captures.md) | | Assemblies .NET | Metadados, instruções CIL, dependências nativas declaradas e comparações de builds | Inspeção estática; [guia de código gerenciado](docs/managed-code-analysis.md) | | APKs Android | Declarações do manifesto, classes, métodos descompilados e referências | JADX sem interface gráfica e um JDK completo no Linux/macOS/Windows x64; [guia de Android](docs/android-analysis.md) | @@ -157,25 +157,25 @@ Os formatos nativos e os sistemas anfitriões compatíveis variam por provedor. ## Casos de uso -[![Ilustrações dos estudos de panoramização de áudio do DX-Ball, da ponte da área de transferência do Notion e do anel de projéteis do TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Ilustrações dos estudos de panoramização de áudio do DX-Ball, da ponte da área de transferência do Notion e do anel de projéteis do TH04](docs/assets/rea-showcases.png)](https://rea.tools/pt-BR/showcase/) ### DX-Ball: reconstruir um cálculo de panorâmica de áudio Siga uma chamada de áudio até a função auxiliar que converte posição em panorâmica, inspecione as instruções e transforme pseudocódigo incompleto em C. A reconstrução passa em 3.205 casos com o x86 original e reproduz todos os 63 bytes da função compilada. -[Leia o estudo de caso](https://rea.tools/showcase/dx-ball/) · [Repositório da reconstrução](https://github.com/N0zoM1z0/dx-ball) +[Leia o estudo de caso](https://rea.tools/pt-BR/showcase/dx-ball/) · [Repositório da reconstrução](https://github.com/N0zoM1z0/dx-ball) ### Notion: rastrear a ponte da área de transferência do Electron Encontre a API da área de transferência do renderizador, siga-a por preload e IPC até o processo principal e inspecione o formato da área de transferência com seus dados de formatação. -[Leia o estudo de caso](https://rea.tools/showcase/notion/) +[Leia o estudo de caso](https://rea.tools/pt-BR/showcase/notion/) ### TH04: recuperar o cálculo de um anel de projéteis no DOS Inspecione as instruções de 16 bits do jogo original para PC-98, recupere os cálculos de ângulos fixos e direcionados e compare o C++ reconstruído com a saída do compilador da época. -[Leia o estudo de caso](https://rea.tools/showcase/th04/) · [Repositório da reconstrução](https://github.com/N0zoM1z0/th04) +[Leia o estudo de caso](https://rea.tools/pt-BR/showcase/th04/) · [Repositório da reconstrução](https://github.com/N0zoM1z0/th04) Se você usou o REA em algo interessante, gostaríamos de conhecer. Compartilhe seu caso em uma [issue](https://github.com/morluto/rea/issues) ou um [pull request](https://github.com/morluto/rea/pulls), incluindo o alvo, sua pergunta, como o REA ajudou e o que descobriu. @@ -246,7 +246,7 @@ Se você usa um agente, conclua a [atualização da configuração](#atualize-o- ## Documentação -Comece pelos [guias práticos](https://rea.tools/guides/) do site. Para opções exatas, pré-requisitos e contratos dos resultados: +Comece pelos [guias práticos](https://rea.tools/pt-BR/guides/) do site. Para opções exatas, pré-requisitos e contratos dos resultados: - [Instalação e configuração](docs/installation.md): registro de agentes, configuração de provedores, atualizações e desinstalação. - [Prontidão e solução de problemas](docs/installation.md#check-readiness-for-your-task): diagnóstico de um agente ou motor de análise específico. diff --git a/README_ru.md b/README_ru.md index dd2ee7825..8b4b27084 100644 --- a/README_ru.md +++ b/README_ru.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Сайт](https://rea.tools/) · [Руководства](https://rea.tools/guides/) · [Примеры](https://rea.tools/showcase/)** +**[Сайт](https://rea.tools/ru/) · [Руководства](https://rea.tools/ru/guides/) · [Примеры](https://rea.tools/ru/showcase/)** [Быстрый старт](#быстрый-старт) · [Как работает REA](#как-работает-rea) · [Что можно анализировать](#что-можно-анализировать) · [Примеры](#примеры) · [Частые вопросы](#частые-вопросы) · [Документация](#документация) @@ -54,7 +54,7 @@ REA подключает вашего агента к инструментам Настройка регистрирует REA в вашем агенте и устанавливает соответствующие инструкции по работе. Для нативного анализа можно использовать уже установленный Hopper или Ghidra; настройка также может установить Hopper с вашего согласия. Для статического анализа JavaScript не нужен ни один из этих движков. -> **[Посетите сайт REA](https://rea.tools/)**: там есть инструкции по настройке, иллюстрированные руководства и реальные исследования. +> **[Посетите сайт REA](https://rea.tools/ru/)**: там есть инструкции по настройке, иллюстрированные руководства и реальные исследования. ## Быстрый старт @@ -133,12 +133,12 @@ REA требует Node.js 22.x (>=22.19), 24.x (>=24.11) или 26+, а так | Цель | Что возвращает REA | Требования и руководство | | --------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| Нативные бинарные файлы | Псевдокод, ассемблер, строки, символы, вызовы и ссылки | Hopper, Ghidra или IDA; [нативный анализ](https://rea.tools/guides/native/) | +| Нативные бинарные файлы | Псевдокод, ассемблер, строки, символы, вызовы и ссылки | Hopper, Ghidra или IDA; [нативный анализ](https://rea.tools/ru/guides/native/) | | Структура ELF без запуска | Секции, сегменты, исходные символы/релокации и возможные механизмы защиты по данным статического анализа | pwntools, предоставленный вызывающей стороной, в Linux x64; [диагностика бинарных файлов](docs/binary-diagnostics.md) | | Байт-код EVM | Селекторы диспетчеризации, смещения байтов, предполагаемые аргументы и изменяемость состояния | Локальные необработанные байты или шестнадцатеричное представление в Linux x64; [руководство по EVM без запуска](docs/evm-bytecode.md) | | Записанные сбои Linux | Необработанные записи note, регистры/сигналы каждого записанного потока и необязательные кандидаты сопоставления с памятью | pwntools, предоставленный вызывающей стороной, в Linux x64; необязательные GDB/pwndbg; [записанные сбои](docs/recorded-crashes.md) | -| JavaScript / Electron | Модули, импорты, карты исходного кода, маршруты, IPC и связи с нативными дополнениями | Node.js и npm; [анализ приложений](https://rea.tools/guides/javascript/) | -| Сайты | Структура страницы, скрипты, наблюдения за сетью и запрошенные снимки экрана | Браузер семейства Chrome; [анализ браузера](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Модули, импорты, карты исходного кода, маршруты, IPC и связи с нативными дополнениями | Node.js и npm; [анализ приложений](https://rea.tools/ru/guides/javascript/) | +| Сайты | Структура страницы, скрипты, наблюдения за сетью и запрошенные снимки экрана | Браузер семейства Chrome; [анализ браузера](https://rea.tools/ru/guides/browser/) | | Сохранённые сетевые захваты | Запросы, ответы, доступные полезные данные и позиции в источнике | HAR; mitmdump в Linux для захватов в собственном формате mitmproxy; [руководство по сетевым захватам](docs/web-network-captures.md) | | Сборки .NET | Метаданные, инструкции CIL, объявленные нативные зависимости и сравнения сборок | Статическое исследование; [руководство по управляемому коду](docs/managed-code-analysis.md) | | Android APK | Объявления манифеста, классы, декомпилированные методы и ссылки | JADX без графического интерфейса и полный JDK в Linux/macOS/Windows x64; [руководство по Android](docs/android-analysis.md) | @@ -157,25 +157,25 @@ REA требует Node.js 22.x (>=22.19), 24.x (>=24.11) или 26+, а так ## Примеры -[![Иллюстрации примеров панорамирования звука в DX-Ball, моста буфера обмена Notion и кольца пуль в TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Иллюстрации примеров панорамирования звука в DX-Ball, моста буфера обмена Notion и кольца пуль в TH04](docs/assets/rea-showcases.png)](https://rea.tools/ru/showcase/) ### DX-Ball: восстановление расчёта звуковой панорамы Проследите звуковой вызов до функции, преобразующей координату в значение панорамы, изучите инструкции и превратите неполный псевдокод в C. Восстановленная реализация проходит 3 205 тестов с исходным x86-кодом и воспроизводит все 63 байта скомпилированной функции. -[Прочитать исследование](https://rea.tools/showcase/dx-ball/) · [Репозиторий реконструкции](https://github.com/N0zoM1z0/dx-ball) +[Прочитать исследование](https://rea.tools/ru/showcase/dx-ball/) · [Репозиторий реконструкции](https://github.com/N0zoM1z0/dx-ball) ### Notion: исследование моста буфера обмена Electron Найдите API буфера обмена в процессе рендеринга, проследите его через preload и IPC до основного процесса и изучите формат буфера обмена с форматированием. -[Прочитать исследование](https://rea.tools/showcase/notion/) +[Прочитать исследование](https://rea.tools/ru/showcase/notion/) ### TH04: восстановление расчёта кольца пуль в DOS Изучите 16-битные инструкции оригинальной игры для PC-98, восстановите расчёты фиксированных и прицельных углов и сравните восстановленный C++ с выводом компилятора того времени. -[Прочитать исследование](https://rea.tools/showcase/th04/) · [Репозиторий реконструкции](https://github.com/N0zoM1z0/th04) +[Прочитать исследование](https://rea.tools/ru/showcase/th04/) · [Репозиторий реконструкции](https://github.com/N0zoM1z0/th04) Если вы исследовали с REA что-то интересное, поделитесь результатом. Создайте [issue](https://github.com/morluto/rea/issues) или [pull request](https://github.com/morluto/rea/pulls) и укажите цель, ваш вопрос, как помог REA и что удалось узнать. @@ -246,7 +246,7 @@ npx rea-agents@latest setup ## Документация -Начните с [практических руководств](https://rea.tools/guides/) на сайте. Точные параметры, требования и контракты результатов описаны здесь: +Начните с [практических руководств](https://rea.tools/ru/guides/) на сайте. Точные параметры, требования и контракты результатов описаны здесь: - [Установка и настройка](docs/installation.md): регистрация агентов, настройка провайдеров, обновление и удаление. - [Готовность и устранение неполадок](docs/installation.md#check-readiness-for-your-task): диагностика конкретного агента или движка анализа. diff --git a/README_th.md b/README_th.md index 34ab2363d..b16471427 100644 --- a/README_th.md +++ b/README_th.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[เว็บไซต์](https://rea.tools/) · [คู่มือ](https://rea.tools/guides/) · [ตัวอย่างการใช้งาน](https://rea.tools/showcase/)** +**[เว็บไซต์](https://rea.tools/th/) · [คู่มือ](https://rea.tools/th/guides/) · [ตัวอย่างการใช้งาน](https://rea.tools/th/showcase/)** [เริ่มต้นอย่างรวดเร็ว](#เริ่มต้นอย่างรวดเร็ว) · [REA ทำงานอย่างไร](#rea-ทำงานอย่างไร) · [สิ่งที่วิเคราะห์ได้](#สิ่งที่วิเคราะห์ได้) · [ตัวอย่างการใช้งาน](#ตัวอย่างการใช้งาน) · [คำถามที่พบบ่อย](#คำถามที่พบบ่อย) · [เอกสาร](#เอกสาร) @@ -54,7 +54,7 @@ REA เชื่อมเอเจนต์ของคุณกับเคร ขั้นตอนตั้งค่าจะลงทะเบียน REA กับเอเจนต์และติดตั้งคำแนะนำการทำงานที่ตรงกัน การวิเคราะห์เนทีฟใช้ Hopper หรือ Ghidra ที่ติดตั้งอยู่แล้วได้ และขั้นตอนตั้งค่าสามารถติดตั้ง Hopper เพิ่มเติมเมื่อได้รับอนุมัติ การวิเคราะห์ JavaScript แบบสถิตไม่ต้องใช้เอนจินทั้งสองนี้ -> **[เยี่ยมชมเว็บไซต์ REA](https://rea.tools/)** เพื่อดูคำแนะนำการตั้งค่า คู่มือพร้อมภาพประกอบ และกรณีศึกษาจริง +> **[เยี่ยมชมเว็บไซต์ REA](https://rea.tools/th/)** เพื่อดูคำแนะนำการตั้งค่า คู่มือพร้อมภาพประกอบ และกรณีศึกษาจริง ## เริ่มต้นอย่างรวดเร็ว @@ -133,12 +133,12 @@ REA ต้องใช้ Node.js 22.x (>=22.19), 24.x (>=24.11) หรือ 26 | เป้าหมาย | สิ่งที่ REA ส่งกลับ | ข้อกำหนดและคู่มือ | | ---------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| ไบนารีเนทีฟ | โค้ดเทียม แอสเซมบลี สตริง สัญลักษณ์ การเรียก และการอ้างอิง | Hopper, Ghidra หรือ IDA; [การวิเคราะห์เนทีฟ](https://rea.tools/guides/native/) | +| ไบนารีเนทีฟ | โค้ดเทียม แอสเซมบลี สตริง สัญลักษณ์ การเรียก และการอ้างอิง | Hopper, Ghidra หรือ IDA; [การวิเคราะห์เนทีฟ](https://rea.tools/th/guides/native/) | | โครงสร้าง ELF แบบออฟไลน์ | เซกชัน เซกเมนต์ สัญลักษณ์/รีโลเคชันต้นฉบับ และตัวเลือกกลไกป้องกันที่พบจากการวิเคราะห์แบบสถิต | pwntools ที่ผู้ใช้จัดเตรียมบน Linux x64; [การวินิจฉัยไบนารี](docs/binary-diagnostics.md) | | ไบต์โค้ด EVM | ตัวเลือกฟังก์ชันสำหรับการเรียก ออฟเซ็ตไบต์ อาร์กิวเมนต์และความสามารถในการเปลี่ยนสถานะที่อนุมานได้ | ไฟล์บนเครื่องที่มีไบต์ดิบหรือข้อมูลเลขฐานสิบหกบน Linux x64; [คู่มือ EVM แบบออฟไลน์](docs/evm-bytecode.md) | | ข้อมูลการแครชของ Linux ที่บันทึกไว้ | ระเบียน note ดิบ รีจิสเตอร์/สัญญาณของทุกเธรดที่บันทึกไว้ และตัวเลือกการแมปเพิ่มเติม | pwntools ที่ผู้ใช้จัดเตรียมบน Linux x64; เลือกใช้ GDB/pwndbg เพิ่มเติมได้; [การแครชที่บันทึกไว้](docs/recorded-crashes.md) | -| JavaScript / Electron | โมดูล การนำเข้า ซอร์สแมป เส้นทาง IPC และความสัมพันธ์กับส่วนเสริมเนทีฟ | Node.js และ npm; [การวิเคราะห์แอปพลิเคชัน](https://rea.tools/guides/javascript/) | -| เว็บไซต์ | โครงสร้างหน้า สคริปต์ ข้อมูลเครือข่ายที่สังเกตได้ และภาพหน้าจอที่ร้องขอ | เบราว์เซอร์ในตระกูล Chrome; [การวิเคราะห์ผ่านเบราว์เซอร์](https://rea.tools/guides/browser/) | +| JavaScript / Electron | โมดูล การนำเข้า ซอร์สแมป เส้นทาง IPC และความสัมพันธ์กับส่วนเสริมเนทีฟ | Node.js และ npm; [การวิเคราะห์แอปพลิเคชัน](https://rea.tools/th/guides/javascript/) | +| เว็บไซต์ | โครงสร้างหน้า สคริปต์ ข้อมูลเครือข่ายที่สังเกตได้ และภาพหน้าจอที่ร้องขอ | เบราว์เซอร์ในตระกูล Chrome; [การวิเคราะห์ผ่านเบราว์เซอร์](https://rea.tools/th/guides/browser/) | | ข้อมูลเครือข่ายที่บันทึกไว้ | คำขอ คำตอบ เพย์โหลดที่ปรากฏ และตำแหน่งต้นทาง | HAR; mitmdump บน Linux สำหรับข้อมูลที่บันทึกในรูปแบบเนทีฟของ mitmproxy; [คู่มือการบันทึกข้อมูล](docs/web-network-captures.md) | | แอสเซมบลี .NET | เมทาดาทา คำสั่ง CIL การพึ่งพาเนทีฟที่ประกาศไว้ และการเปรียบเทียบผลการบิลด์ | การตรวจสอบแบบสถิต; [คู่มือโค้ดแบบจัดการ](docs/managed-code-analysis.md) | | APK ของ Android | การประกาศใน manifest คลาส เมธอดที่ดีคอมไพล์ และการอ้างอิง | JADX แบบไม่มี GUI และ JDK แบบเต็มบน Linux/macOS/Windows x64; [คู่มือ Android](docs/android-analysis.md) | @@ -157,25 +157,25 @@ REA ต้องใช้ Node.js 22.x (>=22.19), 24.x (>=24.11) หรือ 26 ## ตัวอย่างการใช้งาน -[![ภาพประกอบกรณีศึกษาการแพนเสียงใน DX-Ball บริดจ์คลิปบอร์ดของ Notion และวงแหวนกระสุนใน TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![ภาพประกอบกรณีศึกษาการแพนเสียงใน DX-Ball บริดจ์คลิปบอร์ดของ Notion และวงแหวนกระสุนใน TH04](docs/assets/rea-showcases.png)](https://rea.tools/th/showcase/) ### DX-Ball: สร้างการคำนวณแพนเสียงขึ้นใหม่ ติดตามการเรียกเสียงไปยังฟังก์ชันช่วยแปลงตำแหน่งเป็นค่าแพน ตรวจสอบคำสั่ง และแปลงโค้ดเทียมที่ยังไม่สมบูรณ์เป็น C การสร้างขึ้นใหม่นี้ผ่านการทดสอบ 3,205 กรณีเทียบกับ x86 ต้นฉบับ และสร้างไบต์ทั้ง 63 ไบต์ของฟังก์ชันที่คอมไพล์แล้วได้ตรงกัน -[อ่านกรณีศึกษา](https://rea.tools/showcase/dx-ball/) · [รีโพซิทอรีการสร้างขึ้นใหม่](https://github.com/N0zoM1z0/dx-ball) +[อ่านกรณีศึกษา](https://rea.tools/th/showcase/dx-ball/) · [รีโพซิทอรีการสร้างขึ้นใหม่](https://github.com/N0zoM1z0/dx-ball) ### Notion: ติดตามบริดจ์คลิปบอร์ดของ Electron ค้นหา API คลิปบอร์ดของ renderer ติดตามผ่าน preload และ IPC ไปยังโปรเซสหลัก แล้วตรวจสอบรูปแบบคลิปบอร์ดที่มีข้อมูลการจัดรูปแบบ -[อ่านกรณีศึกษา](https://rea.tools/showcase/notion/) +[อ่านกรณีศึกษา](https://rea.tools/th/showcase/notion/) ### TH04: กู้คืนการคำนวณวงแหวนกระสุนของ DOS ตรวจสอบคำสั่ง 16 บิตของเกมต้นฉบับบน PC-98 กู้คืนการคำนวณมุมคงที่และมุมเล็งเป้าหมาย แล้วเปรียบเทียบ C++ ที่สร้างขึ้นใหม่กับผลลัพธ์จากคอมไพเลอร์ในยุคนั้น -[อ่านกรณีศึกษา](https://rea.tools/showcase/th04/) · [รีโพซิทอรีการสร้างขึ้นใหม่](https://github.com/N0zoM1z0/th04) +[อ่านกรณีศึกษา](https://rea.tools/th/showcase/th04/) · [รีโพซิทอรีการสร้างขึ้นใหม่](https://github.com/N0zoM1z0/th04) หากคุณใช้ REA กับสิ่งที่น่าสนใจ เราอยากเห็นผลงานของคุณ แบ่งปันกรณีของคุณผ่าน [issue](https://github.com/morluto/rea/issues) หรือ [pull request](https://github.com/morluto/rea/pulls) พร้อมระบุเป้าหมาย คำถามของคุณ REA ช่วยอย่างไร และสิ่งที่คุณค้นพบ @@ -246,7 +246,7 @@ npx rea-agents@latest setup ## เอกสาร -เริ่มจาก[คู่มือพร้อมตัวอย่าง](https://rea.tools/guides/) บนเว็บไซต์ สำหรับตัวเลือก ข้อกำหนดเบื้องต้น และสัญญาผลลัพธ์ที่แน่นอน: +เริ่มจาก[คู่มือพร้อมตัวอย่าง](https://rea.tools/th/guides/) บนเว็บไซต์ สำหรับตัวเลือก ข้อกำหนดเบื้องต้น และสัญญาผลลัพธ์ที่แน่นอน: - [การติดตั้งและตั้งค่า](docs/installation.md): การลงทะเบียนเอเจนต์ การตั้งค่าผู้ให้บริการ การอัปเดต และการถอนการติดตั้ง - [ความพร้อมใช้งานและการแก้ไขปัญหา](docs/installation.md#check-readiness-for-your-task): ตรวจวินิจฉัยเอเจนต์หรือเอนจินวิเคราะห์หนึ่งตัว diff --git a/README_tr.md b/README_tr.md index faab93651..ce970e237 100644 --- a/README_tr.md +++ b/README_tr.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Web sitesi](https://rea.tools/) · [Rehberler](https://rea.tools/guides/) · [Örnek çalışmalar](https://rea.tools/showcase/)** +**[Web sitesi](https://rea.tools/tr/) · [Rehberler](https://rea.tools/tr/guides/) · [Örnek çalışmalar](https://rea.tools/tr/showcase/)** [Hızlı başlangıç](#hızlı-başlangıç) · [REA nasıl çalışır](#rea-nasıl-çalışır) · [Neleri analiz edebilirsiniz](#neleri-analiz-edebilirsiniz) · [Örnek çalışmalar](#örnek-çalışmalar) · [Sık sorulan sorular](#sık-sorulan-sorular) · [Belgeler](#belgeler) @@ -54,7 +54,7 @@ REA, ajanınızı yerel makine kodu içeren ikili dosyaları, JavaScript ve Elec Kurulum, REA'yı ajanınıza kaydeder ve uyumlu iş akışı talimatlarını yükler. Yerel makine kodu analizi mevcut bir Hopper veya Ghidra kurulumunu kullanabilir; kurulum işlemi, onayınızla isteğe bağlı olarak Hopper da yükleyebilir. Statik JavaScript analizi bu iki motora da ihtiyaç duymaz. -> Kurulum talimatları, görselli rehberler ve gerçek örnek çalışmalar için **[REA web sitesini ziyaret edin](https://rea.tools/)**. +> Kurulum talimatları, görselli rehberler ve gerçek örnek çalışmalar için **[REA web sitesini ziyaret edin](https://rea.tools/tr/)**. ## Hızlı başlangıç @@ -133,12 +133,12 @@ REA; Node.js 22.x (>=22.19), 24.x (>=24.11) veya 26+ ve npm gerektirir. Ek araç | Hedef | REA'nın döndürdükleri | Gereksinimler ve rehber | | --------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| Yerel makine kodu içeren ikili dosyalar | Sözde kod, assembly kodu, dizeler, semboller, çağrılar ve referanslar | Hopper, Ghidra veya IDA; [yerel kod analizi](https://rea.tools/guides/native/) | +| Yerel makine kodu içeren ikili dosyalar | Sözde kod, assembly kodu, dizeler, semboller, çağrılar ve referanslar | Hopper, Ghidra veya IDA; [yerel kod analizi](https://rea.tools/tr/guides/native/) | | Çevrimdışı ELF yapısı | Bölümler, segmentler, özgün semboller/yeniden konumlandırmalar ve statik analizden olası güvenlik önlemleri | Linux x64 üzerinde çağıranın sağladığı pwntools; [ikili dosya tanılama](docs/binary-diagnostics.md) | | EVM bayt kodu | Yönlendirme seçicileri, bayt ofsetleri, çıkarımla belirlenen argümanlar ve durum değiştirilebilirliği | Linux x64 üzerinde yerel ham bayt/onaltılık girdi; [çevrimdışı EVM rehberi](docs/evm-bytecode.md) | | Kaydedilmiş Linux çökmeleri | Ham note kayıtları, kaydedilen her iş parçacığının yazmaçları/sinyalleri ve isteğe bağlı eşleme adayları | Linux x64 üzerinde çağıranın sağladığı pwntools; isteğe bağlı GDB/pwndbg; [kaydedilmiş çökmeler](docs/recorded-crashes.md) | -| JavaScript / Electron | Modüller, içe aktarmalar, kaynak haritaları, rotalar, IPC ve yerel eklenti ilişkileri | Node.js ve npm; [uygulama analizi](https://rea.tools/guides/javascript/) | -| Web siteleri | Sayfa yapısı, betikler, ağ gözlemleri ve istenen ekran görüntüleri | Chrome ailesinden bir tarayıcı; [tarayıcı analizi](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Modüller, içe aktarmalar, kaynak haritaları, rotalar, IPC ve yerel eklenti ilişkileri | Node.js ve npm; [uygulama analizi](https://rea.tools/tr/guides/javascript/) | +| Web siteleri | Sayfa yapısı, betikler, ağ gözlemleri ve istenen ekran görüntüleri | Chrome ailesinden bir tarayıcı; [tarayıcı analizi](https://rea.tools/tr/guides/browser/) | | Kaydedilmiş ağ yakalamaları | İstekler, yanıtlar, erişilebilir yük içerikleri ve kaynak konumları | HAR; mitmproxy'nin kendi biçimindeki yakalamalar için Linux üzerinde mitmdump; [ağ yakalama rehberi](docs/web-network-captures.md) | | .NET derlemeleri | Meta veriler, CIL talimatları, bildirilmiş yerel bağımlılıklar ve derleme karşılaştırmaları | Statik inceleme; [yönetilen kod rehberi](docs/managed-code-analysis.md) | | Android APK'leri | Manifest bildirimleri, sınıflar, tersine derlenmiş metotlar ve referanslar | Linux/macOS/Windows x64 üzerinde arayüzsüz JADX ve tam bir JDK; [Android rehberi](docs/android-analysis.md) | @@ -157,25 +157,25 @@ Yerel makine kodu içeren ikili dosya biçimleri ve ana bilgisayar desteği sağ ## Örnek çalışmalar -[![DX-Ball ses kaydırma, Notion pano köprüsü ve TH04 mermi halkası örneklerinin çizimleri](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![DX-Ball ses kaydırma, Notion pano köprüsü ve TH04 mermi halkası örneklerinin çizimleri](docs/assets/rea-showcases.png)](https://rea.tools/tr/showcase/) ### DX-Ball: Sesin stereo konumlandırma hesabını yeniden oluşturma Bir ses çağrısından konumu stereo konumlandırmaya dönüştüren yardımcı fonksiyona ilerleyin, talimatları inceleyin ve eksik sözde kodu C'ye dönüştürün. Yeniden oluşturulan kod, özgün x86 üzerinde 3.205 test durumunu geçer ve derlenmiş fonksiyonun 63 baytının tamamını yeniden üretir. -[Örnek çalışmayı okuyun](https://rea.tools/showcase/dx-ball/) · [Yeniden oluşturma deposu](https://github.com/N0zoM1z0/dx-ball) +[Örnek çalışmayı okuyun](https://rea.tools/tr/showcase/dx-ball/) · [Yeniden oluşturma deposu](https://github.com/N0zoM1z0/dx-ball) ### Notion: Electron pano köprüsünü izleme İşleyici sürecin pano API'sini bulun, preload ve IPC üzerinden ana sürece kadar izleyin ve zengin pano biçimini inceleyin. -[Örnek çalışmayı okuyun](https://rea.tools/showcase/notion/) +[Örnek çalışmayı okuyun](https://rea.tools/tr/showcase/notion/) ### TH04: DOS mermi halkası hesabını geri çıkarma Özgün PC-98 oyununun 16 bit talimatlarını inceleyin, sabit ve hedefe yönelik açı hesaplarını geri çıkarın ve yeniden oluşturulan C++ kodunu dönemin derleyici çıktısıyla karşılaştırın. -[Örnek çalışmayı okuyun](https://rea.tools/showcase/th04/) · [Yeniden oluşturma deposu](https://github.com/N0zoM1z0/th04) +[Örnek çalışmayı okuyun](https://rea.tools/tr/showcase/th04/) · [Yeniden oluşturma deposu](https://github.com/N0zoM1z0/th04) REA'yı ilginç bir konuda kullandıysanız görmek isteriz. Hedefi, sorunuzu, REA'nın nasıl yardımcı olduğunu ve bulgularınızı bir [issue](https://github.com/morluto/rea/issues) veya [pull request](https://github.com/morluto/rea/pulls) ile paylaşın. @@ -246,7 +246,7 @@ Ajan kullanıyorsanız [kurulum yenilemesini](#reayı-güncelleyin) tamamlayın ## Belgeler -Web sitesindeki [uygulamalı rehberlerden](https://rea.tools/guides/) başlayın. Kesin seçenekler, ön koşullar ve sonuç sözleşmeleri için: +Web sitesindeki [uygulamalı rehberlerden](https://rea.tools/tr/guides/) başlayın. Kesin seçenekler, ön koşullar ve sonuç sözleşmeleri için: - [Yükleme ve kurulum](docs/installation.md): ajan kaydı, sağlayıcı yapılandırması, güncellemeler ve kaldırma. - [Hazırlık ve sorun giderme](docs/installation.md#check-readiness-for-your-task): belirli bir ajanı veya analiz motorunu tanılama. diff --git a/README_uk.md b/README_uk.md index 7be45b5c5..a97b203c1 100644 --- a/README_uk.md +++ b/README_uk.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Сайт](https://rea.tools/) · [Посібники](https://rea.tools/guides/) · [Приклади](https://rea.tools/showcase/)** +**[Сайт](https://rea.tools/uk/) · [Посібники](https://rea.tools/uk/guides/) · [Приклади](https://rea.tools/uk/showcase/)** [Швидкий старт](#швидкий-старт) · [Як працює REA](#як-працює-rea) · [Що можна аналізувати](#що-можна-аналізувати) · [Приклади](#приклади) · [Поширені запитання](#поширені-запитання) · [Документація](#документація) @@ -54,7 +54,7 @@ REA підключає вашого агента до інструментів Налаштування реєструє REA у вашому агенті та встановлює відповідні інструкції робочих процесів. Для нативного аналізу можна використати вже встановлений Hopper або Ghidra; налаштування також може встановити Hopper за вашою згодою. Статичному аналізу JavaScript не потрібен жоден із цих рушіїв. -> **[Відвідайте сайт REA](https://rea.tools/)**, щоб знайти інструкції налаштування, ілюстровані посібники та реальні дослідження. +> **[Відвідайте сайт REA](https://rea.tools/uk/)**, щоб знайти інструкції налаштування, ілюстровані посібники та реальні дослідження. ## Швидкий старт @@ -133,12 +133,12 @@ REA потребує Node.js 22.x (>=22.19), 24.x (>=24.11) або 26+, а та | Ціль | Що повертає REA | Вимоги й посібник | | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| Нативні бінарні файли | Псевдокод, асемблерний код, рядки, символи, виклики й посилання | Hopper, Ghidra або IDA; [нативний аналіз](https://rea.tools/guides/native/) | +| Нативні бінарні файли | Псевдокод, асемблерний код, рядки, символи, виклики й посилання | Hopper, Ghidra або IDA; [нативний аналіз](https://rea.tools/uk/guides/native/) | | Структура ELF без запуску | Секції, сегменти, початкові символи/релокації та можливі захисні механізми за даними статичного аналізу | pwntools, наданий стороною, що викликає інструмент, у Linux x64; [діагностика бінарних файлів](docs/binary-diagnostics.md) | | Байт-код EVM | Селектори диспетчеризації, зміщення байтів, виведені припущення про аргументи та змінюваність стану | Локальні необроблені байти або шістнадцяткове представлення у Linux x64; [посібник EVM без запуску](docs/evm-bytecode.md) | | Записані аварійні завершення в Linux | Необроблені записи note, регістри/сигнали кожного записаного потоку й необов'язкові кандидати зіставлення пам'яті | pwntools, наданий стороною, що викликає інструмент, у Linux x64; необов'язкові GDB/pwndbg; [записані аварійні завершення](docs/recorded-crashes.md) | -| JavaScript / Electron | Модулі, імпорти, карти вихідного коду, маршрути, IPC і зв'язки з нативними доповненнями | Node.js і npm; [аналіз застосунків](https://rea.tools/guides/javascript/) | -| Сайти | Структура сторінки, скрипти, мережеві спостереження й запитані знімки екрана | Браузер сімейства Chrome; [аналіз браузера](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Модулі, імпорти, карти вихідного коду, маршрути, IPC і зв'язки з нативними доповненнями | Node.js і npm; [аналіз застосунків](https://rea.tools/uk/guides/javascript/) | +| Сайти | Структура сторінки, скрипти, мережеві спостереження й запитані знімки екрана | Браузер сімейства Chrome; [аналіз браузера](https://rea.tools/uk/guides/browser/) | | Збережені мережеві захоплення | Запити, відповіді, доступні корисні дані та місця в джерелі | HAR; mitmdump у Linux для захоплень у власному форматі mitmproxy; [посібник мережевих захоплень](docs/web-network-captures.md) | | Збірки .NET | Метадані, інструкції CIL, оголошені нативні залежності й порівняння збірок | Статична перевірка; [посібник керованого коду](docs/managed-code-analysis.md) | | Android APK | Оголошення маніфесту, класи, декомпільовані методи й посилання | JADX без графічного інтерфейсу й повний JDK у Linux/macOS/Windows x64; [посібник Android](docs/android-analysis.md) | @@ -157,25 +157,25 @@ REA потребує Node.js 22.x (>=22.19), 24.x (>=24.11) або 26+, а та ## Приклади -[![Ілюстрації прикладів панорамування звуку в DX-Ball, мосту буфера обміну Notion та кільця куль у TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Ілюстрації прикладів панорамування звуку в DX-Ball, мосту буфера обміну Notion та кільця куль у TH04](docs/assets/rea-showcases.png)](https://rea.tools/uk/showcase/) ### DX-Ball: відновлення розрахунку звукової панорами Простежте звуковий виклик до допоміжної функції, що перетворює координату на панорамування, перевірте інструкції та перетворіть неповний псевдокод на C. Відновлена реалізація проходить 3 205 тестів з оригінальним x86-кодом і відтворює всі 63 байти скомпільованої функції. -[Прочитати дослідження](https://rea.tools/showcase/dx-ball/) · [Репозиторій реконструкції](https://github.com/N0zoM1z0/dx-ball) +[Прочитати дослідження](https://rea.tools/uk/showcase/dx-ball/) · [Репозиторій реконструкції](https://github.com/N0zoM1z0/dx-ball) ### Notion: відстеження мосту буфера обміну Electron Знайдіть API буфера обміну в процесі рендерингу, простежте його через preload та IPC до головного процесу й перевірте формат буфера обміну з даними форматування. -[Прочитати дослідження](https://rea.tools/showcase/notion/) +[Прочитати дослідження](https://rea.tools/uk/showcase/notion/) ### TH04: відновлення розрахунку кільця куль у DOS Перевірте 16-бітні інструкції оригінальної гри для PC-98, відновіть розрахунки фіксованих і прицільних кутів та порівняйте відновлений C++ із виводом тогочасного компілятора. -[Прочитати дослідження](https://rea.tools/showcase/th04/) · [Репозиторій реконструкції](https://github.com/N0zoM1z0/th04) +[Прочитати дослідження](https://rea.tools/uk/showcase/th04/) · [Репозиторій реконструкції](https://github.com/N0zoM1z0/th04) Якщо ви дослідили з REA щось цікаве, поділіться результатом. Створіть [issue](https://github.com/morluto/rea/issues) або [pull request](https://github.com/morluto/rea/pulls) і вкажіть ціль, ваше запитання, як допоміг REA та що ви з'ясували. @@ -246,7 +246,7 @@ npx rea-agents@latest setup ## Документація -Почніть із [практичних посібників](https://rea.tools/guides/) на сайті. Точні параметри, передумови й контракти результатів описано тут: +Почніть із [практичних посібників](https://rea.tools/uk/guides/) на сайті. Точні параметри, передумови й контракти результатів описано тут: - [Встановлення й налаштування](docs/installation.md): реєстрація агентів, конфігурація провайдерів, оновлення та видалення. - [Готовність та усунення неполадок](docs/installation.md#check-readiness-for-your-task): діагностика конкретного агента або рушія аналізу. diff --git a/README_vi.md b/README_vi.md index 8da516e19..1baf0fba9 100644 --- a/README_vi.md +++ b/README_vi.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[Trang web](https://rea.tools/) · [Hướng dẫn](https://rea.tools/guides/) · [Các nghiên cứu điển hình](https://rea.tools/showcase/)** +**[Trang web](https://rea.tools/vi/) · [Hướng dẫn](https://rea.tools/vi/guides/) · [Các nghiên cứu điển hình](https://rea.tools/vi/showcase/)** [Bắt đầu nhanh](#bắt-đầu-nhanh) · [Cách REA hoạt động](#cách-rea-hoạt-động) · [Những gì bạn có thể phân tích](#những-gì-bạn-có-thể-phân-tích) · [Các nghiên cứu điển hình](#các-nghiên-cứu-điển-hình) · [Câu hỏi thường gặp](#câu-hỏi-thường-gặp) · [Tài liệu](#tài-liệu) @@ -54,7 +54,7 @@ REA kết nối tác nhân của bạn với các công cụ kiểm tra tệp nh Quá trình thiết lập đăng ký REA với tác nhân và cài đặt các hướng dẫn quy trình tương ứng. Phân tích mã máy có thể sử dụng Hopper hoặc Ghidra đã cài sẵn; quá trình thiết lập cũng có thể cài Hopper nếu bạn chấp thuận. Phân tích tĩnh JavaScript không cần công cụ nào trong hai công cụ này. -> **[Truy cập trang web REA](https://rea.tools/)** để xem cách thiết lập, hướng dẫn có hình minh họa và các nghiên cứu điển hình thực tế. +> **[Truy cập trang web REA](https://rea.tools/vi/)** để xem cách thiết lập, hướng dẫn có hình minh họa và các nghiên cứu điển hình thực tế. ## Bắt đầu nhanh @@ -133,12 +133,12 @@ REA yêu cầu Node.js 22.x (>=22.19), 24.x (>=24.11) hoặc 26+, cùng với np | Mục tiêu | REA trả về gì | Yêu cầu và hướng dẫn | | ----------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| Tệp nhị phân mã máy | Mã giả, hợp ngữ, chuỗi, ký hiệu, lời gọi và tham chiếu | Hopper, Ghidra hoặc IDA; [phân tích mã máy](https://rea.tools/guides/native/) | +| Tệp nhị phân mã máy | Mã giả, hợp ngữ, chuỗi, ký hiệu, lời gọi và tham chiếu | Hopper, Ghidra hoặc IDA; [phân tích mã máy](https://rea.tools/vi/guides/native/) | | Bố cục ELF ngoại tuyến | Các section, segment, ký hiệu/thông tin tái định vị gốc và các biện pháp giảm thiểu có thể có từ phân tích tĩnh | pwntools do bên gọi cung cấp trên Linux x64; [chẩn đoán tệp nhị phân](docs/binary-diagnostics.md) | | Bytecode EVM | Bộ chọn điều phối, độ lệch byte, tham số suy luận và khả năng thay đổi trạng thái | Đầu vào cục bộ chứa byte thô hoặc dạng thập lục phân trên Linux x64; [hướng dẫn EVM ngoại tuyến](docs/evm-bytecode.md) | | Sự cố Linux đã ghi lại | Bản ghi note thô, thanh ghi/tín hiệu của mọi luồng được ghi lại và các ứng viên ánh xạ tùy chọn | pwntools do bên gọi cung cấp trên Linux x64; GDB/pwndbg tùy chọn; [sự cố đã ghi lại](docs/recorded-crashes.md) | -| JavaScript / Electron | Mô-đun, các khai báo import, source map, tuyến, IPC và quan hệ với tiện ích mở rộng mã máy | Node.js và npm; [phân tích ứng dụng](https://rea.tools/guides/javascript/) | -| Trang web | Cấu trúc trang, script, quan sát mạng và ảnh chụp màn hình được yêu cầu | Trình duyệt thuộc họ Chrome; [phân tích trình duyệt](https://rea.tools/guides/browser/) | +| JavaScript / Electron | Mô-đun, các khai báo import, source map, tuyến, IPC và quan hệ với tiện ích mở rộng mã máy | Node.js và npm; [phân tích ứng dụng](https://rea.tools/vi/guides/javascript/) | +| Trang web | Cấu trúc trang, script, quan sát mạng và ảnh chụp màn hình được yêu cầu | Trình duyệt thuộc họ Chrome; [phân tích trình duyệt](https://rea.tools/vi/guides/browser/) | | Bản ghi lưu lượng mạng đã lưu | Yêu cầu, phản hồi, payload có thể truy cập và vị trí nguồn | HAR; mitmdump trên Linux cho bản ghi định dạng gốc của mitmproxy; [hướng dẫn bản ghi mạng](docs/web-network-captures.md) | | Assembly .NET | Siêu dữ liệu, lệnh CIL, các phụ thuộc mã máy được khai báo và so sánh bản dựng | Kiểm tra tĩnh; [hướng dẫn mã được quản lý](docs/managed-code-analysis.md) | | APK Android | Khai báo manifest, lớp, phương thức được dịch ngược và tham chiếu | JADX không giao diện đồ họa và JDK đầy đủ trên Linux/macOS/Windows x64; [hướng dẫn Android](docs/android-analysis.md) | @@ -157,25 +157,25 @@ Kiểm tra tĩnh JavaScript và .NET đọc các tệp được cung cấp mà k ## Các nghiên cứu điển hình -[![Minh họa các ví dụ về cân bằng âm thanh DX-Ball, cầu nối bảng nhớ tạm Notion và vòng đạn TH04](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![Minh họa các ví dụ về cân bằng âm thanh DX-Ball, cầu nối bảng nhớ tạm Notion và vòng đạn TH04](docs/assets/rea-showcases.png)](https://rea.tools/vi/showcase/) ### DX-Ball: tái tạo phép tính phân bố âm thanh trái phải Lần theo lời gọi âm thanh đến hàm hỗ trợ chuyển vị trí thành giá trị phân bố âm thanh, kiểm tra các lệnh và chuyển mã giả chưa đầy đủ sang C. Bản tái tạo vượt qua 3.205 trường hợp kiểm thử với x86 gốc và tái tạo đủ 63 byte của hàm đã biên dịch. -[Đọc nghiên cứu điển hình](https://rea.tools/showcase/dx-ball/) · [Kho mã tái tạo](https://github.com/N0zoM1z0/dx-ball) +[Đọc nghiên cứu điển hình](https://rea.tools/vi/showcase/dx-ball/) · [Kho mã tái tạo](https://github.com/N0zoM1z0/dx-ball) ### Notion: lần theo cầu nối clipboard của Electron Tìm API clipboard trong tiến trình kết xuất, lần theo qua preload và IPC đến tiến trình chính, rồi kiểm tra định dạng clipboard có dữ liệu định dạng phong phú. -[Đọc nghiên cứu điển hình](https://rea.tools/showcase/notion/) +[Đọc nghiên cứu điển hình](https://rea.tools/vi/showcase/notion/) ### TH04: khôi phục phép tính vòng đạn trong DOS Kiểm tra các lệnh 16 bit của trò chơi PC-98 gốc, khôi phục phép tính góc cố định và góc nhắm mục tiêu, rồi so sánh C++ được tái tạo với đầu ra của trình biên dịch thời đó. -[Đọc nghiên cứu điển hình](https://rea.tools/showcase/th04/) · [Kho mã tái tạo](https://github.com/N0zoM1z0/th04) +[Đọc nghiên cứu điển hình](https://rea.tools/vi/showcase/th04/) · [Kho mã tái tạo](https://github.com/N0zoM1z0/th04) Nếu bạn dùng REA cho một mục tiêu thú vị, chúng tôi muốn biết. Chia sẻ trường hợp của bạn qua [issue](https://github.com/morluto/rea/issues) hoặc [pull request](https://github.com/morluto/rea/pulls), nêu mục tiêu, câu hỏi, cách REA giúp bạn và những gì tìm được. @@ -246,7 +246,7 @@ Nếu dùng tác nhân, hãy hoàn tất [làm mới thiết lập](#cập-nhậ ## Tài liệu -Bắt đầu với [hướng dẫn thực hành](https://rea.tools/guides/) trên trang web. Để biết tùy chọn cụ thể, điều kiện tiên quyết và hợp đồng kết quả: +Bắt đầu với [hướng dẫn thực hành](https://rea.tools/vi/guides/) trên trang web. Để biết tùy chọn cụ thể, điều kiện tiên quyết và hợp đồng kết quả: - [Cài đặt và thiết lập](docs/installation.md): đăng ký tác nhân, cấu hình trình phân tích, cập nhật và gỡ cài đặt. - [Kiểm tra mức sẵn sàng và khắc phục sự cố](docs/installation.md#check-readiness-for-your-task): chẩn đoán một tác nhân hoặc bộ máy phân tích cụ thể. diff --git a/README_zh-TW.md b/README_zh-TW.md index dd89e59e6..b5b282c17 100644 --- a/README_zh-TW.md +++ b/README_zh-TW.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[網站](https://rea.tools/) · [指南](https://rea.tools/guides/) · [案例](https://rea.tools/showcase/)** +**[網站](https://rea.tools/zh-TW/) · [指南](https://rea.tools/zh-TW/guides/) · [案例](https://rea.tools/zh-TW/showcase/)** [快速開始](#快速開始) · [REA 的工作原理](#rea-的工作原理) · [可以分析什麼](#可以分析什麼) · [案例](#案例) · [常見問題](#常見問題) · [文件](#文件) @@ -54,7 +54,7 @@ REA 將 AI 代理連接到分析工具,用於檢查原生二進位檔案、Jav 設定流程會向 AI 代理註冊 REA,並安裝對應的工作流程指引。原生分析可以使用已有的 Hopper 或 Ghidra;設定流程也可以在你核准後安裝 Hopper。靜態 JavaScript 分析不需要這兩個引擎。 -> **[訪問 REA 網站](https://rea.tools/)**,查看設定說明、圖解指南和真實案例。 +> **[訪問 REA 網站](https://rea.tools/zh-TW/)**,查看設定說明、圖解指南和真實案例。 ## 快速開始 @@ -133,12 +133,12 @@ REA 需要 Node.js 22.x(>=22.19)、24.x(>=24.11)或 26+,以及 npm。 | 目標 | REA 返回的內容 | 要求與指南 | | --------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| 原生二進位檔案 | 偽程式碼、組合語言、字串、符號、呼叫和引用 | Hopper、Ghidra 或 IDA;[原生分析](https://rea.tools/guides/native/) | +| 原生二進位檔案 | 偽程式碼、組合語言、字串、符號、呼叫和引用 | Hopper、Ghidra 或 IDA;[原生分析](https://rea.tools/zh-TW/guides/native/) | | 離線 ELF 佈局 | 節、段、原始符號/重定位資訊及靜態防護機制候選項 | Linux x64 上由呼叫方提供的 pwntools;[二進位診斷](docs/binary-diagnostics.md) | | EVM 位元組碼 | 分派選擇器、位元組偏移、推斷的參數和狀態可變性 | Linux x64 上的本地原始位元組/十六進位輸入載體;[離線 EVM 指南](docs/evm-bytecode.md) | | 已記錄的 Linux 崩潰 | 原始 note 記錄、每個已記錄執行緒的暫存器/訊號及可選的對映候選項 | Linux x64 上由呼叫方提供的 pwntools;可選的 GDB/pwndbg;[已記錄崩潰](docs/recorded-crashes.md) | -| JavaScript / Electron | 模組、匯入、source map、路由、IPC 和原生附加元件關係 | Node.js 和 npm;[應用分析](https://rea.tools/guides/javascript/) | -| 網站 | 頁面結構、腳本、網路觀察結果和按請求獲取的螢幕擷取畫面 | Chrome 系瀏覽器;[瀏覽器分析](https://rea.tools/guides/browser/) | +| JavaScript / Electron | 模組、匯入、source map、路由、IPC 和原生附加元件關係 | Node.js 和 npm;[應用分析](https://rea.tools/zh-TW/guides/javascript/) | +| 網站 | 頁面結構、腳本、網路觀察結果和按請求獲取的螢幕擷取畫面 | Chrome 系瀏覽器;[瀏覽器分析](https://rea.tools/zh-TW/guides/browser/) | | 已保存的網路擷取 | 請求、回應、可訪問的酬載和來源位置 | HAR;原生 mitmproxy 擷取需要 Linux 上的 mitmdump;[擷取指南](docs/web-network-captures.md) | | .NET 程式集 | 中繼資料、CIL 指令、聲明的原生依賴和建置對比 | 靜態檢查;[托管程式碼指南](docs/managed-code-analysis.md) | | Android APK | 清單聲明、類別、反編譯的方法和引用 | Linux/macOS/Windows x64 上的無界面 JADX 和完整 JDK;[Android 指南](docs/android-analysis.md) | @@ -157,26 +157,26 @@ REA 需要 Node.js 22.x(>=22.19)、24.x(>=24.11)或 26+,以及 npm。 ## 案例 -[![DX-Ball 聲音平移、Notion 剪貼簿橋接與 TH04 彈幕環案例的插圖](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![DX-Ball 聲音平移、Notion 剪貼簿橋接與 TH04 彈幕環案例的插圖](docs/assets/rea-showcases.png)](https://rea.tools/zh-TW/showcase/) ### DX-Ball:重建聲像計算 沿聲音呼叫追蹤到根據位置計算聲像的輔助函數,檢查指令,將不完整的偽程式碼轉為 C。重建結果通過了 3,205 個原始 x86 測試用例,並復現了編譯後函數的全部 63 個位元組。 -[閱讀案例](https://rea.tools/showcase/dx-ball/) · +[閱讀案例](https://rea.tools/zh-TW/showcase/dx-ball/) · [重建專案儲存庫](https://github.com/N0zoM1z0/dx-ball) ### Notion:追蹤 Electron 剪貼簿橋 找到渲染處理程序的剪貼簿 API,沿 preload 和 IPC 追蹤到主處理程序,並檢查富格式剪貼簿資料。 -[閱讀案例](https://rea.tools/showcase/notion/) +[閱讀案例](https://rea.tools/zh-TW/showcase/notion/) ### TH04:恢復 DOS 環形子彈的計算 檢查原始 PC-98 遊戲的 16 位指令,恢復固定角度和瞄準角度的計算,並將重建的 C++ 與當年的編譯器輸出進行對比。 -[閱讀案例](https://rea.tools/showcase/th04/) · +[閱讀案例](https://rea.tools/zh-TW/showcase/th04/) · [重建專案儲存庫](https://github.com/N0zoM1z0/th04) 如果你用 REA 分析了有趣的目標,我們很想瞭解。歡迎通過 [issue](https://github.com/morluto/rea/issues) 或 [pull request](https://github.com/morluto/rea/pulls) 分享案例,說明目標、你的問題、REA 如何提供幫助,以及你的發現。 @@ -248,7 +248,7 @@ npx rea-agents@latest setup ## 文件 -可以先閱讀網站上的[實操指南](https://rea.tools/guides/)。具體選項、前提條件和結果契約見: +可以先閱讀網站上的[實操指南](https://rea.tools/zh-TW/guides/)。具體選項、前提條件和結果契約見: - [安裝與設定](docs/installation.md):AI 代理註冊、提供者組態、更新和卸載。 - [就緒檢查與故障排查](docs/installation.md#check-readiness-for-your-task):診斷特定 AI 代理或分析引擎。 diff --git a/README_zh.md b/README_zh.md index 4e8dd9b4e..0eca17c7f 100644 --- a/README_zh.md +++ b/README_zh.md @@ -18,7 +18,7 @@ morluto%2Frea | Trendshift -**[网站](https://rea.tools/) · [指南](https://rea.tools/guides/) · [案例](https://rea.tools/showcase/)** +**[网站](https://rea.tools/zh-CN/) · [指南](https://rea.tools/zh-CN/guides/) · [案例](https://rea.tools/zh-CN/showcase/)** [快速开始](#快速开始) · [REA 的工作原理](#rea-的工作原理) · [可以分析什么](#可以分析什么) · [案例](#案例) · [常见问题](#常见问题) · [文档](#文档) @@ -54,7 +54,7 @@ REA 将智能体连接到分析工具,用于检查原生二进制文件、Java 设置流程会向智能体注册 REA,并安装匹配的工作流指引。原生分析可以使用已有的 Hopper 或 Ghidra;设置流程也可以在你批准后安装 Hopper。静态 JavaScript 分析不需要这两个引擎。 -> **[访问 REA 网站](https://rea.tools/)**,查看设置说明、图解指南和真实案例。 +> **[访问 REA 网站](https://rea.tools/zh-CN/)**,查看设置说明、图解指南和真实案例。 ## 快速开始 @@ -133,12 +133,12 @@ REA 需要 Node.js 22.x(>=22.19)、24.x(>=24.11)或 26+,以及 npm。 | 目标 | REA 返回的内容 | 要求与指南 | | --------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| 原生二进制文件 | 伪代码、汇编、字符串、符号、调用和引用 | Hopper、Ghidra 或 IDA;[原生分析](https://rea.tools/guides/native/) | +| 原生二进制文件 | 伪代码、汇编、字符串、符号、调用和引用 | Hopper、Ghidra 或 IDA;[原生分析](https://rea.tools/zh-CN/guides/native/) | | 离线 ELF 布局 | 节、段、原始符号/重定位信息及静态防护机制候选项 | Linux x64 上由调用方提供的 pwntools;[二进制诊断](docs/binary-diagnostics.md) | | EVM 字节码 | 分派选择器、字节偏移、推断的参数和状态可变性 | Linux x64 上的本地原始字节/十六进制输入载体;[离线 EVM 指南](docs/evm-bytecode.md) | | 已记录的 Linux 崩溃 | 原始 note 记录、每个已记录线程的寄存器/信号及可选的映射候选项 | Linux x64 上由调用方提供的 pwntools;可选的 GDB/pwndbg;[已记录崩溃](docs/recorded-crashes.md) | -| JavaScript / Electron | 模块、导入、source map、路由、IPC 和原生扩展关系 | Node.js 和 npm;[应用分析](https://rea.tools/guides/javascript/) | -| 网站 | 页面结构、脚本、网络观察结果和按请求获取的截图 | Chrome 系浏览器;[浏览器分析](https://rea.tools/guides/browser/) | +| JavaScript / Electron | 模块、导入、source map、路由、IPC 和原生扩展关系 | Node.js 和 npm;[应用分析](https://rea.tools/zh-CN/guides/javascript/) | +| 网站 | 页面结构、脚本、网络观察结果和按请求获取的截图 | Chrome 系浏览器;[浏览器分析](https://rea.tools/zh-CN/guides/browser/) | | 已保存的网络捕获 | 请求、响应、可访问的载荷和来源位置 | HAR;原生 mitmproxy 捕获需要 Linux 上的 mitmdump;[捕获指南](docs/web-network-captures.md) | | .NET 程序集 | 元数据、CIL 指令、声明的原生依赖和构建对比 | 静态检查;[托管代码指南](docs/managed-code-analysis.md) | | Android APK | 清单声明、类、反编译的方法和引用 | Linux/macOS/Windows x64 上的无界面 JADX 和完整 JDK;[Android 指南](docs/android-analysis.md) | @@ -157,26 +157,26 @@ REA 需要 Node.js 22.x(>=22.19)、24.x(>=24.11)或 26+,以及 npm。 ## 案例 -[![DX-Ball 声音平移、Notion 剪贴板桥接与 TH04 弹幕环案例的插图](docs/assets/rea-showcases.png)](https://rea.tools/showcase/) +[![DX-Ball 声音平移、Notion 剪贴板桥接与 TH04 弹幕环案例的插图](docs/assets/rea-showcases.png)](https://rea.tools/zh-CN/showcase/) ### DX-Ball:重建声像计算 沿声音调用追踪到根据位置计算声像的辅助函数,检查指令,将不完整的伪代码转为 C。重建结果通过了 3,205 个原始 x86 测试用例,并复现了编译后函数的全部 63 个字节。 -[阅读案例](https://rea.tools/showcase/dx-ball/) · +[阅读案例](https://rea.tools/zh-CN/showcase/dx-ball/) · [重建项目仓库](https://github.com/N0zoM1z0/dx-ball) ### Notion:追踪 Electron 剪贴板桥 找到渲染进程的剪贴板 API,沿 preload 和 IPC 追踪到主进程,并检查富格式剪贴板数据。 -[阅读案例](https://rea.tools/showcase/notion/) +[阅读案例](https://rea.tools/zh-CN/showcase/notion/) ### TH04:恢复 DOS 环形子弹的计算 检查原始 PC-98 游戏的 16 位指令,恢复固定角度和瞄准角度的计算,并将重建的 C++ 与当年的编译器输出进行对比。 -[阅读案例](https://rea.tools/showcase/th04/) · +[阅读案例](https://rea.tools/zh-CN/showcase/th04/) · [重建项目仓库](https://github.com/N0zoM1z0/th04) 如果你用 REA 分析了有趣的目标,我们很想了解。欢迎通过 [issue](https://github.com/morluto/rea/issues) 或 [pull request](https://github.com/morluto/rea/pulls) 分享案例,说明目标、你的问题、REA 如何提供帮助,以及你的发现。 @@ -248,7 +248,7 @@ npx rea-agents@latest setup ## 文档 -可以先阅读网站上的[实操指南](https://rea.tools/guides/)。具体选项、前提条件和结果契约见: +可以先阅读网站上的[实操指南](https://rea.tools/zh-CN/guides/)。具体选项、前提条件和结果契约见: - [安装与设置](docs/installation.md):智能体注册、提供方配置、更新和卸载。 - [就绪检查与故障排查](docs/installation.md#check-readiness-for-your-task):诊断特定智能体或分析引擎。 diff --git a/scripts/ci/plan.mjs b/scripts/ci/plan.mjs index 46ee8d039..a970cc57e 100644 --- a/scripts/ci/plan.mjs +++ b/scripts/ci/plan.mjs @@ -123,6 +123,7 @@ if ( file.startsWith("docs/") ) { selected.docs = true; + selected.website ||= matchesAny(file, SCOPES.website); continue; } if (/^(src|tests)\/.*\.(?:test|spec)\.[cm]?[jt]sx?$/.test(file)) { diff --git a/scripts/ci/scopes.mjs b/scripts/ci/scopes.mjs index f380c19ee..93c34c4a6 100644 --- a/scripts/ci/scopes.mjs +++ b/scripts/ci/scopes.mjs @@ -222,6 +222,8 @@ export const SCOPES = { website: [ "website/**", "scripts/*website*.py", + "README*.md", ".github/workflows/website-check.yml", + ".github/workflows/website-pages.yml", ], }; diff --git a/scripts/prepare-website.py b/scripts/prepare-website.py index 848b6fbc4..cd284d3e4 100644 --- a/scripts/prepare-website.py +++ b/scripts/prepare-website.py @@ -76,9 +76,14 @@ def prepare_notes_example(site): print(f"Prepared examples/notes-example.zip ({len(EXAMPLE_FILES)} files).") -if __name__ == "__main__": - root = Path(__file__).resolve().parent.parent - site = root / "website/public" +def prepare_assets(site): + """Finish the shared publish artifact before it replaces the current preview.""" prepare_sharing_image(site) prepare_sitemap(site) prepare_notes_example(site) + + +if __name__ == "__main__": + root = Path(__file__).resolve().parent.parent + from website_i18n import build_translations + build_translations(root, root / "website/_site", finalize=prepare_assets) diff --git a/scripts/test-website.py b/scripts/test-website.py index 8f555b62d..dad0285a5 100644 --- a/scripts/test-website.py +++ b/scripts/test-website.py @@ -3,6 +3,7 @@ import contextlib import importlib.util import io +import json from pathlib import Path import shutil import tempfile @@ -13,6 +14,9 @@ from urllib.error import HTTPError from urllib.request import urlopen import xml.etree.ElementTree as ET +import polib +from website_i18n import Document, build_translations, checked_catalog, extract_catalogs, languages, reading_pages, read_runtime + ROOT = Path(__file__).resolve().parent.parent @@ -113,7 +117,7 @@ class WebsiteSearchChecks(unittest.TestCase): for name, old, new, message in cases: with self.subTest(name=name), tempfile.TemporaryDirectory() as directory: site = Path(directory) / "public" - shutil.copytree(ROOT / "website/public", site) + shutil.copytree(ROOT / "website/_site", site) path = site / name source = path.read_text() self.assertIn(old, source) @@ -123,7 +127,7 @@ class WebsiteSearchChecks(unittest.TestCase): ) with tempfile.TemporaryDirectory() as directory: site = Path(directory) / "public" - shutil.copytree(ROOT / "website/public", site) + shutil.copytree(ROOT / "website/_site", site) (site / "assets/social-card.png").unlink() self.assertIn( "Social preview PNG is missing; run scripts/prepare-website.py", @@ -162,6 +166,9 @@ class WebsiteMaintenanceChecks(unittest.TestCase): for name in ("public", "templates"): shutil.copytree(ROOT / "website" / name, root / "website" / name) site = root / "website/public" + WEBSITE.sync_pages(root) + shutil.copyfile(ROOT / "website/_site/assets/social-card.png", site / "assets/social-card.png") + PREPARE.prepare_notes_example(site) page = WEBSITE.new_page(root, "blog/new-example", 'A & "result"', 'Check "quotes" & .') source = page.read_text() self.assertIn('href="../../blog/" aria-current="page"', source) @@ -182,7 +189,7 @@ class WebsiteMaintenanceChecks(unittest.TestCase): def test_links_in_prompts_fragments_and_copy_controls_are_verified(self): with tempfile.TemporaryDirectory() as directory: site = Path(directory) / "public" - shutil.copytree(ROOT / "website/public", site) + shutil.copytree(ROOT / "website/_site", site) page = site / "faq/index.html" original = page.read_text() cases = ( @@ -242,5 +249,158 @@ class WebsiteMaintenanceChecks(unittest.TestCase): worker.join() +class WebsiteTranslationChecks(unittest.TestCase): + """Exercise source edits, translated evidence and language editions at their consumers.""" + + @contextlib.contextmanager + def translated_project(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + for name in ("public", "templates", "locales"): + shutil.copytree(ROOT / "website" / name, root / "website" / name) + inventory = [item for item in languages(ROOT) if item["code"] in {"en", "zh-CN", "ar"}] + (root / "website/locales/languages.json").write_text(json.dumps(inventory)) + for item in inventory: + (root / item["readme"]).write_text("# REA\n") + WEBSITE.sync_pages(root) + extract_catalogs(root) + yield root + + def test_source_change_preserves_review_and_excludes_stale_translation_from_search(self): + with self.translated_project() as root: + path = root / "website/locales/zh-CN/messages.po" + catalog = polib.pofile(path) + old = catalog.find("How do I install REA?", msgctxt="page:faq/index.html") + old.tcomment = "Reviewed installation wording." + old_translation = old.msgstr + catalog.save(path) + page = root / "website/public/faq/index.html" + page.write_text(page.read_text().replace("How do I install REA?", "How do I install REA today?")) + with self.assertRaisesRegex(ValueError, "Translation sources changed"): + extract_catalogs(root, check=True) + extract_catalogs(root) + updated = polib.pofile(path) + archived = next(entry for entry in updated if entry.obsolete and entry.msgid == old.msgid) + self.assertEqual((archived.msgstr, archived.tcomment), (old_translation, old.tcomment)) + new = updated.find("How do I install REA today?", msgctxt=old.msgctxt) + self.assertEqual(new.msgstr, "") + build_translations(root, root / "website/_site") + site = root / "website/_site" + PREPARE.prepare_sitemap(site) + fallback = VERIFY.HtmlReferences() + fallback.feed((site / "zh-CN/faq/index.html").read_text()) + self.assertTrue(fallback.translation_fallback) + self.assertTrue(fallback.noindex()) + self.assertEqual(fallback.lang, "en") + self.assertNotIn("https://rea.tools/zh-CN/faq/", (site / "sitemap.xml").read_text()) + self.assertNotIn('hreflang="zh-CN"', (site / "faq/index.html").read_text()) + new.msgstr = "现在如何安装 REA?" + new.flags.append("fuzzy") + updated.save(path) + build_translations(root, site) + self.assertIn('data-translation-fallback="true"', (site / "zh-CN/faq/index.html").read_text()) + new.flags.remove("fuzzy") + updated.save(path) + build_translations(root, site) + PREPARE.prepare_sitemap(site) + result = (site / "zh-CN/faq/index.html").read_text() + self.assertIn("现在如何安装 REA?", result) + self.assertNotIn("data-translation-fallback", result) + self.assertIn('href="../assets/styles.css"', (site / "zh-CN/index.html").read_text()) + self.assertIn('hreflang="zh-CN"', (site / "faq/index.html").read_text()) + self.assertIn("https://rea.tools/zh-CN/faq/", (site / "sitemap.xml").read_text()) + + def test_broken_placeholders_and_inline_markup_fail_before_replacing_preview(self): + with self.translated_project() as root: + site = root / "website/_site" + build_translations(root, site) + before = (site / "zh-CN/index.html").read_bytes() + path = root / "website/locales/zh-CN/messages.po" + catalog = polib.pofile(path) + entry = catalog.find("Already know RE? {ph0}Skip to analysis guides →{ph1}", msgctxt="page:index.html") + original = entry.msgstr + for bad, reason in (("丢失链接", "changed placeholders"), ("{ph1}错误的链接{ph0}", "invalid inline markup")): + with self.subTest(reason=reason): + entry.msgstr = bad + catalog.save(path) + with self.assertRaisesRegex(ValueError, reason): + build_translations(root, site) + self.assertEqual((site / "zh-CN/index.html").read_bytes(), before) + entry.msgstr = original + catalog.save(path) + (root / "website/locales/languages.json").unlink() + with self.assertRaisesRegex(ValueError, "Missing languages.json"): + build_translations(root, site) + self.assertEqual((site / "zh-CN/index.html").read_bytes(), before) + + def test_runtime_message_drift_and_page_specific_completeness(self): + with self.translated_project() as root: + script = root / "website/public/assets/dino-demo.js" + original = script.read_text() + script.write_text(original.replace('t("Pause")', 't("Pause game")')) + self.assertIn("Pause game", read_runtime(root)) + with self.assertRaisesRegex(ValueError, "Translation sources changed"): + extract_catalogs(root, check=True) + script.write_text(original.replace('t("Pause")', 't(dynamicMessage)')) + with self.assertRaisesRegex(ValueError, "one literal message"): + read_runtime(root) + script.write_text(original) + path = root / "website/locales/zh-CN/messages.po" + catalog = polib.pofile(path) + catalog.find("Pause", msgctxt="runtime").msgstr = "" + catalog.save(path) + site = root / "website/_site" + build_translations(root, site) + self.assertIn('data-translation-fallback="true"', (site / "zh-CN/examples/dino-lab/index.html").read_text()) + self.assertNotIn('data-translation-fallback="true"', (site / "zh-CN/faq/index.html").read_text()) + + def test_all_readme_editions_preserve_code_targets_downloads_and_reciprocal_routes(self): + site = ROOT / "website/_site" + english_pages = reading_pages(ROOT / "website/public") + for language in languages(ROOT): + code = language["code"] + for original in english_pages: + relative = original.relative_to(ROOT / "website/public") + path = site / relative if code == "en" else site / code / relative + with self.subTest(language=code, page=str(relative)): + source = original.read_text() + translated = path.read_text() + def evidence(html): + doc = Document(html) + return sorted(doc.source[node.start:node.end] for node in doc.nodes if node.tag in {"pre", "code", "kbd"} or node.attrs.get("translate") == "no") + self.assertEqual(evidence(source), evidence(translated)) + parser = VERIFY.HtmlReferences() + parser.feed(translated) + self.assertEqual(parser.lang, "en" if parser.translation_fallback else code) + if code != "en" and not parser.translation_fallback: + self.assertEqual(parser.direction, language["dir"]) + if parser.translation_fallback: + self.assertTrue(parser.noindex()) + self.assertNotIn(code, parser.alternates) + else: + self.assertEqual(parser.alternates[code], WEBSITE.page_url(site, path)) + english = VERIFY.HtmlReferences() + english.feed((site / relative).read_text()) + self.assertEqual(parser.alternates, english.alternates) + self.assertTrue(set(parser.copy_targets) <= parser.ids) + for fixture in WEBSITE.NOTES_FIXTURES: + self.assertEqual((site / fixture).read_bytes(), (ROOT / "website/public" / fixture).read_bytes()) + with ThreadingHTTPServer(("127.0.0.1", 0), WEBSITE.preview_handler(site, "/rea/")) as server: + worker = Thread(target=server.serve_forever, daemon=True) + worker.start() + try: + base = f"http://127.0.0.1:{server.server_port}/rea/" + with urlopen(base + "ar/faq?test=1") as response: + self.assertEqual(response.url, base + "ar/faq/?test=1") + self.assertIn(b'lang="ar"', response.read()) + with urlopen(base + "assets/i18n.js") as response: + self.assertIn(b"export function t", response.read()) + with urlopen(base + "examples/notes-example.zip") as response: + self.assertEqual(response.read(), (site / "examples/notes-example.zip").read_bytes()) + finally: + server.shutdown() + worker.join() + + if __name__ == "__main__": unittest.main() diff --git a/scripts/verify-website.py b/scripts/verify-website.py index 889d77394..e60536e4c 100644 --- a/scripts/verify-website.py +++ b/scripts/verify-website.py @@ -95,6 +95,9 @@ class HtmlReferences(HTMLParser): self.properties = {} self.canonicals = [] self.lang = None + self.direction = None + self.translation_fallback = False + self.alternates = {} self.h1_count = 0 self.text = [] self.copy_targets = [] @@ -103,11 +106,18 @@ class HtmlReferences(HTMLParser): attributes = dict(attrs) if tag == "html": self.lang = attributes.get("lang") + self.direction = attributes.get("dir") + self.translation_fallback = attributes.get("data-translation-fallback") == "true" if tag == "h1": self.h1_count += 1 if tag == "head": self.in_head = True if self.in_head: + if tag == "link" and attributes.get("rel") == "alternate" and attributes.get("hreflang"): + language = attributes["hreflang"] + if language in self.alternates: + self.duplicate_ids.append("hreflang:" + language) + self.alternates[language] = attributes.get("href") or "" if tag == "title": self.titles.append("") self.in_title = True @@ -167,8 +177,17 @@ def check_search_metadata(site, pages): title = page.titles[0].strip() if len(page.titles) == 1 else "" if not title: errors.append(f"{label}: needs exactly one nonempty head title") - if page.lang != "en" or page.h1_count != 1: - errors.append(f"{label}: needs lang=en and exactly one h1") + first = path.relative_to(site).parts[0] + expected_language = first if re.fullmatch(r"[a-z]{2}(?:-[A-Z]{2})?", first) else "en" + if page.translation_fallback: + if page.lang != "en" or not page.noindex(): + errors.append(f"{label}: English translation fallback needs lang=en and noindex") + elif page.lang != expected_language: + errors.append(f"{label}: needs lang={expected_language} and exactly one h1") + if page.h1_count != 1: + errors.append(f"{label}: needs exactly one h1") + if expected_language in ("ar", "fa") and not page.translation_fallback and page.direction != "rtl": + errors.append(f"{label}: needs dir=rtl") if label in NOTES_FIXTURES and not page.noindex(): errors.append( f"{label}: example application must have a head noindex directive" @@ -179,9 +198,10 @@ def check_search_metadata(site, pages): indexable.add(url) if page.canonicals != [url]: errors.append(f"{label}: needs exactly one head canonical for {url}") - if title in titles: + title_identity = (page.lang, title) + if title_identity in titles: errors.append(f"{label}: duplicate search title {title!r}") - titles.add(title) + titles.add(title_identity) descriptions = page.meta.get("description", []) description = descriptions[0].strip() if len(descriptions) == 1 else "" if not description: @@ -219,6 +239,22 @@ def check_search_metadata(site, pages): values = collection.get(key, []) if len(values) != 1 or not values[0].strip(): errors.append(f"{label}: needs exactly one nonempty {key}") + if page.alternates: + if page.alternates.get(page.lang) != url: + errors.append(f"{label}: hreflang must include its own canonical") + for language, target in page.alternates.items(): + parsed = urlsplit(target) + if parsed.scheme != "https" or parsed.netloc != "rea.tools": + errors.append(f"{label}: hreflang needs absolute rea.tools URLs") + continue + target_path = (site / unquote(parsed.path).lstrip("/")).resolve() + if target_path.is_dir(): + target_path /= "index.html" + other = pages.get(target_path) + if other is None or other.noindex() or other.alternates != page.alternates: + errors.append(f"{label}: nonreciprocal or nonindexable hreflang: {target}") + elif language != "x-default" and other.lang != language: + errors.append(f"{label}: hreflang={language} points to lang={other.lang}") sitemap_path = site / "sitemap.xml" try: @@ -290,7 +326,7 @@ def check_site(site): parser.feed(path.read_text(encoding="utf-8")) pages[path] = parser if site / "index.html" not in pages: - errors.append("website/public/index.html is missing") + errors.append(f"{site}/index.html is missing; run scripts/prepare-website.py") for path, page in pages.items(): label = path.relative_to(site) @@ -400,8 +436,8 @@ def check_example_archive(site): def main(): """Run the same checks locally, on website PRs and before publishing.""" root = Path(__file__).resolve().parent.parent - pages, references, indexable, errors = check_site(root / "website/public") - errors.extend(check_example_archive(root / "website/public")) + pages, references, indexable, errors = check_site(root / "website/_site") + errors.extend(check_example_archive(root / "website/_site")) errors.extend(check_publisher(root)) errors.extend(check_repository_links(root)) try: diff --git a/scripts/website.py b/scripts/website.py index 3619f1b83..7e20f53a2 100644 --- a/scripts/website.py +++ b/scripts/website.py @@ -31,6 +31,7 @@ def authored_markdown(root): path for path in sorted(site.rglob("*.md")) if not any(part.startswith(".") or part in ("node_modules", "__pycache__") for part in path.relative_to(site).parts) + and "_site" not in path.relative_to(site).parts ] @@ -111,6 +112,10 @@ def shared_blocks(root, path, source): "title": escape(metadata.titles[0].strip(), quote=True), "description": escape(metadata.descriptions[0].strip(), quote=True), } + from website_i18n import language_markup + selector, alternates = language_markup(root, path.relative_to(site).as_posix()) + values["language_picker"] = selector if not metadata.noindex else "" + values["alternates"] = alternates if not metadata.noindex else "" templates = root / "website/templates" return { name: indent(Template((templates / f"{name}.html.tmpl").read_text(encoding="utf-8")).substitute(values), " ") @@ -207,13 +212,29 @@ def main(): create.add_argument("route") create.add_argument("--title", required=True) create.add_argument("--description", required=True) + translations = commands.add_parser("translations", help="Maintain gettext catalogs") + translations.add_argument("action", choices=("extract", "status", "check")) + translations.add_argument("--language", help="Check one language, such as zh-CN") + translations.add_argument("--strict", action="store_true", help="Fail on missing or fuzzy translations") serve = commands.add_parser("serve", help="Prepare and preview the static site") serve.add_argument("--port", type=int, default=4173) serve.add_argument("--base-path", choices=("/", "/rea/"), default="/") args = parser.parse_args() root = Path(__file__).resolve().parent.parent try: - if args.command == "new-page": + if args.command == "translations": + from website_i18n import checked_catalog, extract_catalogs, languages + template = extract_catalogs(root, check=args.action != "extract") + if args.action != "extract": + inventory = languages(root)[1:] + if args.language: + inventory = [item for item in inventory if item["code"] == args.language] + if not inventory: + raise ValueError(f"Unknown translation language: {args.language}") + for language in inventory: + messages, missing = checked_catalog(root, language, template, strict=args.strict) + print(f"{language['code']}: {len(messages)}/{len(template)} translated; {len(missing)} missing or fuzzy") + elif args.command == "new-page": new_page(root, args.route, args.title, args.description) elif args.command == "sync": sync_pages(root, check=args.check) @@ -228,7 +249,7 @@ def main(): run_script(root, "prepare-website.py") prefix = args.base_path - handler = preview_handler(root / "website/public", prefix) + handler = preview_handler(root / "website/_site", prefix) with ThreadingHTTPServer(("127.0.0.1", args.port), handler) as server: print(f"Preview: http://127.0.0.1:{server.server_port}{prefix}", flush=True) server.serve_forever() diff --git a/scripts/website_i18n.py b/scripts/website_i18n.py new file mode 100644 index 000000000..5b2a68c12 --- /dev/null +++ b/scripts/website_i18n.py @@ -0,0 +1,637 @@ +"""Extract gettext catalogs and render language editions of authored static HTML.""" + +from collections import Counter +from html import escape, unescape +from html.parser import HTMLParser +import json +import os +from pathlib import Path +import re +import shutil +from string import Formatter +from tempfile import TemporaryDirectory +from urllib.parse import quote, unquote, urlsplit, urlunsplit + +import polib + + +VOID = {"area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param", "source", "track", "wbr"} +INLINE = {"a", "abbr", "b", "bdi", "br", "cite", "code", "em", "i", "kbd", "mark", "s", "small", "span", "strong", "sub", "sup", "time", "u"} +PROSE = {"a", "p", "h1", "h2", "h3", "h4", "h5", "h6", "li", "dt", "dd", "figcaption", "summary", "label", "button", "th", "td", "span", "strong", "small", "cite", "blockquote", "output"} +PROTECTED = {"code", "kbd", "pre", "script", "style", "svg", "math"} +ATTRIBUTES = {"alt", "aria-label", "aria-description", "title", "placeholder"} +PLACEHOLDER = re.compile(r"\{([a-zA-Z][a-zA-Z0-9_]*)\}") +LITERALS = {"REA", "Reverse Engineer Anything", "REA · Reverse Engineer Anything", "GitHub", "Discord", "FAQ", "MCP", "CLI", "CSV", "JSON", "HTML", "CSS", "JavaScript", "Electron", "Hopper", "Ghidra", "IDA", "Windows", "Linux", "macOS", "Notion", "DX-Ball", "TH04", "TH08", "TH095", "Aegis", "SHA-1", "HMAC", "Node.js", "npm", "npx", "DOS", "PC-98"} +FALLBACK_NOTICE = "Translation is being updated. Read this page in English for now." + + +def languages(root): + """Load the website language inventory and check it against README editions.""" + path = root / "website/locales/languages.json" + if not path.exists(): + if any(root.glob("README_*.md")): + raise ValueError("Missing languages.json for the translated README editions") + return [{"code": "en", "name": "English", "readme": "README.md", "dir": "ltr"}] + data = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(data, list) or not data or not isinstance(data[0], dict) or data[0].get("code") != "en": + raise ValueError("languages.json must start with English") + codes, filenames = set(), set() + for item in data: + if not isinstance(item, dict) or set(item) != {"code", "name", "readme", "dir"}: + raise ValueError("Each language needs code, name, readme and dir") + if not all(isinstance(value, str) and value for value in item.values()): + raise ValueError("Language fields must be nonempty strings") + if not re.fullmatch(r"[a-z]{2}(?:-[A-Z]{2})?", item["code"]) or item["code"] in codes: + raise ValueError(f"Invalid or duplicate language: {item['code']}") + if item["dir"] not in ("ltr", "rtl"): + raise ValueError(f"Invalid text direction: {item['code']}") + if item["readme"] in filenames: + raise ValueError(f"Duplicate README edition: {item['readme']}") + codes.add(item["code"]) + filenames.add(item["readme"]) + readmes = {path.name for path in root.glob("README*.md")} + if readmes and ({item["readme"] for item in data} != readmes): + raise ValueError("Website languages must match the README language editions") + return data + + +def reading_pages(site): + """Discover authored reading pages, leaving target applications untouched.""" + from website import NOTES_FIXTURES, PageMetadata + pages = [] + for path in sorted(site.rglob("*.html")): + if path.relative_to(site).as_posix() in NOTES_FIXTURES: + continue + metadata = PageMetadata() + metadata.feed(path.read_text(encoding="utf-8")) + if not metadata.noindex: + pages.append(path) + return pages + + +def localized_path(relative, code): + """Keep English's existing routes and prefix other editions with their language.""" + return Path(relative) if code == "en" else Path(code) / relative + + +def language_markup(root, relative, code="en", available=None): + """Render a keyboard-accessible same-page selector and reciprocal hreflang links.""" + from website import SITE_ORIGIN, page_route + inventory = languages(root) + available = set(available) if available is not None else {item["code"] for item in inventory} + current = next(item for item in inventory if item["code"] == code) + route = page_route(Path("."), Path(".") / relative) + depth = len(localized_path(relative, code).parent.parts) + base = "../" * depth or "./" + choices, alternates = [], [] + for item in inventory: + target = ("" if item["code"] == "en" else item["code"] + "/") + route + href = escape(base + target, quote=True) + active = ' aria-current="true"' if item["code"] == code else "" + fallback = " · English" if item["code"] not in available else "" + choices.append(f'{escape(item["name"])}{fallback}') + if item["code"] in available: + alternates.append(f'\n') + alternates.append(f'\n') + selector = '
' + escape(current["name"]) + '
" + return selector, "\n".join(alternates) + + +class Node: + """Keep exact source spans so translating prose cannot reserialize code blocks.""" + + def __init__(self, tag, attrs, start, open_end, line): + self.tag, self.attrs, self.start, self.open_end = tag, dict(attrs), start, open_end + self.end_start, self.end, self.line = open_end, open_end, line + self.children = [] + self.parent = None + + +class Document(HTMLParser): + """Parse structure while retaining original start tags, text and source positions.""" + + def __init__(self, source): + super().__init__(convert_charrefs=False) + self.source = source + self.offsets = [0] + for match in re.finditer("\n", source): + self.offsets.append(match.end()) + self.root = Node("document", [], 0, 0, 1) + self.root.end = self.root.end_start = len(source) + self.stack, self.nodes = [self.root], [] + self.feed(source) + self.close() + if len(self.stack) != 1: + raise ValueError(f"Unclosed HTML element: {self.stack[-1].tag}") + + def position(self): + line, column = self.getpos() + return self.offsets[line - 1] + column + + def handle_starttag(self, tag, attrs): + start = self.position() + node = Node(tag, attrs, start, start + len(self.get_starttag_text()), self.getpos()[0]) + node.parent = self.stack[-1] + node.parent.children.append(node) + self.nodes.append(node) + if tag not in VOID: + self.stack.append(node) + + def handle_startendtag(self, tag, attrs): + self.handle_starttag(tag, attrs) + if tag not in VOID: + self.stack.pop() + + def handle_endtag(self, tag): + if len(self.stack) < 2 or self.stack[-1].tag != tag: + raise ValueError(f"Unbalanced HTML at line {self.getpos()[0]}: ") + node = self.stack.pop() + node.end_start = self.position() + node.end = self.source.index(">", node.end_start) + 1 + + def handle_data(self, data): + self.stack[-1].children.append((self.position(), self.position() + len(data))) + + def handle_entityref(self, name): + self.handle_data("&" + name + ";") + + def handle_charref(self, name): + self.handle_data("&#" + name + ";") + + +def skipped(node): + """Respect protected evidence and explicit exclusions throughout a subtree.""" + while node: + if node.tag in PROTECTED or "data-i18n-skip" in node.attrs or node.attrs.get("translate") == "no": + return True + node = node.parent + return False + + +def translatable(text): + """Leave identifiers, product names and numeric evidence as literal source.""" + literal = re.fullmatch(r"0x[0-9a-fA-F]+|code\[\d+\]\s*=\s*\d+|× pan_scale", text) + return bool(re.search(r"[a-zA-Z]", text)) and text not in LITERALS and not literal and not re.fullmatch(r"[\w./\\:-]+\.(?:exe|dll|js|json|html|asar|apk|zip|cpp|h|svg)", text, flags=re.IGNORECASE) + + +def inline(node): + return all(not isinstance(child, Node) or (child.tag in INLINE and inline(child)) for child in node.children) + + +def unit_text(document, node): + """Represent inline markup and code as named placeholders in a complete sentence.""" + slots, parts = {}, [] + + def slot(value): + key = f"ph{len(slots)}" + slots[key] = value + return "{" + key + "}" + + def visit(child): + if not isinstance(child, Node): + parts.append(unescape(document.source[child[0]:child[1]])) + elif child.tag in {"code", "kbd"} or "data-i18n-skip" in child.attrs or child.attrs.get("translate") == "no": + parts.append(slot(document.source[child.start:child.end])) + else: + parts.append(slot(document.source[child.start:child.open_end])) + for descendant in child.children: + visit(descendant) + if child.end > child.end_start: + parts.append(slot(document.source[child.end_start:child.end])) + for child in node.children: + visit(child) + return re.sub(r"\s+", " ", "".join(parts)).strip(), slots + + +def prose_units(source, path): + """Extract paragraph-sized units, or individual orphan text when structure requires it.""" + document = Document(source) + units = [] + + def context(start): + for name in ("sharing", "header", "footer"): + begin, end = source.find(f""), source.find(f"") + if begin >= 0 and begin < start < end: + return "shared" + return "page:" + path + + def visit(node): + if skipped(node) or node.tag in {"head", "document"}: + if node.tag == "document": + for child in node.children: + if isinstance(child, Node): + visit(child) + return + if node.tag in PROSE and inline(node) and node.children: + text, slots = unit_text(document, node) + if translatable(PLACEHOLDER.sub("", text).strip()): + units.append((context(node.start), text, slots, node.open_end, node.end_start, node.line)) + return + for child in node.children: + if isinstance(child, Node): + visit(child) + else: + raw = source[child[0]:child[1]] + text = re.sub(r"\s+", " ", unescape(raw)).strip() + if translatable(text): + units.append((context(child[0]), text, {}, child[0], child[1], source.count("\n", 0, child[0]) + 1)) + visit(document.root) + # The title is prose even though it lives in the head. + for node in document.nodes: + if node.tag == "title" and not skipped(node): + text, slots = unit_text(document, node) + if translatable(text): + units.append(("page:" + path, text, slots, node.open_end, node.end_start, node.line)) + return units + + +def attribute_units(source, path): + """Extract accessibility labels and authored metadata without translating URLs.""" + units = [] + document = Document(source) + for node in document.nodes: + if skipped(node): + continue + names = set(ATTRIBUTES) + if node.tag == "meta" and (node.attrs.get("name") == "description" or node.attrs.get("property") == "og:image:alt" or node.attrs.get("name") == "twitter:image:alt"): + names.add("content") + for name in names: + text = node.attrs.get(name) + if text and translatable(text): + context = "shared" if "" in source[:node.start] and "" not in source[:node.start] else "page:" + path + if name == "content" and node.attrs.get("name") != "description": + context = "shared" + units.append((context, text, {}, node, name)) + return units + + +def runtime_units(root): + """Extract the constrained t("literal", namedValues) authoring form directly.""" + yield "fallback", FALLBACK_NOTICE, "scripts/website_i18n.py", "" + site = root / "website/public" + for path in sorted((site / "assets").glob("*.js")): + if path.name == "i18n.js": # Owns t itself, rather than reader-facing calls. + continue + source = path.read_text(encoding="utf-8") + calls = list(re.finditer(r'\bt\(\s*("(?:[^"\\]|\\.)*")', source)) + if len(calls) != len(re.findall(r"\bt\(", source)): + raise ValueError(f'{path.name}: use t("one literal message", namedValues)') + script = path.relative_to(site).as_posix() + for call in calls: + yield script, json.loads(call[1]), "website/public/" + script, source.count("\n", 0, call.start()) + 1 + + +def read_runtime(root, page=None): + """Scope automatically extracted interaction messages to a page's scripts.""" + units = list(runtime_units(root)) + if page is None: + return list(dict.fromkeys(text for _, text, _, _ in units)) + site = root / "website/public" + scripts = set() + for node in Document(page.read_text(encoding="utf-8")).nodes: + if node.tag == "script" and node.attrs.get("src"): + reference = urlsplit(node.attrs["src"]) + if not reference.scheme and not reference.netloc: + scripts.add((page.parent / unquote(reference.path)).resolve().relative_to(site.resolve()).as_posix()) + return list(dict.fromkeys(text for script, text, _, _ in units if script in scripts)) + + +def source_catalog(root): + """Build a deterministic POT with source references and protected-placeholder notes.""" + site = root / "website/public" + catalog = polib.POFile(wrapwidth=88) + catalog.metadata = {"Project-Id-Version": "REA website", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit"} + entries = {} + + def add(context, text, slots, reference, line): + key = context, text + if key not in entries: + entry = polib.POEntry(msgctxt=context, msgid=text, msgstr="", flags=["python-brace-format"] if PLACEHOLDER.search(text) else []) + entry.comment = "\n".join(f"{{{key}}}: {re.sub(r'\s+', ' ', value)}" for key, value in slots.items()) + entries[key] = entry + catalog.append(entry) + occurrence = (reference, str(line)) + if occurrence not in entries[key].occurrences: + entries[key].occurrences.append(occurrence) + + for path in reading_pages(site): + relative = path.relative_to(site).as_posix() + source = path.read_text(encoding="utf-8") + for context, text, slots, _, _, line in prose_units(source, relative): + add(context, text, slots, "website/public/" + relative, line) + for context, text, slots, node, _ in attribute_units(source, relative): + add(context, text, slots, "website/public/" + relative, node.line) + for _, text, reference, line in runtime_units(root): + add("runtime", text, {}, reference, line) + for path in sorted((site / "assets/figures").glob("*.svg")): + source = path.read_text(encoding="utf-8") + for node in Document(source).nodes: + if node.tag in {"text", "title", "desc"} and not any(isinstance(child, Node) for child in node.children): + text = unescape(source[node.open_end:node.end_start]).strip() + if translatable(text): + add("figure:" + path.name, text, {}, "website/public/assets/figures/" + path.name, node.line) + return catalog + + +def extract_catalogs(root, check=False): + """Refresh standard catalogs, preserving translations/comments and archiving removed text.""" + inventory = languages(root) + template = source_catalog(root) + directory = root / "website/locales" + target = directory / "messages.pot" + changed = [] + if not target.exists() or target.read_text(encoding="utf-8") != str(template): + changed.append(target) + if not check: + template.save(target) + expected = {(entry.msgctxt, entry.msgid) for entry in template} + for language in inventory[1:]: + path = directory / language["code"] / "messages.po" + catalog = polib.pofile(path, encoding="utf-8") if path.exists() else polib.POFile(wrapwidth=88) + active = {(entry.msgctxt, entry.msgid) for entry in catalog if not entry.obsolete} + if active != expected: + changed.append(path) + if not check: + catalog.merge(template) + catalog.metadata.update(template.metadata) + catalog.metadata["Language"] = language["code"] + path.parent.mkdir(parents=True, exist_ok=True) + catalog.save(path) + if check and changed: + raise ValueError("Translation sources changed: " + ", ".join(str(path.relative_to(root)) for path in changed[:8]) + ". Run python3 scripts/website.py translations extract, then update the affected msgstr entries.") + print(f"{'Checked' if check else 'Extracted'} {len(template)} source messages for {len(inventory) - 1} translation catalogs.") + return template + + +def fields(text): + """Validate named format fields without accepting conversion or format instructions.""" + result = [] + for _, name, specification, conversion in Formatter().parse(text): + if name is not None: + if not re.fullmatch(r"[a-zA-Z][a-zA-Z0-9_]*", name) or specification or conversion: + raise ValueError(f"Unsupported translation placeholder: {name}") + result.append(name) + return Counter(result) + + +def checked_catalog(root, language, template, strict=False): + """Reject malformed catalogs and report missing or fuzzy messages independently.""" + path = root / "website/locales" / language["code"] / "messages.po" + catalog = polib.pofile(path, encoding="utf-8", check_for_duplicates=True) + if catalog.metadata.get("Language") != language["code"]: + raise ValueError(f"{path}: wrong Language header") + messages, missing = {}, [] + source = {(entry.msgctxt, entry.msgid): entry for entry in template} + for entry in catalog: + if entry.obsolete: + continue + key = entry.msgctxt, entry.msgid + if key not in source: + raise ValueError(f"{path}: obsolete source still active: {entry.msgid[:80]}") + if entry.msgid_plural or entry.msgstr_plural: + raise ValueError(f"{path}: use the declared named-count messages, not undeclared plural forms") + if not entry.msgstr.strip() or "fuzzy" in entry.flags: + missing.append(key) + continue + if fields(entry.msgid) != fields(entry.msgstr): + raise ValueError(f"{path}: translation changed placeholders: {entry.msgid[:100]}") + slots = dict(re.findall(r"^\{(ph\d+)\}: (.*)$", source[key].comment, re.MULTILINE)) + if slots: + fragment = escape(entry.msgstr, quote=False) + for name, value in slots.items(): + fragment = fragment.replace("{" + name + "}", value) + try: + Document("
" + fragment + "
") + except ValueError as error: + raise ValueError(f"{path}: {entry.msgctxt}: invalid inline markup in {entry.msgid[:100]!r}: {error}") from error + messages[key] = entry.msgstr.strip() + missing.extend(key for key in source if key not in messages and key not in missing) + if strict and missing: + raise ValueError(f"{path}: {len(missing)} untranslated/fuzzy messages; first: {missing[0][1][:100]}") + return messages, missing + + +def replace_attribute(raw, name, value): + """Change one parsed start-tag attribute without modifying adjacent markup.""" + pattern = re.compile(r"(\s" + re.escape(name) + r"\s*=\s*)([\"'])(.*?)\2", re.DOTALL | re.IGNORECASE) + updated, count = pattern.subn(lambda match: match[1] + '"' + escape(value, quote=True) + '"', raw) + if count != 1: + raise ValueError(f"Expected one quoted {name} attribute: {raw[:100]}") + return updated + + +def apply_edits(source, edits): + """Apply non-overlapping spans from the end, preserving untouched evidence byte-for-byte.""" + end = len(source) + for start, stop, replacement in sorted(edits, reverse=True): + if stop > end: + raise ValueError("Overlapping translation spans") + source = source[:start] + replacement + source[stop:] + end = start + return source + + +def render_prose(source, relative, messages): + """Translate complete units and restore validated original inline markup.""" + edits = [] + for context, text, slots, start, end, _ in prose_units(source, relative): + translated = messages[(context, text)] + if fields(text) != fields(translated): + raise ValueError(f"{relative}: changed placeholders") + rendered = escape(translated, quote=False) + for key, value in slots.items(): + rendered = rendered.replace("{" + key + "}", value) + # Check translator-reordered markup before accepting it into the document. + try: + Document("
" + rendered + "
") + except ValueError as error: + raise ValueError(f"{relative}: invalid translated markup in {text[:100]!r}: {error}") from error + raw = source[start:end] + leading = re.match(r"\s*", raw)[0] + trailing = re.search(r"\s*$", raw)[0] + edits.append((start, end, leading + rendered + trailing)) + return apply_edits(source, edits) + + +def relative_reference(reference, source_path, output_path, site, available, code, figures, language_link=False): + """Resolve links once, keeping assets shared and reading links in the selected edition.""" + parsed = urlsplit(reference) + if parsed.scheme or parsed.netloc or not parsed.path: + return reference + target = (source_path.parent / unquote(parsed.path)).resolve() + if not target.is_relative_to(site.resolve()): + raise ValueError(f"Reference leaves the website: {reference}") + relative = target.relative_to(site.resolve()) + lookup = relative / "index.html" if target.is_dir() else relative + if not language_link and lookup.as_posix() in available and code != "en": + relative = Path(code) / relative + if relative.as_posix() in figures and code != "en": + relative = Path("assets/localized") / code / relative.relative_to("assets") + destination = os.path.relpath(site / relative, output_path.parent).replace(os.sep, "/") + if parsed.path.endswith("/") and not destination.endswith("/"): + destination += "/" + return urlunsplit(("", "", quote(destination, safe="/"), parsed.query, parsed.fragment)) + + +def replace_language_markup(source, root, relative, code, available): + """Derive selectors and alternates from the same page-level completeness decision.""" + selector, alternates = language_markup(root, relative, code, available) + document = Document(source) + picker = next(node for node in document.nodes if node.tag == "details" and node.attrs.get("class") == "language-picker") + source = apply_edits(source, [(picker.start, picker.end, selector)]) + pattern = r"().*?()" + return re.sub(pattern, lambda match: match[1] + "\n" + alternates + "\n" + match[2], source, flags=re.DOTALL) + + +def render_page(root, source_path, language, messages, available, figures, page_languages): + """Create one complete translation, preserving routes, code, IDs and reference data.""" + from website import SITE_ORIGIN, PageMetadata, page_url + site = root / "website/public" + relative = source_path.relative_to(site).as_posix() + code = language["code"] + output_path = site / localized_path(relative, code) + source = source_path.read_text(encoding="utf-8") + source = render_prose(source, relative, messages) + metadata = PageMetadata() + # Translate attributes separately; units inside inline markup keep their source tags. + replacements = {} + for context, text, _, node, attribute in attribute_units(source, relative): + raw = replacements.get(node.start, source[node.start:node.open_end]) + replacements[node.start] = replace_attribute(raw, attribute, messages[(context, text)]) + source = apply_edits(source, [(node.start, node.open_end, replacements[node.start]) for node in Document(source).nodes if node.start in replacements]) + metadata.feed(source) + canonical = page_url(site, output_path) + replacements = [] + for node in Document(source).nodes: + raw = source[node.start:node.open_end] + if node.tag == "html": + raw = replace_attribute(raw, "lang", code) + raw = raw[:-1] + f' dir="{language["dir"]}">' + if node.tag == "meta": + key = node.attrs.get("property") or node.attrs.get("name") + if key in {"og:title", "twitter:title"}: + raw = replace_attribute(raw, "content", metadata.titles[0]) + elif key in {"og:description", "twitter:description"}: + raw = replace_attribute(raw, "content", metadata.descriptions[0]) + elif key == "og:url": + raw = replace_attribute(raw, "content", canonical) + for attribute in ("href", "src"): + if attribute not in node.attrs: + continue + reference = node.attrs[attribute] + if node.tag == "link" and node.attrs.get("rel") == "canonical": + value = canonical + else: + value = relative_reference(reference, source_path, output_path, site, available, code, figures, "data-language" in node.attrs) + raw = replace_attribute(raw, attribute, value) + if raw != source[node.start:node.open_end]: + replacements.append((node.start, node.open_end, raw)) + source = apply_edits(source, replacements) + source = replace_language_markup(source, root, relative, code, page_languages) + runtime = {text: messages[("runtime", text)] for text in read_runtime(root, source_path)} + payload = json.dumps(runtime, ensure_ascii=False).replace("<", "\\u003c").replace("&", "\\u0026") + source = source.replace("", f'\n ') + return source + + +def required_messages(root, path, template): + """Bind a page to its prose, attributes, runtime labels and referenced figures.""" + site = root / "website/public" + relative = path.relative_to(site).as_posix() + source = path.read_text(encoding="utf-8") + required = {(unit[0], unit[1]) for unit in prose_units(source, relative)} + required.update((unit[0], unit[1]) for unit in attribute_units(source, relative)) + required.update(("runtime", text) for text in read_runtime(root, path)) + for node in Document(source).nodes: + reference = node.attrs.get("src") + if reference and not urlsplit(reference).scheme: + target = (path.parent / unquote(urlsplit(reference).path)).resolve() + if target.parent == (site / "assets/figures").resolve(): + required.update((entry.msgctxt, entry.msgid) for entry in template if entry.msgctxt == "figure:" + target.name) + return required + + +def render_fallback(root, path, language, page_languages, messages): + """Expose a clear English fallback instead of a stale or partially translated article.""" + from website import page_url + site = root / "website/public" + relative = path.relative_to(site).as_posix() + code = language["code"] + output_path = site / localized_path(relative, code) + source = path.read_text(encoding="utf-8") + edits = [] + canonical = page_url(site, output_path) + for node in Document(source).nodes: + raw = source[node.start:node.open_end] + for attribute in ("href", "src"): + if attribute in node.attrs: + value = canonical if node.tag == "link" and node.attrs.get("rel") == "canonical" else relative_reference(node.attrs[attribute], path, output_path, site, set(), code, set(), "data-language" in node.attrs) + raw = replace_attribute(raw, attribute, value) + if node.tag == "meta" and node.attrs.get("property") == "og:url": + raw = replace_attribute(raw, "content", canonical) + if node.tag == "html": + raw = raw[:-1] + ' data-translation-fallback="true">' + if raw != source[node.start:node.open_end]: + edits.append((node.start, node.open_end, raw)) + source = apply_edits(source, edits) + source = source.replace("", '\n ') + source = replace_language_markup(source, root, relative, code, page_languages) + notice = messages.get(("runtime", FALLBACK_NOTICE), FALLBACK_NOTICE) + notice_lang = code if ("runtime", FALLBACK_NOTICE) in messages else "en" + main = next(node for node in Document(source).nodes if node.tag == "main") + source = source[:main.open_end] + f'' + source[main.open_end:] + return source + + +def build_translations(root, destination, finalize=None): + """Build one clean publish directory from English sources and versioned PO catalogs.""" + site = root / "website/public" + if destination.resolve() != (root / "website/_site").resolve(): + raise ValueError("Generated output must be website/_site") + template = extract_catalogs(root, check=True) + inventory = languages(root) + pages = reading_pages(site) + catalogs = {language["code"]: checked_catalog(root, language, template)[0] for language in inventory[1:]} + required = {path.relative_to(site).as_posix(): required_messages(root, path, template) for path in pages} + page_languages = {relative: {"en"} | {code for code, messages in catalogs.items() if keys <= messages.keys()} for relative, keys in required.items()} + # Finish rendering before replacing the previous preview/publish artifact. + with TemporaryDirectory(prefix=".i18n-", dir=root / "website") as directory: + staging = Path(directory) / "site" + shutil.copytree(site, staging, ignore=shutil.ignore_patterns("__pycache__")) + for path in pages: + relative = path.relative_to(site).as_posix() + output = staging / relative + output.write_text(replace_language_markup(path.read_text(encoding="utf-8"), root, relative, "en", page_languages[relative]), encoding="utf-8") + for language in inventory[1:]: + messages = catalogs[language["code"]] + available = {relative for relative, codes in page_languages.items() if language["code"] in codes} + figures = set() + for path in sorted((site / "assets/figures").glob("*.svg")): + source = path.read_text(encoding="utf-8") + edits = [] + for node in Document(source).nodes: + if node.tag in {"text", "title", "desc"} and not any(isinstance(child, Node) for child in node.children): + text = unescape(source[node.open_end:node.end_start]).strip() + if translatable(text) and ("figure:" + path.name, text) in messages: + translated = messages[("figure:" + path.name, text)] + edits.append((node.open_end, node.end_start, escape(translated, quote=False))) + translated = apply_edits(source, edits) + output = staging / "assets/localized" / language["code"] / path.relative_to(site / "assets") + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(translated, encoding="utf-8") + figures.add(path.relative_to(site).as_posix()) + for path in pages: + relative = path.relative_to(site).as_posix() + output = staging / localized_path(relative, language["code"]) + output.parent.mkdir(parents=True, exist_ok=True) + rendered = render_page(root, path, language, messages, available, figures, page_languages[relative]) if relative in available else render_fallback(root, path, language, page_languages[relative], messages) + output.write_text(rendered, encoding="utf-8") + fallback_count = len(pages) - len(available) + if fallback_count: + print(f"{language['code']}: {fallback_count} English fallback pages, marked noindex; run translations status.") + print(f"Prepared {len(pages) * len(inventory)} reading pages in {len(inventory)} languages.") + if finalize is not None: + finalize(staging) + if destination.exists(): + shutil.rmtree(destination) + staging.rename(destination) diff --git a/tests/boundary/filesystem/ciChangeScope.test.ts b/tests/boundary/filesystem/ciChangeScope.test.ts index 9de12fcef..13c4e4b95 100644 --- a/tests/boundary/filesystem/ciChangeScope.test.ts +++ b/tests/boundary/filesystem/ciChangeScope.test.ts @@ -214,6 +214,16 @@ it.each([ { code: true, runtime: false, browser: false, package: false }, ], ["website/src/index.ts", { code: false, website: true, package: false }], + [ + "website/locales/zh-CN/messages.po", + { code: false, website: true, package: false }, + ], + ["scripts/website_i18n.py", { code: false, website: true, package: false }], + ["README_ja.md", { code: false, docs: true, website: true, package: false }], + [ + ".github/workflows/website-pages.yml", + { code: false, website: true, package: false }, + ], [ "src/process/ProviderProcess.ts", { code: true, package: true, evm: true, browser: true }, diff --git a/website/AGENTS.md b/website/AGENTS.md index 92824a294..37c9c0f50 100644 --- a/website/AGENTS.md +++ b/website/AGENTS.md @@ -8,8 +8,18 @@ Read [README.md](README.md) and [style-guide.md](style-guide.md) before changing website content, layout or figures. Use [figures.md](figures.md) and `evidence/` for asset notes and the source of case-study claims. -- Write English, direct headings and concrete instructions. Each paragraph - should explain a new fact or action. +- Author source pages in English. Use direct headings and concrete instructions + in every language. Each paragraph should explain a new fact or action. +- Follow [locales/README.md](locales/README.md) for translations. Edit standard PO + catalogs, run `translations extract` after changing source text, and review + translated setup prompts, terminology and case-study reasoning for readability. + Keep code, commands, URLs, paths and Evidence unchanged. Use inline `code` or + `translate="no"` for executable literals inside a translated sentence. Preserve + named placeholders, source references and reviewer comments. Generated language + HTML belongs in ignored `_site/`; do not author duplicate translated pages. +- Keep the language inventory aligned with README editions. Review long headings, + figures and right-to-left layouts. A missing or fuzzy translation produces a + labeled, nonindexable English fallback; do not present stale text as current. - Reuse the shared styles, prompts, figures and code-step components. Keep a case study focused on one question, with further examples in native details. - Edit shared header, footer and sharing markup in `templates/`; run diff --git a/website/README.md b/website/README.md index bcd3ce5bc..5df87b875 100644 --- a/website/README.md +++ b/website/README.md @@ -4,12 +4,15 @@ > > — N0zoM1z0 -An English static website with explanatory figures, worked guides and Aegis, DX-Ball, Notion, TH04 and CTF investigations. -The public files are in `website/public/`. The site uses HTML, CSS and small +An English website with translated editions in every README language, explanatory +figures, worked guides and Aegis, DX-Ball, Notion, TH04 and CTF investigations. +English sources are in `website/public/`; translations are standard gettext PO +catalogs in `website/locales/`. The site uses HTML, CSS and small scripts for copying code, following code comparisons and playing the dinosaur speed reconstruction. Small Python commands maintain shared HTML, prepare downloads and check the site. There is no frontend framework, bundler or npm -dependency. The checked-in HTML works as ordinary static files. +dependency. A build generates all editions in `website/_site/`. The resulting +files work as ordinary static files; language switching needs no JavaScript. [style-guide.md](style-guide.md) explains the writing, page structure, figures, visual system and review process. Read it before adding or revising a page. @@ -26,6 +29,8 @@ python3 scripts/website.py serve ``` Open . Refresh the browser after editing a file. +After editing source HTML or a catalog, run `python3 scripts/prepare-website.py` +to rebuild the preview. `serve` prepares the site once when it starts. Keep the virtual environment active when preparing assets. CairoSVG needs the native Cairo library; the sharing card uses DejaVu Sans. On Debian or Ubuntu, install them with `sudo apt-get install libcairo2 fonts-dejavu-core`. For other @@ -49,6 +54,14 @@ applies to every page. | Main navigation | `NAVIGATION` in `scripts/website.py` | `sync`, then `check` | | Header, social links or footer | `templates/header.html.tmpl` or `templates/footer.html.tmpl` | `sync`, then `check` | | Shared link previews | `templates/sharing.html.tmpl` or `public/assets/social-card.svg` | `sync`, then `check` | +| Translation | `locales//messages.po` | `translations check`, then `check` | + +After changing English text, run `python3 scripts/website.py translations extract` +before `check`. Existing translations and reviewer comments survive extraction; +new or changed sentences need updated translations. See +[the translation guide](locales/README.md) for the editing workflow, terminology +and the handling of pages whose translations are being updated. Never edit +generated HTML in `_site/`. Create a reading page with: @@ -83,7 +96,8 @@ Before opening a PR: python3 scripts/website.py check ``` -This checks shared HTML without rewriting it, prepares generated assets, and +This checks shared HTML and translation sources without rewriting them, prepares +all language editions and generated assets, and checks page links, copied-text targets, repository documentation links, SEO metadata and the publishing configuration. It also runs the maintenance regressions. A stale shared region fails with the command needed to fix it. @@ -145,8 +159,9 @@ Graph and Twitter fields and the canonical from those inputs and the file's route. Search results and link previews should follow the same clear, concise writing standard as the page. -`scripts/prepare-website.py` scans `public/**/*.html` and generates -`public/sitemap.xml` with absolute rea.tools URLs. An `index.html` maps to its +`scripts/prepare-website.py` renders `public/` and the PO catalogs into `_site/`, +then scans `_site/**/*.html` and generates `_site/sitemap.xml` with absolute +rea.tools URLs. An `index.html` maps to its directory route; other HTML filenames retain their extension. Pages with `noindex` or `none` in a head `robots` or `googlebot` meta directive are excluded. The two Notes example applications use `noindex`; their guides and the dinosaur @@ -201,7 +216,7 @@ guide. Add a figure when it contributes a useful explanation; an opening flow is optional. Case studies remain focused on one inspected behavior. Keep engine details in supporting references unless they explain a relevant decision. -The Touhou article is an English essay. Its provenance, +The Touhou article is authored in English and translated through the same catalogs. Its provenance, quoted README passage and milestone counting rules are in [evidence/touhou-reconstruction-method.md](evidence/touhou-reconstruction-method.md). The completed text has normal search metadata and is included in the generated @@ -226,7 +241,7 @@ The Electron guide offers one ZIP containing the six source files under `notes-example/`. `scripts/prepare-website.py` generates this download from an explicit file list, with fixed timestamps and permissions. The ZIP is ignored by Git; website checks and each manual publication regenerate it before checking -and uploading the public directory. The verifier checks that its entries match +and uploading `_site/`. The verifier checks that its entries match the current source and contain no extra files. The first-investigation page uses this same ZIP. Its prompt lets the agent @@ -371,9 +386,9 @@ solver constants and evidence notes aligned when changing this case. ## Cloudflare Workers -`wrangler.toml` serves `website/public/` through Workers Static Assets. There is -no Worker script or frontend build. Before a preview or deployment, Wrangler -runs the existing Python scripts to prepare the example ZIP and verify the +`wrangler.toml` serves `website/_site/` through Workers Static Assets. There is +no Worker script or frontend framework. Before a preview or deployment, Wrangler +runs the Python scripts to build the language editions, prepare the example ZIP and verify the website. Node.js and Python 3 must be available; the commands below use a pinned Wrangler version without adding it to REA's package dependencies. @@ -444,7 +459,7 @@ Local Wrangler commands above publish only the separate preview Worker. ## Synchronized production publishing -`.github/workflows/website-pages.yml` prepares `website/public` once and deploys +`.github/workflows/website-pages.yml` prepares `website/_site` once and deploys the same artifact to Cloudflare (`rea.tools`) and GitHub Pages. It is the sole production publisher, manually triggered and restricted to `main`; ordinary pushes and pull requests do not publish the site. diff --git a/website/locales/README.md b/website/locales/README.md new file mode 100644 index 000000000..40d25cd52 --- /dev/null +++ b/website/locales/README.md @@ -0,0 +1,136 @@ +# Website translations + +> A good website is like a good paper: easy to follow, clear and concise, with a clean, refined presentation. +> +> — N0zoM1z0 + +The same standard applies in every language. A translation should help someone +understand the example and try it. Clear, accurate wording matters more than a +literal imitation of English sentences. + +## Edit a translation + +Use the Python environment in [the website README](../README.md). Pick a language +from `languages.json`, then edit its `messages.po` in a text editor, Poedit or +another gettext editor. Each entry includes its source page and line: + +```po +#: website/public/faq/index.html:200 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "如何安装 REA?" +``` + +Change `msgstr`. Keep `msgid` and `msgctxt`. Add reviewer notes with `#` comments +when useful. Shared navigation uses the `shared` context; page-specific wording +has its own context. The same English sentence may need different wording in a +different case study. + +```sh +python3 scripts/website.py translations status --language zh-CN +python3 scripts/website.py translations check --language zh-CN +python3 scripts/website.py serve +``` + +Open . The language selector opens the equivalent +page in another edition. Check the page you edited, its figures and its copy +buttons. Rebuild a running preview with `python3 scripts/prepare-website.py`. +Before submitting a change, run `python3 scripts/website.py check`. +Use `translations check --strict` to require every message to be translated. + +## Keep complete sentences and protected evidence + +Paragraphs remain complete translation units. Inline emphasis, links, code and +literal commands use named placeholders: + +```po +#. {ph0}: +#. {ph1}: +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "已经了解逆向工程?{ph0}直接看分析指南 →{ph1}" +``` + +Move a linked or emphasized phrase when your language needs a different sentence +order. Keep its opening and closing placeholders around that phrase. Preserve +each placeholder exactly once per occurrence. Checks reject missing placeholders +and broken tag nesting. Interaction messages use names such as `{speed}` and +`{seconds}`; keep those names too. + +Code blocks, inline code and `translate="no"` spans are copied from the source. +Commands, filenames, paths, URLs, hashes and observed values must retain their +meaning. Never translate `npx rea-agents@latest setup` into prose. Preserve product +names such as REA, Codex, Claude Code, Ghidra and Homebrew. Explain technical terms +in the surrounding text when needed. + +In these articles, an **agent** is the reader's AI coding assistant. A **call** is +a function call; a **library** is a software library. A **port** means adapting a +program to another platform. An **oracle** is a concrete reference or checker +used to verify a reconstruction. Translate those meanings rather than unrelated +dictionary senses. Distinguish native machine-code analysis from local analysis, +and .NET assemblies from assembly instructions. + +Review the question, REA's findings, the agent's reasoning and the verification +result together. Keep recorded versions, milestone counts, unknowns and source +attribution accurate. Blog essays can use a personal voice. Translated quotes +should be identifiable as translations and retain a link to the original. + +## Update the English source + +```sh +python3 scripts/website.py sync +python3 scripts/website.py translations extract +python3 scripts/website.py translations status +python3 scripts/website.py check +``` + +Extraction generates `messages.pot` and merges it into each PO catalog. Unchanged +sentences keep their translations and reviewer comments. Changed sentences start +empty; removed entries are retained as obsolete translation memory. Nothing +silently accepts a guessed match. An editor's `fuzzy` entry remains pending until +someone reviews it and removes the flag. + +If a page needs a missing or fuzzy message, its language route temporarily shows +the complete English page with a visible notice. It has `noindex` and stays out +of the sitemap and translated `hreflang` alternatives. Links from ready pages +lead to ready editions or the English source. Completing the required entries +restores the translated page and its search metadata at the next build. Runtime +messages affect only pages that use their script; an untranslated dinosaur status +does not turn the FAQ into an English fallback. + +`public/` remains the authored English site. `_site/` is disposable generated +output. The sitemap discovers every ready edition automatically. Pages and +Cloudflare publish this same artifact. No translation API runs during a build +or in a reader's browser. + +Figure labels and accessibility descriptions are included in the catalogs under +`figure:`. Keep labels short enough for the diagram. Interaction text +is extracted directly from `t("message")` calls in `public/assets/*.js`, with +source locations in the catalog. Keep named values instead of concatenating +translated fragments. + +## Language coverage and initial translations + +`languages.json` lists the same editions as the root README, with native names, +standard language tags and text direction. English keeps its existing routes; +other editions use a language prefix such as `/ja/` or `/pt-BR/`. Arabic and +Persian use right-to-left page layouts; code and numeric demos remain left to +right. The two Notes target applications and the downloadable source archive +remain the original investigation inputs. + +The first catalogs started with machine-assisted drafts. They include editorial +corrections to navigation, prompts and technical terminology. Traditional Chinese +started from the Simplified Chinese draft and is maintained independently. +Further language review and more natural phrasing are welcome. Submit the PO changes with +the page and language you checked; a screenshot can help explain a layout issue. + +## Why gettext + +PO catalogs have source references, reviewer comments and explicit pending +translations. They can be edited locally and can later be connected to Weblate +without replacing the site's translation format. This keeps one authored layout +and a small offline build instead of maintaining nineteen HTML trees. + +See [GNU gettext's PO format](https://www.gnu.org/software/gettext/manual/html_node/PO-File-Entries.html), +[Weblate's translation workflows](https://docs.weblate.org/en/latest/workflows.html) +and [Google's localized-page guidance](https://developers.google.com/search/docs/specialty/international/localized-versions). diff --git a/website/locales/ar/messages.po b/website/locales/ar/messages.po new file mode 100644 index 000000000..1bc952ff9 --- /dev/null +++ b/website/locales/ar/messages.po @@ -0,0 +1,13086 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}الرئيسية{ph1} / المدونة" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "مدونة." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "أفكار حول الهندسة العكسية." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "لعبة إعادة الإعمار{ph0}مقال" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "الثورة الصناعية في الهندسة العكسية" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"ما دليل إعادة تعمير TH08, TH095 و TH04 علمني عن وكلاء والتحقق المعرفة أن " +"المركبات عبر المشاريع." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "اقرأ المقال" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "بواسطة N0zoM1z0 * 10 أكتوبر 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} أعلى" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA مدونة-أفكار حول الهندسة العكسية" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"أفكار حول الهندسة العكسية ، بالاعتماد على الخبرة العملية مع REA وكلاء منظمة " +"العفو الدولية." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "REA - اكتشف كيف يعمل البرنامج. الهندسة العكسية مع مساعدك البرمجي." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "الصفحة الرئيسية لـ REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "التنقل الرئيسي" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA على GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "انضم إلى REA على Discord" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "تابع REA على X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}الرئيسية{ph1} / {ph2}المدونة{ph3} / إعادة إعمار توهو" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "مقال * إعادة إعمار توهو" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "الثورة الصناعية في الهندسة العكسية." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "بواسطة N0zoM1z0 * 10 أكتوبر 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "أهم الأفكار" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}امنح الوكلاء استقلالية في التحقيق.{ph1} حدد هدفا واضحا ومعايير قبول ، " +"ثم دع الوكيل يقرر ما يجب تجربته بعد ذلك." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}استخدام مستودع وبوابة كما الذاكرة العاملة.{ph1} الحفاظ على المنطق مع " +"التعليمات البرمجية. نقاط التفتيش بوابة السماح للدورة المقبلة تستمر بعد " +"انتهاء المحادثة." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}دع الأدلة تقرر ما تدعيه.{ph1} التفسير الواثق لا يزال بحاجة إلى " +"الاختبار. \"غير معروف\" هو إجابة صحيحة عندما تكون الأدلة غير مكتملة." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}اختبار مرجع التحقق (أوراكل) أيضا.{ph1} جرب الحالات التي يجب أن ترفضها. " +"إذا كان يفتقد خلل ، إعادة النظر في النتائج السابقة التي تعتمد على ذلك." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}نحن في الأيام الأولى للثورة الصناعية في ري.{ph1} الأساليب لا تزال " +"تتشكل. هناك الكثير من اليسار لاستكشاف." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "كيف تجربة المركبات" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}الاتجاه البشري{ph1} * الهدف ومعايير القبول" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "الاستقلالية" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "المساعد" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "اختر تجربة.{ph0}اقتراح فرضية." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "التحقق" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "مرجع التحقق" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "اختبار ضد أ{ph0}مرجع ملموس." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "مستودع الكود" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "ذاكرة العمل" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "رمز ، دليل,{ph0}الشيكات والدروس." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "عدم التطابق{ph0}{ph1}مراجعة الفرضية{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "أفضل{ph0}{ph1}نقطة البداية{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "إعادة الاستخدام" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}تمريرة{ph1} * الحفاظ على النتيجة والأدلة" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"كل مشروع يترك التالي مع نقطة انطلاق أفضل. يتضمن ذلك إصلاح الشيكات عندما " +"نكتشف فجوة." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "في هذه المقالة" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}أغسطس 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0}TH08: استمرار{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}نهجين{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0}TH095: يضاعف{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0}TH04: عبر البنى{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}من الدقيق للقراءة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}التحول الصناعي{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}ما يصبح ممكنا{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "ما الذي تغير في أغسطس 2026" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"قبل هذا العمل ، كنت قد فعلت الكثير من الهندسة العكسية اليدوية. وأود أن تفقد " +"وظيفة حتى كان لي تفسيرا ، ثم اختبار هذا التفسير ضد البرنامج. يعني الحصول على" +" مزيد من قضاء المزيد من وقتي في الوظيفة التالية. كان يعني أيضا الاحتفاظ " +"بصورة كبيرة بشكل متزايد في رأسي." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"معظم عملي إعادة على الألعاب. أقوم بإعادة بنائها حتى يمكن فهم سلوكهم ونقله في" +" النهاية إلى منفذ برنامج أو تعديل. هذه هي التجربة وراء هذا المقال. يمكن أن " +"تكون الطريقة مفيدة في مكان آخر ، ولكن يحتاج كل حقل إلى تحديد ما يمكنه التحقق" +" منه مقابل مرجع موثوق." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"في أغسطس 2026 ، بدأت استكشاف إعادة يحركها وكيل على محمل الجد. أردت أن أرى " +"إلى أي مدى يمكن للوكيل الوصول إلى البرنامج وأدوات التطوير العادية. أعطاني " +"إعادة الإعمار توهو مشروع كبير لمعرفة ذلك." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"كان التقدم المبكر مذهلا. يمكن أن يستمر التحقيق في التحرك دون أن أختار كل " +"خطوة على حدة. قد تؤدي المقارنة الفاشلة إلى إرسال الوكيل إلى وظيفة استدعاء " +"أخرى. يمكن أن يكتب تشخيصا صغيرا ويستخدم النتيجة لتحديد ما يجب تجربته بعد " +"ذلك. إن إعطائها تلك الحرية أحدثت فرقا: يمكنني أن أنفق المزيد من الاهتمام على" +" اتجاه المشروع وعلى ما إذا كانت الشيكات جديرة بالثقة." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"حصلت على وتيرة انتباهي أولا. ثم بدأت أتساءل ما الذي سيبقى بعد المشروع " +"الحالي. هل ستستفيد اللعبة التالية من كل ما تعلمناه للتو?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: البناء على العمل البشري" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0}TH08{ph1}، ليلة لا يفنى ، كما بدأت استمرارا لل {ph2}GensokyoClubإعادة " +"الإعمار{ph3}. أعطاني مصدرها العام أساسا كبيرا. جاء مع معرفة البناء وتاريخ " +"المساهمات التي حافظت عليها في الاستمرار." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"ينتهي التاريخ المستورد عند نقطة التفتيش العامة في 10 أغسطس. بدأ استمراري " +"المستقل في 13 أغسطس. بحلول 19 أغسطس ، سجل دفتر الأستاذ مصدرا لجميع وظائف " +"اللعبة المحددة البالغ عددها 1107 وظيفة." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"للعب Linux تم تنفيذ ميناء إعادة الإعمار في 24 أغسطس ، بعد حوالي أحد عشر يوما" +" من بدء الاستمرار. تبع ذلك إصدار ويب. الأم Linux وصل إصدار 64 بت في 30 " +"أغسطس." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"ما أدهشني هو أن العمل قد وصل إلى برنامج يمكن للناس تشغيله. يتطلب الوصول إلى " +"هناك متابعة المشكلات التي تتجاوز الوظيفة الفردية. حتى عندما تبدو وظيفتان " +"صحيحتان في عزلة ، يمكنهما عن طريق الخطأ استخدام نسخ منفصلة من الحالة التي " +"كان ينبغي مشاركتها." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"هذا جعل الشيكات المرجعية مركزية للعمل. أنا أدعوهم {ph0}مراجع التحقق " +"(أوراكل){ph1}. يمكن أن تخبرنا مقارنة الكود ما إذا كانت الدالة المعاد بناؤها " +"تعيد إنتاج التعليمات الأصلية. يمكن أن يخبرنا فحص وقت التشغيل ما إذا كان " +"المسار الذي تم ممارسته يصل إلى الحالة المتوقعة. يقترح الوكيل تفسيرا ويختبره " +"؛ عدم التطابق يعطيها شيئا محددا للتحقيق فيه." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "تطابق تام مع ثابت خاطئ" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"أوراكل هو برنامج كتب شخص ما. TH08 أعطاني تذكير واضح كم يمكن أن تعتمد على هذا" +" البرنامج." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"في سبتمبر ، أدى خطأ تم الإبلاغ عنه بواسطة منفذ تبديل المصب إلى التجميع " +"التلقائي للعناصر. فحص المصدر المعاد بناؤه قوة اللاعب ضد {ph0}. الأصل " +"المستخدم {ph1}، الحد الأقصى-عتبة الطاقة." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"الطاقة العادية غير سلبية ، لذلك كان فحص الطاقة المعاد بناؤه راضيا دائما بشكل" +" فعال. فوق خط التجميع ، يمكن للعبة جذب العناصر دون الحاجة إلى أقصى طاقة. " +"الاستثناءات الأخرى في الحالة كانت صحيحة. هذا ثابت واحد غير السلوك." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}ومع ذلك ، فإن الوظيفة قد اجتازت بالفعل المقارنة الدقيقة.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"إعادة بناء يمكن وضع ثابت في عنوان مختلف. استحوذت أداة المقارنة على ذلك عن " +"طريق ضبط العناوين في التعليمات المجمعة قبل مقارنتها بالأصل. لكنها لم تتحقق " +"أبدا من قيمة الفاصلة العائمة المخزنة على العنوان المشار إليه." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"ترك ذلك حفرة في الشيك. يمكن أن يشير إلى التعليمات التي أعيد بناؤها في الأصل " +"{ph0} في حين أن المصدر لا يزال قال {ph1}. بايت التعليمات المتطابقة. المصدر " +"يعني شيئا مختلفا." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"ال {ph0}إصلاح 2 سبتمبر{ph1} قام بتصحيح المصدر وجعل المقارنة تحقق من البايتات" +" الفعلية للثابت المشار إليه. A {ph2}مراجعة أوسع{ph3} ثم فحص 1548 نقطة عائمة " +"المراجع الثابتة. وجدت اثني عشر مرجعا آخر غير صحيح عبر خمس وظائف مقبولة." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"تتحقق المقارنة الآن من كل ثابت فاصلة عائمة. تتضمن اختباراته قيما خاطئة عمدا " +"للتأكد من رفضها. كان علينا أيضا إعادة النظر في النتائج التي اجتازت الفحص " +"الأضعف." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}احتاج مرجع التحقق (أوراكل) إلى إعادة البناء أيضا.{ph1} كان إصلاحه جزءا " +"من إصلاح اللعبة." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"هذا مهم عندما يكون الفريق في الغالب شخصا واحدا يعمل مع الوكلاء. لا أستطيع " +"شخصيا فحص كل سطر ينتجونه, الكثير من ثقتي تقع على شيكاتهم. يمكن أن تؤثر " +"النقطة العمياء لمرجع التحقق المشترك (أوراكل) على العديد من التحقيقات قبل أن " +"ألاحظ ذلك. يجب أن أفهم ما المدقق يتحقق فعلا واختباره ضد الحالات التي يجب أن " +"تفشل." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"مع استمرار العمل ، أصبحت هذه الشيكات جزءا من المستودع. وكذلك فعلت أسباب " +"التغييرات المصدر والملاحظات التي تسمح جلسة لاحقة التقاط حيث توقفت واحدة في " +"وقت سابق. {ph0}أصبح مستودع شفرة المصدر الذاكرة العاملة للمشروع.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}أعطتنا دفعة ناجحة كلا من الكود المسترد وبيئة أفضل للدفعة التالية.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "فكرتان مختلفتان لإعادة الإعمار" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClubفي {ph0}التمهيدي العام{ph1} يجعل خلافها مع هذا النوع من العمل " +"واضحا. يعلن الإشعار أن المزيد من التطوير سيحدث بشكل خاص حتى الانتهاء. مقطع " +"واحد يقرأ:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"إن صعود القواطع (عمليات فك التجميع والمنافذ بالذكاء الاصطناعي) في هذا الفضاء" +" المأخوذ من عملنا يرسم صورة سيئة لجهود فك التجميع المستقبلية…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"يصف الإشعار أيضا الخسائر النفسية على المشرفين. تستثني سياسة المساهمة الخاصة " +"بهم طلبات السحب التي يتم إنتاجها بشكل أساسي باستخدام الذكاء الاصطناعي. لقد " +"وضعوا وقت فراغهم في عمل صعب ، وساعد هذا العمل على جعل استمراري ممكنا. أنا " +"أحترم الجهد وراء ذلك. والخلاف الذي أريد مناقشته يتعلق بكيفية المضي قدما في " +"إعادة الإعمار وكيف ينبغي الحكم على المساهمة." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"في سير العمل اليدوي كنت أعرف ، وتطوير فهم وظيفة وإعادة بنائه عادة ما تقع على" +" نفس الشخص. اعتمد المشروع بشكل كبير على خبرة ذلك الشخص. كانت الثقة في " +"المساهم مهمة لأن الكثير من المنطق حدث أثناء عملهم." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"تحافظ المشاريع الحالية بالفعل على المعرفة في مصدرها وبناء الأدوات. ما تغير " +"بالنسبة لي هو أن الوكيل يمكنه استخدام هذه المعرفة لمتابعة التحقيق التالي " +"بمفرده." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"في استمراري ، أقرر الهدف والمعيار لقبول النتيجة. الوكيل لديه حرية واسعة " +"للتحقيق. ثم يتعين على إعادة الإعمار المقترحة أن تنجو من الشيكات ذات الصلة. " +"أريد أن يكون شخص آخر قادرا على فحص سبب اختيارنا للتنفيذ ، حتى لو قام الوكيل " +"بمعظم العمل." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"يمكن أن يكون هذا انتقالا صعبا. قد تصبح سنوات من العمل الدقيق الأساس لاستمرار" +" يتحرك بشكل أسرع. هذا يثير أسئلة حقيقية حول الائتمان. كما أنه يغير ما يحتاج " +"المشرفون إلى معرفته قبل قبول المساهمة." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"القياس الصناعي يساعدني على التفكير في هذا. في الحرفة ، يعتمد الكثير من " +"العملية على مهارة الشخص الذي يقوم بها. تتغير الآلات حيث تكون هناك حاجة إلى " +"هذه المهارة. لا يزال يتعين على شخص ما تصميم العملية والتعرف على متى يكون " +"إنتاجها خاطئا. يمكن للمجتمعات المختلفة اختيار مقدار هذا التغيير الذي تريد " +"القيام به." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"خياري هو الاستمرار علنا ، مع العمل الموروث الفضل وتاريخها الحفاظ عليها. أريد" +" أن يكون العمل الجديد قابلا للمراجعة. وهذا يعطينا طريقة للسؤال إلى أي مدى " +"يمكن أن يذهب هذا النهج والتعلم من الخطأ الذي يحدث على طول الطريق." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"المصدر: GensokyoClubفي {ph0}إشعار التمهيدي{ph1}، تم فحصه في 10 أكتوبر 2026 ،" +" و {ph2}سياسة المساهمة{ph3}. الاقتباس هو مقتطف مختصر. TH08في {ph4}الاعتمادات" +" والمصدر{ph5} سجل حدود الاستمرارية." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: تبدأ التجربة بالتفاقم" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0}TH095{ph1}، أطلق النار على الرصاصة ، وجعل رؤية قيمة تلك التجربة أسهل " +"بكثير. بدأ مستودعها في 29 أغسطس بدون وظائف لعبة مؤكدة في دفتر الأستاذ. كان " +"لا يزال يتعين علينا تعلم اللعبة. لكننا عرفنا بالفعل الكثير عن كيفية بدء " +"إعادة الإعمار وكيفية الحفاظ عليها تتحرك." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"بحلول 7 سبتمبر ، كان لجميع وظائف اللعبة المحددة البالغ عددها 697 مصدرا. " +"بحلول 8 سبتمبر ، تم قبول 696 كمقارنات دقيقة. البرنامج بأكمله مرتبط في 9 " +"سبتمبر. ال Windows أنا 386 تم وضع علامة على إعادة الإعمار للعب في 10 سبتمبر " +"، بعد حوالي اثني عشر يوما من التهيئة." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"لقد وجدت هذا أكثر إثارة من سرعة المشروع الأول. يمكن أن يستفيد هدف جديد من " +"العمل المنجز في لعبة أخرى. كانت التجربة موجودة بالفعل في الأدوات وفي طريقة " +"تنظيم المشروع." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"على سبيل المثال, TH08 علمتنا أن تولي اهتماما لبرنامج تجميعها في وقت مبكر. " +"إذا كانت العديد من الوظائف المستردة تعتمد على نفس الحالة ، فإن مقارناتها " +"المعزولة تترك سؤالا مهما مفتوحا. نحن بحاجة إلى رؤيتهم يعملون معا. ساعد هذا " +"الدرس في تشكيل كيفية اقترابنا TH095بناء البرنامج بأكمله." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"الدرس الذي يبقى في رأسي مفيد أثناء وجودي هناك. بمجرد أن يصبح التحقق من أن " +"جلسة أخرى يمكن تشغيلها ، يمكن أن تستمر في المساعدة بعد أن انتقلت. يمكن " +"للوكيل التالي استخدام النتيجة دون تكرار التحقيق الذي أدى إليها." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"ينتمي خطأ ثابت النقطة العائمة في تلك الذاكرة أيضا. وهذا ما يفسر لماذا يتطلب " +"التحقق من مرجع أيضا التحقق من البيانات وراء ذلك. الحفاظ على هذا التصحيح مع " +"التعليمات البرمجية يساعد المشاريع في وقت لاحق تجنب وراثة النقطة العمياء " +"الشيك القديم." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}تصبح الطريقة جزءا من مادة البداية للعبة التالية.{ph1} يمكننا إنفاق " +"المزيد من جهد المشروع التالي على ما هو جديد بالفعل حول هدفه." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"نفس الفائدة متاحة للأشخاص الذين ينضمون لاحقا. يمكنهم فحص القرار وإعادة " +"تشغيله قبل مواصلة العمل. لا يتعين عليهم إعادة بناء تاريخ المشروع بأكمله " +"لمعرفة سبب ظهور المصدر بالطريقة التي يعمل بها." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: سير العمل ينجو من بنية مختلفة" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0}TH04{ph1}، لوتس قصة الأرض ، أخذت هذا العمل في PC-98 عصر دوس. كان الهدف " +"الآن بيئة 16 بت مع أربعة برامج متعاونة. يتطلب فهم سلوك أجهزتها أدلة مختلفة " +"عن Windows ألعاب. القائمة {ph2}التوصية 98 العمل{ph3} قدم لنا معرفة قيمة " +"ومصدر المواد هنا أيضا." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"إعادة إعمار دوس تعمل الآن. في بلدي الاختبار اليدوي ، لعبت الطرق العادية " +"كاملة من خلال نهاياتها وفحص يحفظ. العمل الحالي هو منفذ 64 بت الأصلي. إنشاء " +"إصدار دوس العمل يعطي أولا أن ميناء الاتصالات مرجعا." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"غيرت الهندسة المعمارية ما كنا بحاجة إلى التحقيق فيه. كما أنها غيرت المترجم " +"ووقت التشغيل الذي تحققنا من عملنا. لكن لا يزال بإمكان الوكيل متابعة سؤال حتى" +" النتيجة والسماح لهذه النتيجة بتوجيه التجربة التالية." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"ضع في اعتبارك الانتقال من طريقة اللعب إلى النهاية. نحن بحاجة إلى معرفة " +"الدولة التي تمر عبر تلك الحدود والبرنامج المسؤول عنها. هذا شيء يمكننا " +"التحقيق ضد المنتج دوس. مرة واحدة هي الأدلة والشيكات المتاحة ، وكيل يمكن أن " +"تعمل من خلال السؤال بقدر ما فعلت على Windows العنوان." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"هذا هو السبب TH04 مسائل للحجة. لم يجبرنا التغيير الجوهري في النظام الأساسي " +"على البدء من جديد بطريقة جديدة للعمل. حددت البنية المشكلة ؛ لا يزال سير " +"العمل يعطينا طريقة لحلها." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"بالنسبة لمنفذ 64 بت ، يمكننا الآن فحص التنفيذ الجديد مقابل السلوك الذي تم " +"استرداده بالفعل على دوس. المعرفة من إعادة الإعمار تعطي الميناء شيئا للبناء " +"عليه." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"حالة المشروع اعتبارا من 10 أكتوبر 2026: {ph0}إعادة بناء دوس والاختبار " +"اليدوي{ph1} · {ph2}منفذ 64 بت{ph3}. الميناء لا يزال قيد التطوير." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "من الكود الدقيق إلى الكود المقروء" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "بمجرد أن تعمل إعادة الإعمار ، أريد أن يتمكن شخص آخر من فهمها." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"بالنسبة لي ، يمكن أن يشعر التجميع والتعويضات الخام كأصدقاء قدامى. أدرك أن " +"هذا تعريف غير عادي إلى حد ما لـ \"قابل للقراءة.\"يفضل معظم الناس اتباع منطق " +"اللعبة دون الاحتفاظ بتخطيط الذاكرة القابل للتنفيذ في رؤوسهم." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"هذا هو المكان {ph0}إعادة الإعمار الدلالي{ph1} يأتي في. قد لا يزال الحقل " +"المسترد معروفا بشكل أساسي من خلال إزاحته. نحن نتابع كيف تستخدمها اللعبة حتى " +"نتمكن من شرح دورها. ثم يمكننا أن نعطيها اسما ذا معنى ونوعا يناسب الأدلة. " +"نحافظ على المنطق مع المصدر حتى يتمكن الشخص التالي من رؤية مصدر هذا التفسير." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"يصبح هذا مهما بشكل خاص لمنفذ البرنامج. عنوان مطلق يخبرني أين عاش شيء ما في " +"الملف التنفيذي القديم. إنه يعطي تنفيذ 64 بت القليل من المساعدة في تحديد " +"الكائن الذي يجب أن يمتلك تلك الحالة. لنقل السلوك بأمان ، نحتاج إلى استعادة " +"العلاقة وراء الوصول إلى الذاكرة القديمة." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "الترتيب الذي أستخدمه الآن هو:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}استعادة خط الأساس الدقيق.{ph1} تجميع القطع التي أعيد بناؤها مع المترجم " +"التاريخي. قارن الكود والبيانات ذات الصلة مع الملف التنفيذي الأصلي. سجل " +"الاختلافات التي لم يتم حلها بحيث يكون للمرحلة التالية نقطة انطلاق واضحة." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}بناء وتشغيله على منصة الأصلي.{ph1} ربط تلك القطع في البرنامج الحقيقي " +"باستخدام العمارة الأصلية والمترجم. ممارسة مسارات اللعب الهامة. هذا هو المكان" +" الذي يمكننا فيه العثور على مشاكل في الحالة المشتركة أو التهيئة التي فاتتها " +"مقارنة دالة معزولة." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}إعادة بناء الدلالات ضد كلا المرجعين.{ph1} خذ جزءا متماسكا من اللعبة في " +"كل مرة وحدد ما يعنيه مصدرها المسترد. تحسين تمثيلها مع الحفاظ على المقارنات " +"الدقيقة والبناء التاريخي للعب." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}جعل الميناء الحديث.{ph1} نقل السلوك المعمول به في البيئة الجديدة ، مثل " +"بناء 64 بت الأصلي. تظل لعبة المنصة الأصلية المعاد بناؤها مرجعا لمقارنة سلوك " +"المنفذ." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"يصبح البناء القابل للعب من المرحلة الثانية أ {ph0}مرجع التحقق الثاني " +"(أوراكل){ph1} خلال الثالث. يتحقق مرجع التحقق الأول (أوراكل) مما إذا كان " +"مصدرنا المتغير لا يزال يعيد إنتاج الكود والبيانات الأصلية ذات الصلة. يتحقق " +"الثاني من أن البرنامج الذي أعيد بناؤه لا يزال يبني ويتصرف بشكل صحيح على طول " +"المسارات التي نمارسها." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"يصطادون أخطاء مختلفة. تغيير نوع يمكن أن يغير التعليمات التي تم إنشاؤها. " +"تغيير ملكية يمكن أن تترك جزأين من اللعبة باستخدام نسخ مختلفة من الدولة. حفظ " +"كل من الشيكات المتاحة يعطي وكيل فشل ملموس للتحقيق قبل أن يحمل ريفاكتور أبعد " +"من ذلك." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"يحتاج الاسم إلى دليل خاص به. لا يمكن للمقارنة الدقيقة أن تخبرنا ما إذا كان " +"الحقل يعني حقا \"وقت المناعة.\"علينا أن نثبت ذلك من كيفية كتابة اللعبة " +"واستخدامها. إذا ظل المعنى غير مؤكد ، فإن الاسم المحايد يكون أكثر فائدة " +"للقارئ التالي من التخمين الواثق." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"لقد تعلمنا هذا الأمر من خلال المشاريع. TH08 كان لديه بالفعل منافذ قابلة " +"للتشغيل قبل بعض عمليات تدقيق النظام الأساسي التاريخية اللاحقة. هذا جعل بعض " +"العيوب أكثر صعوبة في الرؤية. ال {ph0}سير العمل الحالي للمصنع{ph1} يضع بناء " +"النظام الأساسي الأصلي أولا ، لذلك يمكن للعمل الدلالي استخدامه كمرجع قبل بدء " +"النقل." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}إعادة الإعمار الدقيق يعطينا مرجعا. إعادة البناء الدلالي يجعل المعرفة " +"المستردة قابلة للاستخدام.{ph1} يمكن للمنفذ بعد ذلك البناء على كليهما." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "ما الذي يجعل هذا التحول الصناعي" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"تغيرت هذه المشاريع حيث قضيت انتباهي. بمجرد أن يتمكن الوكلاء من إجراء الكثير " +"من التحقيقات إلى الأمام ، أصبح تحسين بيئة عملهم أحد أكثر الأشياء المفيدة " +"التي يمكنني القيام بها. يمكن أن تساعد الأداة الأفضل في كل وظيفة لاحقة " +"تحتاجها." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"الحكم الذاتي مهم هنا. غالبا ما تصبح الخطوة التالية المفيدة واضحة فقط بعد " +"تجربة فاشلة. يحتاج الوكيل إلى حرية كافية لمتابعة هذه النتيجة في مكان ما غير " +"متوقع. إذا كان عليه أن ينتظر مني أن أصف كل خطوة ، فإن الكثير من العمل لا " +"يزال مرتبطا باهتمامي." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"أتوقع أن يقوم الوكيل بفرضيات خاطئة. ما يهم هو ما إذا كان بإمكاننا اختبارها " +"والتعلم من النتيجة. يجب أن يساعد الفحص الفاشل في فهم الخطأ جيدا بما يكفي " +"للمحاولة مرة أخرى. لا يزال يتعين علي أن أقرر ما إذا كانت الأدلة المتراكمة " +"تدعم علامة فارقة في المشروع." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA يمنح الوكيل إمكانية الوصول إلى أدوات التحليل. سؤال حول المتصل وظيفة يمكن" +" أن يؤدي مباشرة إلى تفتيش هذا المتصل. يوفر مشروع إعادة الإعمار المترجم " +"والشيكات المرجعية الخاصة به. يمكن للوكيل استخدام تلك لاختبار المصدر الذي " +"يقترحه ومعرفة أين يحمل تفسيره." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"ال TH08 يظهر الخطأ لماذا تستحق هذه الشيكات الاهتمام الهندسي الخاص بها. عند " +"استخدام نفس المقارنة عبر مئات الوظائف ، يمكن أن تنتشر فجوة فيها أكثر بكثير " +"من الخطأ في تنفيذ واحد. اختبار المدقق يحسن ردود الفعل المتاحة لجميع أن العمل" +" في وقت لاحق." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"القياس الصناعي له مثال تاريخي مفيد هنا. قدم بولتون ووات أ {ph0}مؤشر المحرك " +"البخاري في عام 1796{ph1} للمساعدة في ضبط صمامات المحرك. نسخة تسجيل تتبع " +"الضغط من خلال ضربة المكبس. جعل السلوك الداخلي للمحرك متاحا للفحص. تخدم أدوات" +" المقارنة لدينا غرضا مشابها: فهي تسمح لنا بفحص ما تفعله الماكينة أثناء " +"تحسينها." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}نحن في المراحل الأولى من هذا التحول الصناعي.{ph1} الكثير من البنية " +"التحتية لا تزال غير ناضجة. يمكن للوكلاء التحرك بشكل أسرع مما تم تصميم " +"شيكاتنا لدعمه ، لذلك يجب أن تتطور العملية إلى جانبهم. عندما نجد عيبا في أداة" +" مشتركة ، يتعين علينا إصلاحه وإعادة النظر في النتائج التي تأثرت بها. يمكن " +"للمشروع التالي بعد ذلك أن يرث أداة أقوى." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"هناك أيضا حد عملي لأي محادثة واحدة. سوف ينتهي قبل الانتهاء من إعادة الإعمار " +"الكبيرة. يجب أن يجعل مستودع الكود المصدري من الممكن استمرار جلسة أخرى دون " +"فقدان سبب القرار الأخير." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"ال {ph0}مصنع توهو لإعادة الإعمار{ph1} نشأت من تلك الحاجة. أنه يعطي المشاريع " +"وسيلة مشتركة لتنفيذ الشيكات والدروس إلى الأمام. العمل على لعبة واحدة يمكن أن" +" يحسن ظروف البداية لآخر." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"هذا ما يجعل القياس الصناعي ذا مغزى بالنسبة لي. تبدأ التجربة في أن تصبح جزءا " +"من الأدوات التي يمكن للآخرين استخدامها. يؤدي تحسين هذه الأدوات إلى تغيير " +"مقدار ما يمكن للشخص التالي—أو الوكيل التالي—إنجازه." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "المشاريع التي يمكننا النظر فيها الآن" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"السرعة مهمة لأنها تغير قرار البدء. وهناك لعبة يمكن أن تكون رائعة لعكس مهندس " +"ولا تزال تتطلب المزيد من اهتمامي الخاص مما كنت يمكن أن تعطي واقعيا. العديد " +"من المشاريع ستبقى الأفكار." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"الآن أستطيع أن أرى طريقة للحفاظ على مثل هذا المشروع يتحرك من خلال التحقيقات " +"المتكررة. الحصول على إعادة بناء العمل يجعل منفذ البرنامج أكثر عملية. استعادة" +" الدلالات المقروءة يجعل من السهل على شخص آخر استكشاف التعديل. الجهد المبذول " +"في فهم اللعبة يمكن أن يستمر في الدفع بعد تشغيل الإصدار الأول." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"أنا الآن ننظر إلى برنامج غير مألوف ونسأل: {ph0}ما هو الوصول, ردود الفعل " +"والمعرفة المتراكمة ستسمح للوكيل بالعمل على هذا بشكل موثوق?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"هذا السؤال يجعلني أفكر في المشاريع التي كنت سأتركها في السابق وحدي. يمكن لكل" +" واحد تحسين الطريقة التي نقترب بها من التالي. أريد أن أستمر في استكشاف إلى " +"أي مدى يمكن أن يأخذنا ذلك." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "معالم المشروع ومصادره" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"تصف التواريخ نقاط التفتيش المسجلة للمشروع, فحص ضد الجمهور GitHub التاريخ في " +"10 أكتوبر 2026. الوقت المنقضي هو وقت التقويم بين الالتزامات. وجود المصدر ، " +"والمقارنات الدقيقة ، وبناء ووقت التشغيل نتيجة كل اسم معلما مختلفا." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0}TH08:{ph1} {ph2}13 أغسطس استمرار{ph3}, {ph4}19 أغسطس المصدر ليدجر{ph5}," +" {ph6}24 آب / أغسطس Linux الميناء{ph7}, {ph8}26 أغسطس طبعة الويب{ph9}، و " +"{ph10}30 أغسطس 64 بت Linux الإصدار{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0}TH095:{ph1} {ph2}29 آب / أغسطس دفتر الأستاذ الأولي{ph3}, {ph4}7 سبتمبر " +"المصدر ليدجر{ph5}, {ph6}مقارنات 8 سبتمبر{ph7}, {ph8}9 أيلول / سبتمبر " +"الربط{ph9}، و {ph10}10 سبتمبر للعب-بناء سجل{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0}TH04:{ph1} {ph2}10 تشرين الأول / أكتوبر{ph3} يسجل إعادة بناء دوس العمل " +"، واختبار المسار العادي الكامل للمشرف ومرحلة 64 بت الحالية." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0}TH08 تصحيح أوراكل:{ph1} {ph2}علة جمع السيارات المبلغ عنها{ph3}, " +"{ph4}إصلاح المصدر والمقارنة{ph5}، و {ph6}التدقيق الحرفي العائم الكامل{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}إعادة الإعمار الدلالي:{ph1} {ph2}TH08قراءة قواعد اللعبة التي " +"تمارسها{ph3} و {ph4}ترتيب مرحلة المصنع ومسارين للتحقق من الصحة{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}التاريخ الصناعي:{ph1} {ph2}سجل مؤشر المحرك البخاري لمجموعة متحف " +"العلوم{ph3} يصف مقدمة عام 1796 وآلية تسجيل الضغط." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}الطريقة:{ph1} المصنع {ph2}استقلالية الوكيل{ph3} و {ph4}المعرفة عبر " +"اللعبة{ph5} تحتفظ الوثائق بمبادئ العمل والدروس." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}المزيد من المقالات{ph1} · {ph2}استكشاف TH04 التحقيق{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "الثورة الصناعية للهندسة العكسية — REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 يعكس على دليل الهندسة العكسية, Touhou إعادة الإعمار مع منظمة العفو " +"الدولية وكلاء, كيفية معرفة المركبات عبر TH08, TH095 و PC-98 TH04." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "الخبرة المنقولة بين المشاريع" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "مقال إعادة إعمار توهو" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}الرئيسية{ph1}{ph2}/{ph3}مختبر سرعة الديناصورات" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "تفقد rebuild إعادة بناء change تغيير" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "إعادة بناء قاعدة سرعة الديناصور." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"لإعادة تسريع اللعبة ، ابحث أولا عن القاعدة التي تتحكم في سرعتها. {ph0}REA " +"عاد البرنامج النصي قيد التشغيل;{ph1} استخدمنا حكمها لبناء هذه اللعبة المصغرة" +" مع {ph2}سرعة قابلة للتعديل.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}اللعب وتغيير السرعة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}اقرأ القاعدة المستردة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}تحقق من إعادة الإعمار{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}جرب التحليل{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "اللعب وتغيير السرعة" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"اضغط على تشغيل ، ثم اقفز فوق الصبار. حرك شريط تمرير السرعة لتجربة لعبة أبطأ " +"أو أسرع ؛ يتحول إلى سرعة ثابتة. حدد القاعدة المستردة للبدء في 6 وتسريع " +"تدريجيا مرة أخرى." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "جرّب اللعبة المعاد بناؤها" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "العب" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "اقفز ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "ابدأ من جديد" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "السرعة" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "استخدم قاعدة التسارع المستردة" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "القاعدة الأصلية: ابدأ من 6 ، ثم زد نحو 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "حرك شريط التمرير لضبط السرعة الخاصة بك. الفضاء أو القفز يزيل الصبار." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"تمكين JavaScript للعب إعادة الإعمار. يظل الرمز والشرح أعلاه قابلا للقراءة." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "قراءة السيناريو REA عاد" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"فتشنا {ph0}وايو Chromium- مستمد متصفح الطبعة{ph1} مع REA. عاد تحميل {ph2}، " +"بما في ذلك هذا الفرع في وظيفة تحديث اللعبة:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"الإعدادات هي {ph0}, {ph1} و {ph2}. تدير اللعبة هذا الفرع على تحديث دون " +"تصادم." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "استخدم نفس القاعدة في اللعبة الجديدة" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "نسخ" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"تستخدم اللعبة المصغرة هذه الوظيفة للتسريع التلقائي. يؤدي تحريك شريط التمرير " +"إلى توفير سرعة ثابتة بدلا من ذلك. يعد الرسم وفيزياء القفز وفحص تصادم " +"المستطيل رمزا جديدا لهذه اللعبة التعليمية ؛ تتقدم محاكاتها بمعدل 60 تحديثا " +"في الثانية." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}قم بتنزيل قاعدة السرعة{ph1} · {ph2}قراءة رمز اللعبة{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "تحقق من إعادة الإعمار" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"اتصلنا بوظيفة تحديث اللعبة الأصلية مع تعطيل العقبات والجدولة التلقائية. قارن" +" تلك السرعات المسجلة مع إعادة تشغيل القاعدة المستردة." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "التحديثات" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "اللعبة الأصلية" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "قاعدة أعيد بناؤها" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "قم بتشغيل فحص السرعة" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"تقريب القيم إلى ثلاثة كسور عشرية. يتحقق الفرع قبل الإضافة ، لذلك يمكن أن " +"تأخذ الزيادة النهائية سرعة أعلى بقليل من 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "جرب التحليل بنفسك" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}إعداد REA{ph1} مع مساعدك البرمجي." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "اتبع {ph0}خطوات اتصال المتصفح{ph1}، باستخدام {ph2} كما رابط الصفحة." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"امنح وكيلك عنوان ورل للصفحة ونقطة نهاية التصحيح المحلية ، ثم انسخ هذه " +"المطالبة." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتفقد هذه اللعبة ديناصور. لماذا لا تحصل على " +"أسرع? عرض قاعدة السرعة ، ثم بناء نسخة صغيرة مع سرعة قابل " +"للتعديل.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"اسأل متابعة: {ph0}\"أين يتم حساب ارتفاع القفز? أضف عنصر تحكم في ارتفاع القفز" +" إلى الإصدار الجديد.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"المصدر: {ph0}فحص رمز السرعة{ph1}, Chromium المؤلفون. {ph2}حقوق التأليف " +"والنشر ورخصة بسد{ph3}. REA 4.1.0 تفقد تشغيل هتب الطبعة في Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome لعبة الديناصورات: إعادة بناء قاعدة السرعة — REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"اقرأ قاعدة سرعة لعبة الديناصورات باستخدام REA، إعادة بنائه ، ثم تغيير السرعة" +" واللعب." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "إعادة بناء سرعة الديناصورات" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"ديناصور لعبة صغيرة. استخدم زر القفز أو اضغط على الفضاء أثناء تركيز اللعبة." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "نسخ قاعدة السرعة المعاد بناؤها" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "نسخة ديناصور تحليل موجه" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}الرئيسية{ph1} / أسئلة وأجوبة" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA التعليمات." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "الإعداد والتحديثات والتحليل واستكشاف الأخطاء وإصلاحها." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "المواضيع" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}الإعداد والتحديثات{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}التحليل{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}استكشاف الأخطاء وإصلاحها{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}البيانات والمشاركة{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "الإعداد والتحديثات" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "كيف أثبّت REA؟" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "محطة * وكيل الإعداد" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "نسخ" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"يسجّل أمر الإعداد اتصال MCP الخاص بـ REA ويثبّت مهارة التحليل المناسبة. بعد " +"اكتماله، أعد تشغيل مساعدك وأعطه مسار الملف وسؤالك. يوضّح {ph0}دليل " +"الإعداد{ph1} المتطلبات وخطوات التحليل الأول." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "ما هي عوامل الترميز التي يمكن استخدامها REA?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"أي وكيل يدعم المحلية MCP الخوادم. يتضمن الإعداد Claude Code, Claude سطح " +"المكتب, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, " +"GitHub Copilot CLI, Command Code, Grok Build, OMP، و VS Code. يضاف موصل غروك" +" بوت من الدردشة لها." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}قم بتوصيل مساعدك البرمجي{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "كيف أحدّث REA؟" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA الإصدارات بشكل متكرر ، بما في ذلك إصلاحات الأخطاء. إذا قمت بتثبيت CLI مع" +" npm:" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "المحطة الطرفية * مثبتة CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"اتبع أمر تحديث الإعداد المطبوع بواسطة التحديث. إذا قمت بإعداد وكيلك من خلال " +"{ph0}, يركض:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "محطة * تحديث وكيل الإعداد" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"راجع التغييرات وأعد تشغيل مساعدك. يستخدم اتصال REA إصدارًا محددًا من الحزمة،" +" لذلك أعد تشغيل الإعداد لاستخدام الإصدار الجديد. لتنفيذ أمر CLI مرة واحدة، " +"أضف الأمر بعد {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "يتم تثبيت المهارة من skills.sh كفى?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"مهارة يعطي تعليمات التحقيق وكيلك. تشغيل {ph0}REA الإعداد{ph1} لتوصيل MCP " +"الخادم وتثبيت مهارة المطابقة ، ثم أعد تشغيل وكيلك حتى يتمكن من استدعاء " +"الأدوات." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "التحليل" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "ماذا يمكنني تحليل مع REA?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "تبدأ مع هذا النوع من البرامج لديك:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}الملفات التنفيذية والمكتبات الأصلية{ph1}: وظائف ، والتجمع ، بسيودوكود " +"والمراجع." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0}JavaScript و Electron التطبيقات{ph1}: الوحدات والواردات والتصنيف الدولي" +" للبراءات ومواقع المصدر." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}صفحات المتصفح{ph1}: البرامج النصية والطلبات وملاحظات وقت التشغيل." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA لديها أيضا سير العمل للجمعيات المدارة ، أبكس الروبوت ، الثابتة والموارد " +"تعبئتها. {ph0}انظر دراسات الحالة{ph1} لتحقيقات عملت." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "هل أحتاج Hopper, Ghidra أو IDA?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"يستخدم التحليل الأصلي العميق واحد منهم. ثابت JavaScript والعمل التفتيش " +"الصافي مع الملفات الموردة ولا تحتاج إلى محرك تحليل الأصلي." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"ربط الموجودة لديك Ghidra أو IDA التثبيت ، أو السماح الإعداد كشف Hopper " +"واقتراح التثبيت. يحدد مضيفك وهدفك المزود الذي يمكن استخدامه. {ph0}إعداد " +"التحليل الأصلي{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "هل يمكنني استخدام REA بدون المساعد البرمجي?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"نعم. ال CLI يستخدم نفس مهام سير العمل التحليل. على المستوى المحلي JavaScript" +" أو Electron التطبيق:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "محطة * تحليل التطبيق الثابت" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"استبدل المسار بمجلد تطبيق مستخرج أو ASAR ملف. {ph0}استخدام CLI{ph1} لخيارات " +"التثبيت." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "ما الكود الذي يعيده REA؟" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"يعيد تحليل البرامج الأصلية تعليمات التجميع والكود شبه البرمجي، مع استدعاءات " +"الدوال والمراجع والثوابت ذات الصلة. ويعيد تحليل JavaScript الوحدات والعلاقات" +" بينها ومواقعها في الكود المصدري." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"يستخدم وكيلك هذه النتائج لشرح السلوك أو كتابة واختبار التنفيذ. ال {ph0}DX-" +"Ball الحساب{ph1} و {ph2}مدقق العلم كتف{ph3} أظهر كيف تعمل هذه العملية." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "ماذا أسأل مساعدي؟" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"إعطائها هدفا محليا وسلوك واحد للتحقيق. ل JavaScript أو Electron التطبيق:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"استبدال المسار مع الهدف الخاص بك. ال {ph0}أدلة{ph1} تقديم مطالبات للأصل, " +"Electron وأمثلة المتصفح." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "استكشاف الأخطاء وإصلاحها" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "لماذا لا يستطيع وكيل أعمالي رؤية REA أدوات?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"أعد تشغيل الوكيل أو أعد توصيله بعد الإعداد. تحقق لها REA التسجيل مع {ph0}؛ " +"إلى عن على Codex:" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "محطة * تحقق عميل واحد" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"استبدال {ph0} مع معرف العميل الخاص بك ، مثل {ph1} أو {ph2}. إذا أظهر التقرير" +" تسجيلا مفقودا أو قديما ، فقم بتشغيل الإعداد لهذا العميل:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "محطة * إصلاح إعداد عميل واحد" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"مراجعة خطتها وإعادة تشغيل العميل. إذا كان التسجيل صحيا ولكن الأدوات لا تزال " +"غائبة ، فتحقق من العميل MCP خطأ في الاتصال. {ph0}المزيد من تشخيصات " +"الإعداد{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "هل أحتاج إلى البدء Hopper أولا?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA يبدأ Hopper عندما تحتاج العملية إلى ذلك. على macOS، أكمل اختيار التشغيل " +"الأول للوضع التجريبي أو تنشيط الترخيص قبل التحليل غير المراقب. {ph0}راجع " +"إعداد الموفر الأصلي{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "ماذا أفعل إذا واجهت خطأ؟" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}تحديث REA{ph1}، أعد تشغيل وكيلك وأعد محاولة نفس المهمة. قد يؤدي الإصدار" +" الأخير إلى حل المشكلة بالفعل." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"إذا استمرت, {ph0}افتح مشكلة{ph1} مع الخاص بك REA الإصدار ونظام التشغيل ونوع " +"الهدف وخطوات إعادة الإنتاج وإخراج الخطأ. قم بتضمين اسم الموفر عندما تتضمن " +"المشكلة تحليلا أصليا." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "البيانات والمشاركة" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "هل REA تحميل تطبيقي?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA يحلل الأهداف على جهازك. يتلقى وكيلك النتائج ، وتنطبق سياسة بيانات موفر " +"النموذج الخاص به على تلك النتائج." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "كيف يمكنني مشاركة مثال أو المساهمة?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"لديك مفيدة REA مثال? كنا نحب أن نرى ذلك. مشاركة الهدف ، سؤالك ، والنتائج " +"وكيف يمكنك التحقق منها في {ph0}القضية{ph1} أو {ph2}طلب سحب{ph3}. تساعد " +"مقتطفات وأرقام التعليمات البرمجية القصيرة الآخرين على متابعة التحقيق." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"نرحب أيضا بتقارير الأخطاء وطلبات الميزات والتوثيق وتحسينات التعليمات " +"البرمجية. يمكنك أيضا مناقشة مثال في {ph0}المجتمع{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA التعليمات: الإعداد والتحديثات واستكشاف الأخطاء وإصلاحها" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"إجابات مشتركة REA الأسئلة: التثبيت والتحديثات وأدوات التحليل وعوامل الترميز " +"واستكشاف الأخطاء وإصلاحها ومشاركة الأمثلة." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "الأسئلة المتداولة حول REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "نسخ REA أمر الإعداد" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "نسخ REA أمر التحديث" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "أمر تحديث إعداد وكيل النسخ" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "نسخ REA CLI أمر التحليل" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "نسخ مثال تحليل موجه" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "نسخ أمر تشخيص العميل" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "نسخ أمر إعداد النطاق" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}الرئيسية{ph1} / تحقيقك الأول" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "اكتشف أين{ph0}الملاحظات المصدرة تذهب." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"استخدام REA لتفقد تطبيق صغير ، اتبع زر ملاحظات التصدير الخاص به وتحقق من أحد" +" التفاصيل بنفسك." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "في هذا التمرين" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. إعداد{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. اسأل عن التصدير{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. اتبع الجواب{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. تحقق من التنبؤ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. اطرح سؤالا آخر{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. ربط وكيلك إلى REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "نسخ" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "أو قم بتشغيل هذا الأمر في جهازك الطرفي:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"راجع الخطة ، ووافق على الإعداد ، ثم أعد تشغيل وكيلك. متصل بالفعل? تابع " +"أدناه." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. اسأل أين CSV هو مكتوب" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"المثال هو ملف ستة Electron التطبيق مع {ph0}ملاحظات التصدير{ph1} زر. وكيلك " +"يمكن فحص التعليمات البرمجية الخاصة به دون تثبيت أو إطلاق Electron." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "وكيلك بتحميل الملفات ويعطي المجلد تفكيك ل REA للتفتيش." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}تحميل مثال الرمز البريدي{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"إذا لم يتمكن وكيلك من تنزيل الملفات ، فقم بفك ضغط هذا الأرشيف بنفسك. تعطيه " +"الطريق إلى {ph0} المجلد ونفس سؤال التصدير." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. اتبع الجواب مرة أخرى إلى التعليمات البرمجية" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "ابحث عن شرح قصير مع مراجع الملفات والخط:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"زر يرسل {ph0} رسالة. تقوم العملية الرئيسية بتنسيقات الملاحظات على النحو " +"التالي CSV ويكتب {ph1} في مجلد التنزيلات الخاص بالمستخدم. الأعمدة هي {ph2} و" +" {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "من الزر إلى كاتب الملف" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"REAالصورة تحليل ثابت أزواج الرسالة مع معالج لها. تتم قراءة الوجهة من " +"التعليمات البرمجية." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"مسار الملف ، المنسق وكتابة المكالمة معا في هذا المعالج. اطلب من وكيلك إظهار " +"هذه السطور إذا كانت إجابته تتركها." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}انظر تتبع رمز كامل وسجلت REA النتيجة{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. تحقق من التنبؤ" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"فاصلة تفصل CSV الأعمدة. ماذا يحدث عندما يحتوي عنوان الملاحظة نفسه على فاصلة " +"أو علامات اقتباس?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "قم بتشغيل الشيك بنفسك" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "فتح محطة في تفكيك {ph0} المجلد:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"يستخدم هذا الأمر قذيفة مع دعم وثيقة هنا ، مثل باش أو زش. وكيلك يمكن تشغيل " +"نفسه JavaScript في قذيفة النظام الأساسي الخاص بك." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. اطرح سؤالا آخر" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "جرب المتابعة في نفس المحادثة:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "ماذا يحدث إذا تعذر كتابة الملف? اتبع الخطأ مرة أخرى إلى الصفحة." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "أو امنح وكيلك تطبيقا خاصا بك واسأل عن زر أو ملف أو سلوك واحد." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}كيف Notion نسخ النص و هتمل{ph1}{ph2}اتبع ميزة الحافظة في حزم Electron " +"التطبيق.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}كيف DX-Ball يحسب بالغسل الصوت{ph1}{ph2}اقرأ التعليمات الأصلية وفحوصات " +"إعادة الإعمار.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}استكشاف أخطاء الإعداد أو التحليل وإصلاحها{ph1}{ph2}تحديث REA وتحقق من " +"الاتصال إذا واجهتك مشكلة.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "أول تحقيق في الهندسة العكسية — REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"حاول REA على تطبيق ملاحظات صغير. قم بإعداد وكيلك ، واسأل أين تذهب الملاحظات " +"المصدرة ، وتحقق من CSV المنسق مع عنوان عينة." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "الخاص بك أولا REA التحقيق" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "نسخ REA موجه التثبيت" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "نسخ أمر الإعداد" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "نسخة ملاحظات التحقيق الفوري" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "نسخ CSV تحقق موجه" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "نسخ أمر التحقق من المنسق" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}الرئيسية{ph1} / ابدأ" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "إعداد REA." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"الاتصال REA إلى مساعدك البرمجي ، أو تفقد التطبيق المحلي من محطة الخاص بك." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "افتح محطة وتحقق:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "محطة" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "نسخ" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0}Windows (بوويرشيل){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows بوويرشيل" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"اكتب ذ إذا طلب منك قبول الشروط. إغلاق بوويرشيل ، فتحه مرة أخرى ، ثم تشغيل " +"{ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"إذا قال بوويرشيل لاحقا {ph0}\"تشغيل البرامج النصية معطل على هذا " +"النظام\"{ph1} عند تشغيل {ph2}، قم بتشغيل هذا مرة واحدة وحاول مرة أخرى:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "إذا كنت تستخدم Homebrew:" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "خلاف ذلك:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "إغلاق المحطة ، فتحه مرة أخرى ، ثم:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"يحتاج المثبت {ph0} و {ph1} (على دبيان / أوبونتو: {ph2}). إغلاق المحطة ، فتحه" +" مرة أخرى ، ثم:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"التوزيع الخاص بك {ph0} غالبا ما تكون الحزمة أقدم من 22.19 ، لذا تحقق {ph1} " +"إذا كنت تستخدم بدلا من ذلك." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "تفضل المثبت العادي? تحميل النسخة لتس من {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "خيارات الإعداد" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}قم بتوصيل مساعدك البرمجي{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}استخدام CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}إعداد تحليل برامج رمز الجهاز{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}الحصول على المساعدة{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "قم بتوصيل مساعدك البرمجي" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"تشغيل الإعداد للاتصال REA إلى مساعدك البرمجي. تشمل خيارات العميل ما يلي " +"Claude Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build، وغيرها من " +"الدعم MCP العملاء. يضاف موصل غروك بوت من الدردشة لها." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "جديد في وكلاء الترميز?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"عامل الترميز هو مساعد الذكاء الاصطناعي الذي يعمل على جهاز الكمبيوتر الخاص بك" +" بدلا من علامة تبويب المتصفح. يمكنه قراءة الملفات وتشغيل الأوامر ، ويسأل قبل" +" إجراء التغييرات. REA يعطيها أدوات الهندسة العكسية." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"إذا لم يكن لديك واحدة حتى الآن ، فاختر واحدة ، واتبع صفحة التثبيت الخاصة بها" +" وقم بتسجيل الدخول:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1}Claude Code{ph2}{ph3} بواسطة Anthropic. يحتاج إلى دفع Claude خطة." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1}Codex{ph2}{ph3} بواسطة OpenAI. تسجيل الدخول باستخدام حساب تشاتغبت " +"الخاص بك." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, المصدر المفتوح. قم بتوصيل موفر النموذج الذي " +"تختاره." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"ثم فتحه ونسخ موجه أدناه في ذلك. الوكيل يدير REAالصورة الإعداد ويظهر لك الخطة" +" قبل تغيير أي شيء." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "أو قم بتشغيل الإعداد بنفسك" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "كيف يمكنني فتح محطة?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0}Windows:{ph1} افتح قائمة ابدأ ، اكتب {ph2}بوويرشيل{ph3} واضغط على " +"إدخال." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0}macOS:{ph1} الصحافة {ph2} {ph3}، النوع {ph4}محطة{ph5} واضغط على إدخال." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0}Linux:{ph1} الصحافة {ph2} {ph3} {ph4} على معظم أجهزة الكمبيوتر " +"المكتبية." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"لصق أمر مع {ph0} {ph1} (macOS: {ph2} {ph3}; Linux المحطات: {ph4} {ph5} " +"{ph6}) ، ثم اضغط أدخل." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"اختر عميلك وراجع خطة الإعداد. REA يضيف لها MCP الاتصال ومهارة التحقيق " +"المطابقة ، مع الاحتفاظ بنسخة احتياطية من التكوين الحالي. يسأل قبل تطبيق " +"التغييرات." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "أعد تشغيل العميل عند انتهاء الإعداد." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "كيف يمكنني إعادة تشغيل موكلي?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}تطبيقات سطح المكتب{ph1} (Claude سطح المكتب, Cursor, Windsurf, VS Code):" +" قم بإنهاء التطبيق تماما ، ثم فتحه مرة أخرى. إغلاق النافذة لا يكفي. على " +"macOS الصحافة {ph2} {ph3}؛ على Windows، قم أيضا بإنهاء رمز الدرج إذا كان " +"هناك رمز." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}وكلاء المحطة الطرفية{ph1} (Claude Code, Codex, Gemini CLI): الخروج من " +"الدورة وبدء تشغيله مرة أخرى." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"إعطاء وكيلك مسار الهدف وسؤال محدد. ل JavaScript أو Electron التطبيق ، قد " +"تبدأ مع:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"انظر إلى {ph0} والعثور على كيفية تصدير البيانات. عرض نقاط الدخول والمكالمات " +"والتبعيات المعنية ، مع مواقع المصدر للنتائج الخاصة بك." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "استبدال المسار مع الهدف المحلي الخاص بك." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "كيف يمكنني الحصول على المسار الكامل للمجلد?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1} في مستكشف الملفات ، انقر بزر الماوس الأيمن فوق المجلد " +"واختر {ph2}نسخ كمسار{ph3}. على Windows 10 ، عقد التحول أثناء النقر بزر " +"الماوس الأيمن." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0}macOS:{ph1} في الباحث ، انقر بزر الماوس الأيمن فوق المجلد ، وعقد الخيار" +" واختيار {ph2}نسخ \" as \" كاسم مسار{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "{ph0}أي نظام:{ph1} اسحب المجلد إلى نافذة طرفية ويظهر مساره." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "في المحطة الطرفية ، ضع علامات اقتباس حول مسار يحتوي على مسافات." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "استخدام CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"تحليل JavaScript أو Electron مجلد التطبيق أو ASAR الأرشيف دون تشغيل التطبيق:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "تحليل التطبيق الثابت" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"استبدل المسار بدليل التطبيق المستخرج أو {ph0} ملف. على Windows، مسار مثل " +"{ph1} يعمل هنا." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "أين أجد التطبيق .ملف اسار?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron تطبيقات عادة يبقيه في {ph0} المجلد:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0}Windows:{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0}macOS:{ph1} {ph2} (انقر بزر الماوس الأيمن فوق التطبيق واختر {ph3}عرض " +"محتويات الحزمة{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0}Linux:{ph1} في كثير من الأحيان {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "يتم تثبيت بعض التطبيقات في مكان آخر. ابحث في مجلد التطبيق عن {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"تحدد النتيجة التطبيق ، وتظهر الاتصالات بين الوحدات وتعطي مواقع مصدرها. " +"اتصالات REA لا يمكن حل يتم وضع علامة في النتيجة." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "إذا كنت ترغب في الحصول على وظيفة دائمة {ph0} الأمر في قذيفة الخاص بك:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "تثبيت CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}تواصل مع JavaScript دليل التطبيق{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "إعداد تحليل برامج رمز الجهاز" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"تحتاج الثنائيات الأصلية إلى أداة تحليل محلية. اختيار وتكوين واحد أدناه ، ثم " +"إعطاء REA الملف القابل للتنفيذ أو المكتبة." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "اختر أداة: Ghidra, Hopper أو IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"استخدام القائمة Ghidra 12.1.س التثبيت و 64 بت جدك 21 أو أحدث على Linux أو " +"macOS، على إكس 64 أو أرم 64. الخاص بك Ghidra يحتاج التثبيت إلى برنامج فك " +"التحويل الأصلي لهندسة المضيف. اضبط المسارات قبل تشغيل الإعداد:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "ربط الخاص بك Ghidra تركيب" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra اتصال · macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"استبدل كلا المسارين بالتثبيتات الموجودة لديك. يتحقق الإعداد منها ويسجل " +"إعدادات صالحة للعميل الذي اخترته. على Linux أرم 64 ، قد تحتاج إلى بناء " +"Ghidraالصورة المفكك الأصلي بشكل منفصل." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "الاتصال Ghidra على Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows إكس 64 لديه دعم تجريبي للقراءة فقط لتطبيقات إكس 86 و إكس 64 بي و دلز" +" على محركات نتفس المحلية الثابتة. استخدام القائمة Ghidra 12.1.س التثبيت و 64" +" بت جدك 21 أو أحدث:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra اتصال · Windows بوويرشيل" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "استبدال المسارين مع المنشآت الخاصة بك ، ثم مراجعة خطة الإعداد." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"الاتصال Hopper على macOS أو Linux. قم بتشغيل أمر الإعداد أعلاه ؛ يكتشف " +"تثبيتا موجودا أو يقدم خطة تثبيت للموافقة عليها." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"على macOS، كاملة Hopperخيار التشغيل الأول للوضع التجريبي أو تنشيط الترخيص " +"قبل إجراء تحليل غير مراقب." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"التحقق IDA استخدام الاجهزة Windows، مع وجود MCP التسجيل للحصول على واجهة " +"المستخدم الرسومية المرفقة أو قاعدة بيانات مقطوعة الرأس. Linux و macOS لا " +"يزال تحليل مقطوعة الرأس لم يتم التحقق منها." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "ربط القائمة IDA MCP التسجيل" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"الحفاظ على عمل الخادم المنبع {ph0}, {ph1} واختياري {ph2} في ملف جسون. " +"القائمة {ph3} كائن مع {ph4} يتم قبول الدخول أيضا. نقطة REA في هذا الملف قبل " +"الإعداد:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA اتصال · Windows بوويرشيل" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"يستخدم الملف الشخصي المرفق أدوات 1.4.0 القديمة مع فتح الثنائي الأصلي بالفعل " +"IDA. يستخدم الملف الشخصي مقطوعة الرأس واجهة برمجة تطبيقات المشرف على قاعدة " +"البيانات الأولية والتسجيل باستخدام {ph0}; التحقق الحقيقي يغطي IDA 9.3 " +"Windows 64 مشرف. يتحقق الطبيب من التسجيل دون البدء IDA." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"أعط REA المسار القابل للتنفيذ الأصلي ، مع {ph0} في CLI الاستعلام. بالنسبة " +"للوكيل ، تشمل {ph1} في ال REA بيئة التسجيل واختيار IDA عند فتح ثنائي." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "للحصول على القائمة Ghidra الإعداد ، فحص وظيفة مع:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "تحليل الوظيفة" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "استبدال {ph0} مع اسم الوظيفة أو العنوان الذي تريد فحصه." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "كيف يعمل تحليل جلسات برامج كود الآلة" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"كل CLI يستورد الأمر ويحلل الثنائي ، ثم يغلق جلسته. وكيلك MCP استعلامات إعادة" +" استخدام ثنائي المستوردة في حين أن الدورة مفتوحة." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}اتبع مثال تحليل برامج كود الآلة{ph1} لنرى كيف تؤدي نتيجة الوظيفة إلى " +"عملية حسابية مستردة." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "الحصول على المساعدة" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "إذا كان وكيلك لا يرى REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"أعد تشغيل العميل أو أعد توصيله بعد الإعداد. تحقق لها REA اتصال مع {ph0}؛ إلى" +" عن على Codex:" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "تحقق من عميل واحد" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "إذا احتاج مقدم الخدمة إلى الاهتمام" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "تحقق من الموفر الذي تستخدمه. ل Ghidra:" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "تحقق من مزود واحد" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "يعطي التقرير الاختيار الفاشل والخطوة التالية المقترحة." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0}REA الأسئلة الشائعة{ph1}{ph2}إجابات سريعة على التحديثات والوكلاء " +"والتحليل.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}اختر دليل التحقيق{ph1}{ph2}أمثلة عملت لثنائي ، وهو Electron التطبيق " +"ومتصفح.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "{ph0}GitHub القضايا{ph1}{ph2}الإبلاغ عن مشكلة في الأمر والتشخيص.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "{ph0}REA المجتمع{ph1}{ph2}الأسئلة والتحقيقات والعمل الجاري.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "تثبيت REA وإعداد وكيل الترميز الخاص بك" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"الاتصال REA إلى الترميز الخاصة بك أو وكيل أو فحص محلي JavaScript أو Electron" +" التطبيق من المحطة. الإعداد والأسئلة الأولى وأدلة الموفر الأصلي." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "نسخ Node.js فحص الإصدار" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "نسخ Node.js أمر التثبيت ل Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "نسخ أمر سياسة تنفيذ بوويرشيل" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "نسخ Homebrew Node.js أمر التثبيت" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "نسخة فنم أمر التثبيت ل macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "نسخ Node.js 24 أوامر ل macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "نسخة فنم أمر التثبيت ل Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "نسخ Node.js 24 أوامر ل Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA دليل البدء" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "نسخ REA موجه التثبيت" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "أمر إعداد وكيل النسخ" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "نسخ JavaScript أمر التحليل" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "نسخ CLI أمر التثبيت" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "نسخة غيدرا اتصال * ماك / لينكس" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "نسخ Ghidra اتصال ل Windows بوويرشيل" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "نسخ IDA اتصال ل Windows بوويرشيل" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "نسخ أمر تحليل الوظيفة الأصلية" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "نسخ أمر تشخيص العميل" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "أمر تشخيص مزود النسخ" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}الرئيسية{ph1} / {ph2}أدلة{ph3} / مراقبة المتصفح" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "انظر ماذا سيحدث{ph0}عند النقر فوق." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"استخدام التطبيق متصفح صغير لربط العمل ، طلب شبكتها و JavaScript أن يبني " +"تحميل." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "في هذا الدليل" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}المثال{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}افتح المتصفح{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}اسأل وكيلك{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}التقاط من CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}قراءة الطلب والسيناريو{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "ماذا يحدث عند النقر فوق تصدير?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"ال {ph0}ملاحظات متصفح سبيل المثال{ph1} لديه {ph2}ملاحظات التصدير{ph3} زر. " +"النقر عليه الأحمال {ph4}، تنسيقات المذكرتين على النحو التالي CSV, ويبدأ " +"التنزيل." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "من النقر إلى CSV تحميل" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * أنت{ph1}{ph2}انقر فوق تصدير الملاحظات{ph3}{ph4}قم بتنفيذ الإجراء " +"في متصفحك أثناء تشغيل الالتقاط.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 · REA{ph1}{ph2}سجل الطلب{ph3}{ph4}التقاط عنوان ورل الطلب وحالة " +"الاستجابة وهيكل جسون من الصفحة المحددة.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * وكيلك{ph1}{ph2}اقرأ رمز التصدير{ph3}{ph4}قم بتوصيل الطلب المرصود " +"بـ {ph5} في {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "ابدأ الالتقاط قبل النقر فوق تصدير الملاحظات." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "فتح Chrome مع التصحيح عن بعد" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"افتح مثال الملاحظات المستضافة باستخدام ملف تعريف متصفح منفصل ومنفذ تصحيح " +"أخطاء محلي. على Linux:" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "ابدأ تشغيل متصفح المثال" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "نسخ" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"استخدم المسار القابل للتنفيذ للمتصفح المثبت على macOS أو Windows. يمكنك " +"استبدال رابط الصفحة بصفحة أخرى تريد فحصها." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA يتصل بهذا المتصفح الحالي. يمكنك التحكم في الصفحة وتنفيذ الإجراء وإغلاق " +"المتصفح عند الانتهاء." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "اطلب من وكيلك مشاهدة إجراء واحد" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتفقد هذه الصفحة أثناء النقر فوق تصدير " +"الملاحظات. ما هو الطلب الذي يقدمه ، وكيف هو CSV بنيت?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"مثال موجه. إعطاء وكيلك نقطة النهاية التصحيح, {ph0}، وعنوان الصفحة. السماح " +"لها بدء التقاط قبل النقر فوق." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"يكتشف وكيلك هدف الصفحة ، ويبدأ نافذة مراقبة ، ويقرأ الأدلة الناتجة. ويمكن " +"بعد ذلك فحص البرنامج النصي وراء التصدير." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "أو التقاط من المحطة" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "ابحث عن معرف الهدف للصفحة:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "ابحث عن الصفحة" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"اختر الهدف مع عنوان ورل مثال الملاحظات. استبدال {ph0} أدناه مع معرفه ، ثم " +"تشغيل:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "التقاط الثواني العشر القادمة" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"دع الأمر يتصل لبضع ثوان ، ثم انقر فوق {ph0}ملاحظات التصدير{ph1} في هذا " +"المتصفح. تصل النتيجة بعد انتهاء نافذة المراقبة." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"تتضمن النتيجة الملتقطة الصفحة المحددة ونشاط الشبكة أثناء تلك النافذة وشكل " +"استجابة جسون. الطلبات السابقة خارج هذا الالتقاط." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "قراءة الطلب وتصدير البرنامج النصي" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "سجلت مع REA 4.1.0 في مثال الملاحظات المحلية" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "حقيقة القبض" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "القيمة" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "الطلب" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "الرد" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "طلب البادئ" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * النصي" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "هيكل الاستجابة" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} مع {ph1} و {ph2} الحقول" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "قراءة البرامج النصية المحملة" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"يحدد الطلب مصدر البيانات ، و REA المحاضر {ph0} كما البادئ لها. اقرأ مصدر " +"البرنامج النصي الملتقط لمعرفة كيفية استخدام البيانات:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"يتم إنشاء التنزيل في الصفحة باستخدام استجابة جسون. ال CSV تأتي خطوة التنسيق " +"من البرنامج النصي ؛ يثبت التقاط الشبكة أن هذه النقرة مطلوبة {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"ابحث عن البرنامج النصي الذي يطلب {ph0}. كيف يفلت من العناوين التي تحتوي على " +"فواصل أو علامات اقتباس?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"للحصول على تثبيت JavaScript أو Electron التطبيق ، تواصل مع {ph0}سير عمل " +"التطبيق{ph1} لمتابعة الملفات وحدود العملية." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "تحليل المتصفح والشبكة — REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"مراقبة تصدير الملاحظات مع REA: حدد صفحة متصفح ، والتقاط نقرة ، وفحص الطلب " +"واتبع البرنامج النصي للتصدير." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "مراقبة المتصفح" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "نسخ بدء متصفح المثال" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "نسخة مثال موجه" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "نسخ ابحث عن الصفحة" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "نسخ التقاط الثواني العشر القادمة" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "نسخ قراءة البرامج النصية المحملة" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}الرئيسية{ph1} / أدلة" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REA أدلة." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"تحليل وظيفة الأم ، وهو Electron تصدير أو طلب متصفح. يتضمن كل دليل موجه ورمز " +"ونتائج." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "التحقيق الأول" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "إعداد REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "ربط مساعدك البرمجي أو استخدام REA من المحطة." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "تبدأ مع REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "برامج كود الآلة" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "استعادة حساب يسار / يمين موقف الصوت" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"تبدأ مع Windows لعبة قابلة للتنفيذ. فحص التعليمات ، اتبع المتصل ، وقراءة " +"الثوابت الرقمية والتحقق من ج المستردة." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "تحليل دليل برامج كود الآلة" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "اتبع أ CSV تصدير" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"التطبيق ملاحظات صغيرة ينتشر ميزة واحدة عبر العارض ، التحميل المسبق والعملية " +"الرئيسية. استخدام REA لتوصيل أبي ، قناة إيبك وكاتب الملف." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript & Electron دليل" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "للحصول على تطبيق أكبر حجما ، اتبع {ph0}Notionجسر الحافظة{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "سلوك المتصفح" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "مراقبة نقرة" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"افتح مثال ملاحظات العمل ، والتقط طلب تصدير وابحث عن الكود الذي يحول استجابته" +" إلى تنزيل." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "دليل مراقبة المتصفح" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "أدلة الهندسة العكسية — REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"تعلم REA من خلال أمثلة قصيرة العمل: حساب أصلي ، و Electron CSV تصدير وطلب " +"المتصفح." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}الرئيسية{ph1} / {ph2}أدلة{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "تتبع Electron{ph0}CSV تصدير." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"اتبع نقرة زر من واجهة برمجة تطبيقات الصفحة ، من خلال Electron التصنيف الدولي" +" للبراءات ، إلى CSV كاتب ملف." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "في هذا الدليل" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}المثال{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}اسأل وكيلك{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}تتبع رمز التصدير{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}جرب المثال{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}فحص CSV كاتب{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "أين تذهب\" ملاحظات التصدير\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"يستخدم هذا الدليل ملف صغير Electron التطبيق. النقر {ph0}ملاحظات التصدير{ph1}" +" يدعو أبي في الصفحة ، يعبر إلى العملية الرئيسية ، ويكتب CSV. ينتشر السلوك " +"عبر عدة ملفات." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "ال CSV تصدير عبر Electron العمليات" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}العارض-التحميل المسبق{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} يدعو أبي يتعرض من " +"قبل {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}بين العمليات{ph1}{ph2}{ph3}{ph4}{ph5}يستدعي التحميل المسبق قناة التصنيف" +" الدولي للبراءات: رسالة مسماة إلى العملية الرئيسية.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}العملية الرئيسية{ph1}{ph2}معالج تصدير{ph3}{ph4}{ph5} يعالج تلك القناة " +"ويدعو CSV كاتب.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} تنسيق الملاحظات → {ph1} يكتب {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA يطابق دعوة إيبك الحرفية إلى معالجها ويحدد أبي المكشوفة. يتم استنتاج " +"المسار من التعليمات البرمجية ؛ يمكن لالتقاط وقت التشغيل التحقق مما يتم " +"تنفيذه." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "اسأل عن CSV تصدير" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "{ph0}ربط وكيلك إلى REA{ph1} وإعطائها دليل التطبيق أو ASAR ملف:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "نسخ" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA للعثور على ما يحدث عندما أقوم بتصدير الملاحظات " +"في هذا التطبيق. أين هو CSV خلق?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "مثال موجه. قم بتضمين المسار المطلق إلى مجلد التطبيق أو {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA يقرأ ملفات التطبيق ويبني خريطة نقاط الدخول والوحدات وحدود العملية. " +"يستخدم وكيلك هذه الخريطة لتضييق التحقيق إلى ميزة التصدير." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "تتبع رمز التصدير" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "تستدعي الصفحة واجهة برمجة تطبيقات صغيرة" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"تعرف الصفحة اسم الطريقة. يعيش التنفيذ في التحميل المسبق ، مما يعرضه للعارض." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA المحاضر {ph0} والقناة الحرفية {ph1}. يقوم بإقران هذا الاستدعاء مع معالج " +"المطابقة الفردي في العملية الرئيسية." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"قراءة المعالج يجيب على السؤال الأصلي: {ph0} تنسيق الملاحظات ، والعملية " +"الرئيسية يكتب {ph1} في مجلد التنزيلات الخاص بالمستخدم." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"سجلت بواسطة REA 4.1.0 في المثال القابل للتنزيل أدناه. تصاحب مواقع المصدر " +"نتائج واجهة برمجة التطبيقات والقناة والمعالج." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "حلل المثال بنفسك" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}تحميل مثال الرمز البريدي{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "تصفح ملفات المصدر الستة" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "تحليل التطبيق الثابت" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"استبدل المسار بالمجلد الذي قمت بفك ضغطه. يجب أن تجد قناة إيبك واحدة ومعالج " +"واحد مطابقة في {ph0}. مواقع المصدر في {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"للتطبيق الخاص بك ، استخدم نفس الأمر مع دليله أو ASAR الطريق. يمكن للوكيل " +"اتباع سلسلة حرفية أو اسم واجهة برمجة التطبيقات أو قناة إيبك مع REAأدوات تتبع" +" الميزات." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "فحص CSV كاتب" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"اتبع {ph0} إلى معالجها. المدخلات التي تصل إلى CSV كاتب, وماذا يحدث إذا فشلت " +"كتابة الملف?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"استخدم مواقع المصدر لفحص هذه التفاصيل. يمكن أن تظل أسماء القنوات المحسوبة " +"والمعالجات الغامضة دون حل ؛ تمنحك ملاحظات وقت التشغيل طريقة أخرى للتحقيق " +"فيها." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}اتبع Notionجسر الحافظة{ph1} {ph2}تطبيق نفس النهج على حزم Electron " +"التطبيق.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}مراقبة تصدير المتصفح{ph1}{ph2}التقاط نقرة حقيقية ومعرفة أي طلب " +"يجعل.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}اتبع وظيفة أصلية{ph1}{ph2}الاستمرار في ثنائي عندما تعتمد ميزة على " +"التعليمات البرمجية الأصلية.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "JavaScript و Electron تحليل — REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"تتبع الملاحظات CSV تصدير من خلال أبي العارض ، التحميل المسبق ومعالج إيبك مع " +"REA. يتضمن ملفات أمثلة قابلة للتنزيل ونتائج تحليل تم التحقق منها." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "نسخة مثال موجه" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "نسخ تحليل التطبيق الثابت" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "{ph0}الرئيسية{ph1} / {ph2}أدلة{ph3} / تحليل برامج كود الآلة" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "استعادة DX-Ballفي{ph0}حساب عموم الصوت." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"افحص التعليمات الأصلية ، وحدد المدخلات والثوابت ، ثم تحقق من ج المستردة." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "في هذا الدليل" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}المثال{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}اسأل وكيلك{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}قراءة REA النتائج{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}استرداد والتحقق{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}استخدام ثنائي الخاصة بك{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "حساب اليسار / اليمين ستيريو الصوت لتحديد المواقع" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"في DX-Ball، ضربة لبنة توفر وضع شاشة أفقي. يحولها رمز الصوت إلى قيمة تحريك " +"يسار/يمين." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"وظيفة البداية, {ph0}، له نتيجة قصيرة لمفك التحويل: دعوة إلى {ph1}. REA كما " +"يعود تعليماته والمتصلين ، والتي تعطي وكيل وسيلة للتحقيق في الحساب المفقود." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "جديد على هذه الشروط?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}التعليمات:{ph1} الخطوات التي يقوم المعالج بتشغيلها ، تظهر في شكل قابل " +"للقراءة مثل {ph2} أو {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}نتيجة فك التحويل البرمجي / الكود الكاذب:{ph1} محاولة أداة تحليل لتحويل " +"التعليمات مرة أخرى إلى ج مثل التعليمات البرمجية. يمكن أن تفوت أجزاء ، كما في" +" هذا المثال." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}المتصل:{ph1} وظيفة تستدعي هذا. فإنه يدل على القيم التي يتم تمريرها في." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}العنوان:{ph1} موقع في البرنامج ، مكتوب بلغة سداسية عشرية ، مثل {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}الثوابت:{ph1} الأرقام الثابتة المخزنة في البرنامج ، وقراءة بايت الخام " +"وفك الشفرة." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "ثلاث أدلة ، حساب واحد" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * تعليمات{ph1}{ph2}إدخال عدد صحيح{ph3}{ph4}توفر قراءة المكدس القيمة " +"المستخدمة بواسطة تعليمات الفاصلة العائمة.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * المتصل{ph1}{ph2}تنسيق الشاشة{ph3}{ph4}وظيفة ضرب الطوب التي تستدعي " +"هذه الوظيفة تمر {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * بايت البيانات{ph1}{ph2}الثوابت الرقمية{ph3}{ph4}بايت المشار إليها " +"فك شفرة ل {ph5}, {ph6} وقيمة مقياس.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "REA لوازم التعليمات ، والعلاقة الدعوة وبايت. الوكيل يفسر لهم معا." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "اسأل عن السلوك" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"بعد {ph0}الاتصال REA إلى وكيلك{ph1} و {ph2}إعداد أداة تحليل أصلية{ph3}، قدم " +"الملف التنفيذي المحلي وسؤال:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "ما هي أداة التحليل التي يجب أن أستخدمها?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA يحتاج إلى واحد من هؤلاء لقراءة البرامج الأصلية:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0}Hopper{ph1} (macOS أو Linux): REAيكتشف الإعداد أو يعرض تثبيته. على " +"macOS, افتح Hopper مرة واحدة واختيار طريقة العرض أو تفعيل ترخيص قبل التحليل " +"الأول." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0}Ghidra{ph1} (macOS أو Linux؛ التجريبية على Windows): مجانا ، ولكن يحتاج" +" إلى القائمة Ghidra 12.1.س التثبيت و 64 بت جدك 21 أو أحدث." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0}IDA{ph1} (Windows): للحصول على القائمة IDA الإعداد مع MCP التسجيل." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "انظر {ph0}إعداد تحليل برامج رمز الجهاز{ph1} للخطوات." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "نسخ" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لمعرفة كيف DX-Ball يحسب بالغسل الصوت. شرح الحساب" +" وإظهار التعليمات البرمجية.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"مثال موجه. إعطاء وكيلك الطريق إلى المحلية الخاصة بك DX-Ball 1.07 قابل " +"للتنفيذ. REA لا يشمل DX-Ball، لذا استخدم نسختك الخاصة ، أو اطرح نفس النوع من" +" الأسئلة حول صغيرة أخرى Windows برنامج لديك." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "كيف يمكنني الحصول على المسار الكامل للملف?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1} في مستكشف الملفات ، انقر بزر الماوس الأيمن فوق الملف " +"واختر {ph2}نسخ كمسار{ph3}. على Windows 10 ، عقد التحول أثناء النقر بزر " +"الماوس الأيمن." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0}macOS:{ph1} في الباحث ، انقر بزر الماوس الأيمن فوق الملف ، وعقد الخيار " +"واختيار {ph2}نسخ \" as \" كاسم مسار{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "{ph0}أي نظام:{ph1} اسحب الملف إلى نافذة طرفية ويظهر مساره." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "قراءة REA النتائج" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "قراءة المدخلات" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"تقوم التعليمات بتحميل وسيطة عدد صحيح وتحويلها لحساب الفاصلة العائمة. هذا هو " +"الإدخال الغائب عن عرض الكود الكاذب الأول." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "اتبع المتصل" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA يحدد المتصل ضرب الطوب. تعليماته السابقة تضاعف إحداثيات البلاط في 30 ؛ " +"مضيفا {ph0} (20) يعطي موقف شاشة الطوب." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "قراءة الثوابت المشار إليها" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"يشير الحساب إلى هذه العناوين. قراءة وحدات البايت تزود القيم الفعلية ؛ يخبر " +"ترتيب التعليمات الوكيل كيف يتم استخدامها." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "اكتب وتحقق من الوظيفة المستردة" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"بمقياس 1.0 ، مواضع الشاشة 0 و 320 و 640 خريطة إلى -500 و 0 و 500 قبل تحويل " +"عدد صحيح. يضع الحساب وسط الشاشة في وسط حقل الاستريو." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"الوكيل المستخدم REAشيكات منفصلة مقارنة 3205 المدخلات ضد وظيفة س 86 الأصلي " +"واستنساخها كل 63 بايت المترجمة من وظيفة كاملة." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}انظر التحقيق الكامل ومقارنة التجميع إلى ج{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "تحاول ذلك مع ثنائي الخاصة بك" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}ربط تحليل مزود برامج رمز الجهاز{ph1}، ثم امنح وكيلك ملف تنفيذي محلي أو " +"مكتبة وميزة للتحقيق فيها. تتضمن أسئلة البداية المفيدة \"كيف يتم تحليل هذا " +"الملف?\"أو\" ما هي الوظيفة التي تتعامل مع إجراء القائمة هذا?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"إذا كنت تعرف بالفعل اسم دالة أو عنوانا ، فيمكنك الاستعلام عنه من الجهاز. " +"للحصول على تكوين Ghidra تركيب:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "تحليل الوظيفة" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"استبدل المسار المستهدف و {ph0} مع اسم الوظيفة أو العنوان الخاص بك. كل CLI " +"يستورد الاحتجاج ويحلل الثنائي ، ثم يغلق جلسته. وكيلك MCP استعلامات إعادة " +"استخدام ثنائي المستوردة في حين أن الدورة مفتوحة." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"اقرأ الكود الكاذب جنبا إلى جنب مع التعليمات والمراجع. عندما تترك نتيجة " +"مكالمة أو قيمة دون حل ، استخدم هذا الموقع كسؤال تالي." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "التحليل الثنائي الأصلي — REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"استعادة حساب الأصلي مع REA: فحص التعليمات ، اتبع المتصل ، وقراءة الثوابت " +"والتحقق من إعادة بنائها ج." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "تحليل برامج كود الآلة" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "نسخة مثال موجه" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "نسخ تحليل وظيفة" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "إعداد REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}إعداد REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}ما هو إعادة?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}كيف يساعدك REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}لعبة ديناصور{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}آلة حاسبة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}حاول REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}تعمّق أكثر{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}مساعدة وردود الفعل{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}المجتمع{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "الهندسة العكسية ، مع مساعدك البرمجي" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "اكتشف كيف{ph0}تعمل البرامج." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "يوفّر REA لمساعد البرمجة لديك أدوات لفحص البرنامج وشرح ما يفعله." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "تعرف بالفعل إعادة? {ph0}تخطي إلى أدلة التحليل →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "تريد أن تذهب أعمق? {ph0}اقرأ المدونة Blog{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "انسخ هذا الطلب إلى مساعد البرمجة لديك:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "نسخ" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "أو نفّذ هذا الأمر في الطرفية:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "راجع خطة الإعداد ووافق عليها، ثم أعد تشغيل المساعد." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "ما هي الهندسة العكسية؟" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "فهم طريقة عمل البرنامج من خلال {ph0}فحص البرنامج نفسه.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"الهدف: فهم ميزة جيدا بما فيه الكفاية ل {ph0}اشرح ذلك{ph1}, {ph2}تغيير " +"ذلك{ph3} أو {ph4}إعادة بنائه.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "قبل REA · تبحث {ph0}بنفسك{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} فك رموز الفروع" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} تتبع المكالمات" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} استعادة القاعدة" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}الأصل · 64 * تعليمات مختارة{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * أي فرع?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0/5 ب? 0 * 5 ج?{ph1} اثنين يقفز إلى نفس المكان. التي مشغلي هذه?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "ابحث عن معرفات الأوامر ، ثم قم بتسمية الفرع." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "تقسيم ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "ضرب ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · ماذا تفعل الدوال المستدعاة؟" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 واضح. المكالمات هي مجرد عناوين. {ph0}أي واحد يقسم? القيمة التي يذهب " +"في?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "افحص وظائف المساعد وتتبع القيم المخزنة." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "تقسيم" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * ما هي القاعدة?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"يتضاعف هذا المسار من خلال المدخلات الأخرى. لذا {ph0}10 ٪ تعني 10 ٪ من " +"200{ph1} بعد +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "قم بتسمية المعاملات وتحقق من كلا مساري المشغل." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "منطق الخبراء التوضيحي" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}يمكنك فك التعليمات ، اتبع المكالمات وظيفة وإعادة بناء الحساب.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "مع REA · تسأل {ph0}مساعدك{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "طلب واحد فقط." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "اسأل المساعد {ph0}بكلمات بسيطة.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال موجه * آلة حاسبة" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "مثال على الإجابة * بناء على النتائج" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "بعد + ، يأخذ زر ٪ {ph0}نسبة مئوية من الرقم الأول.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "ما يوفّره REA" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "تعليمات المعالج ، رمز فك والمكالمات." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "ما يشرحه المساعد" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "أي فرع ينطبق ، ما يحسب وكيفية إعادة بنائه." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"التجمع المحدد من دلل آلة حاسبة مثبتة. الأفكار والرد توضح النتائج. {ph0}تواصل" +" مع مثال الآلة الحاسبة ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}دعونا نحاول مثالين.{ph1} تغيير سرعة اللعبة ، ثم العودة إلى آلة حاسبة " +"وإعادة بناء زر ٪ لها." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "مثال 01 · Chromeلعبة الديناصورات" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "لماذا يصبح الديناصور أسرع؟" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "الهدف" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "إعادة بناء اللعبة مع {ph0}سرعة قابلة للتعديل.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "لماذا عكس هندسة ذلك?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"لإعادة إنتاج تسارعها ، نحتاج إلى {ph0}القاعدة في لعبة الجري{ph1}: مدى سرعة " +"يبدأ ، وكم يزيد وعندما يتوقف." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "جرّب اللعبة المعاد بناؤها" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "العب" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "اقفز ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "ابدأ من جديد" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "السرعة" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "استخدم قاعدة التسارع المستردة" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "القاعدة الأصلية: ابدأ من 6 ، ثم زد نحو 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "حرك شريط التمرير لضبط السرعة الخاصة بك. الفضاء أو القفز يزيل الصبار." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"تمكين JavaScript للعب إعادة الإعمار. يظل الرمز والشرح أعلاه قابلا للقراءة." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "ما أعاده REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}البرنامج النصي قيد التشغيل بالفعل في الصفحة.{ph1} يقرأ الوكيل وظيفة " +"التحديث وإعدادات السرعة ، ثم يستخدم هذه القاعدة في لعبة جديدة." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال موجه * لعبة ديناصور" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتفقد هذه اللعبة ديناصور. لماذا لا تحصل على " +"أسرع? عرض قاعدة السرعة ، ثم بناء نسخة صغيرة مع سرعة قابل " +"للتعديل.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "الهدف الذي تم فحصه: {ph0}وايو Chromium- مستمد متصفح الطبعة{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}تبدأ في 6.{ph1} إضافة {ph2}0.001{ph3} كل تحديث دون تصادم ، في حين أن " +"السرعة أقل {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "افتح مختبر السرعة →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "ماذا يفعل كل جزء" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 · REA{ph1}{ph2}اقرأ البرنامج النصي للعبة الجري{ph3}{ph4}إرجاع الرمز " +"الفعلي والإعدادات إلى الوكيل.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * وكيلك{ph1}{ph2}إعادة بناء القاعدة ، إضافة عنصر " +"تحكم{ph3}{ph4}استخدم التسارع المسترد في لعبة صغيرة مع شريط تمرير " +"السرعة.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * أنت{ph1}{ph2}تغيير السرعة واللعب{ph3}{ph4}جرب التسارع الأصلي ، ثم " +"اختر وتيرتك الخاصة.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "راجع البرنامج النصي والشيكات وكيفية تجربة التحليل" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA تفقد إصدار متصفح هتب من خلال اتصال التصحيح المحلي وعاد تحميلها {ph0}، " +"بما في ذلك مصدرها وهضمها." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"اتصلنا بوظيفة تحديث اللعبة الأصلية في فحص متصفح متحكم فيه ، مع تعطيل العقبات" +" والجدولة التلقائية. بعد 4000 تحديث ، كانت السرعة 10.0 ؛ بعد 10000 ، كان " +"13.0 ، مقربا إلى رقم عشري واحد." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"تحافظ اللعبة المصغرة الجديدة على قاعدة السرعة هذه. يعد رمز الرسم والقفز " +"والتصادم تطبيقا تعليميا صغيرا. {ph0}افتح المختبر{ph1} لرؤية رمز جديد وتشغيل " +"نفس الاختيار السرعة." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"لتفقد الهدف بنفسك ، اتبع {ph0}خطوات اتصال المتصفح{ph1} باستخدام {ph2}صفحة " +"الديناصورات{ph3}. امنح وكيلك عنوان ورل للصفحة ونقطة نهاية التصحيح المحلية ، " +"ثم انسخ المطالبة أعلاه." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "{ph0}فحص رمز السرعة{ph1} · {ph2}Chromium الكتاب * رخصة بسد{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "مثال 02 · Windows آلة حاسبة" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "أعد بناء زر % في الآلة الحاسبة." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "بناء آلة حاسبة صغيرة أن يعالج {ph0}كلا + و correctly بشكل صحيح.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"يستخدم نفس الزر {ph0}قواعد مختلفة بعد + و ×.{ph1} نقوم بفحص التطبيق المثبت " +"للعثور على الرقم الذي يتم تطبيق النسبة عليه." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "جرب الحساب" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "إعادة ضبط" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10 ٪ من 200 = 20. ثم 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "توضيح تفاعلي لقاعدة النسبة المئوية التي تم فحصها." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}فرع واحد يقسم على 100. الآخر يتضاعف أيضا في الرقم الأول.{ph1} يستخدم " +"الوكيل كلاهما لإعادة إنشاء الزر٪." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "لهذا المثال, {ph0} و {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال موجه * إعادة بناء زر ٪" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتفقد Windows زر ٪ آلة حاسبة. استعادة القواعد " +"بعد + و × ، ثم بناء آلة حاسبة صغيرة تستخدم على حد سواء.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "مع +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}خذ 10٪ من الرقم الأول.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "مع ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}تحويل 10 ٪ إلى 0.1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "من التطبيق المثبت إلى زر ٪ العمل" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 · REA يقرأ المكتبة{ph1}{ph2}إرجاع رمز المعالج ٪ {ph3}{ph4}تتحقق " +"الوظيفة من المشغل وتستخدم الثابت {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * وكيلك يفسر ذلك{ph1}{ph2}شرح وإعادة إنتاج القواعد{ph3}{ph4}تحقق من " +"الفرع مع مصدر مايكروسوفت ، ثم حاول + و × أعلاه.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "انظر الرمز الحقيقي وكيف تم التحقق من الإجابة" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"تفتيشها مع REA 4.1.0: Windows آلة حاسبة 11.2508.4.0, س 64. يستخدم الملخص " +"المقروء أسماء من المصدر العام لمايكروسوفت لشرح الفرع المسترد." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}النسبة المئوية للتنفيذ{ph1} · {ph2}حالات اختبار مايكروسوفت{ph3} · " +"{ph4}دليل الإعداد الأصلي{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "التحقيق الأول الخاص بك" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "حاول REA على تطبيق صغير." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"تحميل ملاحظاتنا سبيل المثال ، تتبع لها CSV تصدير ، وتحقق من إدخال واحد تم " +"تغييره." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "جرب المثال الإرشادي" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "هل تريد التعمّق أكثر؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"أخبر وكيلك بما تريد فهمه أو بنائه. مع REA، يمكنك العمل معا على أي شيء من " +"{ph0}استنساخ هذا الموقع{ph1} إلى {ph2}إعادة بناء لعبة من تنفيذها.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال موجه * الموقع" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "نعم ، هذا واحد." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال موجه * إعادة بناء اللعبة" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لإعادة بناء هذه اللعبة من تنفيذها. استعادة منطق " +"اللعب في ج واختباره ضد الأصلي.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}انظر ال DX-Ball دراسة حالة case{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "لخطوات الإعداد والتحليل ، اختر هدفك:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "برامج كود الآلة" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"فحص الوظائف والسلاسل والمراجع وعلاقات استدعاء الوظائف في الملفات التنفيذية " +"والمكتبات." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "تحليل دليل برامج كود الآلة" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"وحدات الخريطة ، والطرق ، والتصنيف الدولي للبراءات والتبعيات الأصلية من مجلد " +"التطبيق أو ASAR أرشيف." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "سير عمل التطبيق" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "نشاط المتصفح ووقت التشغيل" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"التقط المتصفح المحدد أو نشاط العملية ، ثم قارن النتائج عبر عمليات التشغيل." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "دليل مراقبة المتصفح" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "لديك أسئلة؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}قراءة التعليمات{ph1}, {ph2}الدردشة معنا على Discord{ph3}، أو {ph4}افتح " +"أ GitHub القضية{ph5} لالبق وطلبات الميزة." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "انضم إلى المجتمع" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"تبادل التحقيقات والحصول على مساعدة من الآخرين REA المستخدمين على Discord. " +"اتبع REA على س للحصول على تحديثات المشروع." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA - الهندسة العكسية لعامل الترميز الخاص بك" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"تطبيقات الهندسة العكسية والثنائيات وسلوك المتصفح مع مساعدك البرمجي. اتبع " +"أدلة واضحة وجرب أمثلة تفاعلية مع REA." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "نسخ REA موجه التثبيت" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "نسخ أمر الإعداد" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "اتبع تحليل الآلة الحاسبة اليدوية" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "نسخة حاسبة النسبة المئوية السؤال" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"ديناصور لعبة صغيرة. استخدم زر القفز أو اضغط على الفضاء أثناء تركيز اللعبة." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "نسخة ديناصور تحليل موجه" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "اختر الحساب" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "نسخ حاسبة تحليل موجه" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "نسخ موجه مشروع موقع الويب" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "نسخة لعبة إعادة الإعمار موجه" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}الرئيسية{ph1} / {ph2}يعرض{ph3} / أندرويد" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "دراسة حالة · Aegis الموثق" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "كيف يمكن للمصادق{ph0}إنشاء رمز تسجيل الدخول?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"يتغير الرمز المكون من ستة أرقام كل 30 ثانية. استخدام REA للعثور على الحساب " +"في الروبوت APK، ثم إعادة بنائه مع ساعة يمكنك التحكم." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 · أندرويد * الإصدار الرسمي APK * 6.9 ميغابايت" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "عرض Aegis على GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "من APK إلى رمز يمكنك إعادة إنتاجه" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * حدد موقع الميزة{ph1}{ph2}3 ، 077 الطبقات generating طرق " +"توليد{ph3}{ph4}REA يبحث في الحزمة ويتتبع التعليمات البرمجية المستخدمة من قبل" +" إجراءات العرض والنسخ.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * قراءة الحساب{ph1}{ph2}الوقت + مفتاح الحساب - ستة " +"أرقام{ph3}{ph4}REA إرجاع الأساليب والافتراضات. يشرح الوكيل كيف يتناسبون " +"معا.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * إعادة البناء والتحقق{ph1}{ph2}تغيير الساعة. مشاهدة " +"رمز.{ph3}{ph4}يستنسخ العرض التوضيحي الجديد للمتصفح القاعدة ويتحقق منها مقابل" +" الحالات المرجعية العامة.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "في دراسة الحالة هذه" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}اسأل وكيلك{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}جرب مولد الكود{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}العثور على رمز مع REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}قراءة الحساب{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}تحقق من إعادة الإعمار{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}فحص APK نفسك{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "اسأل وكيلك" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"يعرض التطبيق رمز تسجيل دخول متغير. نريد أن نجد {ph0}ما الذي يجعلها " +"تتغير{ph1} وإعادة إنتاج هذا السلوك." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "نسخ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"مثال موجه للتحميل APK، مع REAالصورة تحليل الروبوت تكوينها. {ph0}الحصول على " +"APK وإعداد التحليل ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "جرب مولد الكود" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"يقوم التطبيق بتجميع الوقت في {ph0}كتل 30 ثانية.{ph1} فهو يجمع بين رقم الكتلة" +" ومفتاح الحساب لإنشاء رمز. نفس المفتاح وكتلة تنتج نفس الرمز." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "حرك الساعة عبر 60 ثانية" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "الوقت" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "ثواني" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "لدينا مثال قابل للتعديل على مدار الساعة" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "كتلة 30 ثانية" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "بلوك" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 ثانية{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "كود تم إنشاؤه" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "مفتاح الحساب + كتلة - ستة أرقام" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "مثال الوقت ، بالثواني" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 ثانية" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 ثانية" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"في 59 ثانية: {ph0}287082.{ph1} في 60 ثانية: {ph2}359152.{ph3} الانتقال داخل " +"كتلة واحدة يترك الرمز دون تغيير." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"المفتاح ثابت ، عام {ph0}رك 6238 بيانات الاختبار{ph1}. يقوم العرض التوضيحي " +"بتنفيذ الحساب المسترد من APK." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"يوضح الرسم البياني النتيجة في 59 ثانية. تمكين JavaScript لتغيير الساعة." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "العثور على رمز مع REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "تضييق APK إلى ثلاث فئات" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} هو مرشح الحساب ؛ يتعلق الاثنان الآخران بشريط التقدم والحسابات " +"المستوردة. TOTP تعني كلمة مرور لمرة واحدة تستند إلى الوقت." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "قم بتوصيل المولد بشاشة التطبيق" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA يحدد الحمل الزائد للطابع الزمني ويجد المتصلين بالطريقة الأساسية. التفتيش" +" {ph0} ثم يظهر استدعاء العرض {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"تظهر الطلبات مسار إدخال مختصر. أسماء فئة النتيجة حذف المشترك {ph0} بادئة." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "قراءة الحساب" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA المرتجعات {ph0}تحويل الساعة والإعدادات الافتراضية وطرق التوليد.{ph1} قام" +" المنشئون بتعيين فاصل زمني مدته 30 ثانية وستة أرقام ؛ تحول طريقة الطابع " +"الزمني الثواني إلى رقم كتلة." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} كتلة الوقت" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} مفتاح + كتلة" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} ستة أرقام" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}الوقت يختار الكتلة.{ph1} ثواني 30 عبر 59 كل تعطي كتلة 1. في 60 ثانية ، " +"تصبح الكتلة 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}المسائل الرئيسية أيضا.{ph1} يجمع المولد بين مفتاح الحساب والكتلة. يمكن " +"للحساب الذي يحتوي على مفتاح مختلف إظهار رمز مختلف في نفس الوقت." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}احتفظ بستة أرقام.{ph1} الباقي بعد القسمة على 1 ، 000 ، 000 مبطن " +"بالأصفار عند الحاجة ، لذلك يمكن أن يبدأ الرمز بـ 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"مقتطفات من عدة طرق تفتيشها ، مع التفاف خط للعرض. اللوحة اليمنى هي ملخص " +"توضيحي. {ph0}Aegis الرمز هو غل-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "داخل المولد" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"المفرج عنهم APK يضع {ph0} في {ph1}. REA يتبع المكالمة من {ph2} ويعيد هذا " +"الجسم ؛ المصدر الأصلي يدعو المساعد {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"يحدد بايت التجزئة الأخير موضعا. توفر أربعة بايت في هذا الموضع رقما موجبا 31 " +"بت ؛ التنسيق يقللها إلى العدد المطلوب من الأرقام. تحدد الوسيطة الأخيرة " +"للمنشئ فرع تنسيق التعليمات البرمجية الذي تم تقديمه بواسطة التجميع." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}قارن مع مصدر الإصدار المطابق{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "تحقق من إعادة الإعمار" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"قمنا بتجميع المحدد REA- عاد أساليب جافا في برنامج اختبار صغير. تطابق إنتاجهم" +" مع إعادة بناء مستقلة على {ph0}133 حالة اختبار{ph1}، بما في ذلك حدود كتلة " +"الوقت والرموز التي تبدأ بالصفر." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "مثال الوقت" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "رمز مكون من ستة أرقام" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 ثانية" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 ثواني" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"يتطابق المولد أيضا مع الستة المنشورة SHA-1 الحالات المرجعية في {ph0}رك " +"6238{ph1}. تحقق من تنفيذ المتصفح ضدهم:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "تشغيل الشيكات المرجعية" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "اقرأ حساب العرض التوضيحي" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"تستخدم الحالات المرجعية ثمانية أرقام. يتحقق الشيك أيضا من نتائجهم المكونة من" +" ستة أرقام." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"يعمل التحقق استخراج أساليب جافا والتجريبي الجديد. الروبوت APK تم تفتيشه بشكل" +" ثابت." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "فحص APK نفسك" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}إعداد REA{ph1} على macOS أو Linux، ثم قم بتنزيل هذين الملفين في نفس " +"المجلد. على Windows، استخدم أ Linux البيئة مثل وسل." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"تحليل الروبوت يحتاج جدك الكامل 17 أو في وقت لاحق. حدده مع {ph0} أو {ph1}. " +"هذه الحالة تستخدم جدك 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "نقطة REA في ملف الموفر وفحص APK:" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"وكيلك يمكن أن تستمر من خلال REAفي CLI باستخدام موجه أعلاه. ل MCP، إضافة " +"{ph0} إلى REA بيئة الخادم وإعادة توصيله." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"السؤال التالي: {ph0}ماذا يحدث عندما يستخدم الحساب ثمانية أرقام أو فاصل زمني " +"مختلف?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "المصادر" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}الرسمية Aegis 3.4.3 الإصدار{ph1} · {ph2}مطابقة مصدر الالتزام{ph3} · " +"{ph4}رخصة جي بي إل-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" +"{ph0}رك 6238 الحالات المرجعية{ph1} · {ph2}بيانات الاختبار التجريبي{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"تفتيشها مع REA 6.1.0 في 9 أكتوبر 2026. يتم إضافة مقتطفات غير مجمعة إلى " +"Aegis; الرسم التخطيطي والملخص المقروء وإعادة بناء المتصفح هي مواد تعليمية " +"جديدة." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK الهندسة العكسية: رموز تسجيل الدخول — REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"فحص Aegis اندرويد APK مع REA، استعد حساب رمز تسجيل الدخول المكون من ستة " +"أرقام وجرب إعادة الإعمار بساعة قابلة للتعديل." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK دراسة حالة" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "نسخ Aegis مثال موجه" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "اتبع حساب رمز تسجيل الدخول" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "نسخ APK قيادة التفتيش" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}الرئيسية{ph1} / {ph2}يعرض{ph3} / فرقة العمل" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "دراسة حالة * أسفل 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "ابحث عن العلم في{ph0}ثنائي كتف." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"استخدام REA لفحص مدقق علم صغير ، حول قواعده إلى معادلات وابحث عن إدخال يجعل " +"البرنامج الأصلي يطبع {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "مربعات ملثمين مدقق العلم * سهل · Linux إكس 86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "عرض التحدي الأصلي" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "من ثنائي إلى إجابة محددة" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * ابحث عن الشيك{ph1}{ph2}سلاسل-فحص وظائف{ph3}{ph4}REA يجد المطالبة " +"ومراجعها والرمز الذي يقبل أو يرفض الإدخال.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * استخراج القواعد{ph1}{ph2}36 حرفا * 26 مبالغ{ph3}{ph4}REA إرجاع " +"التعليمات والبيانات وراء كل الاختيار. الوكيل يحولهم إلى معادلات.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * حل وتشغيل{ph1}{ph2}العلم المسترد-صحيح!{ph3}{ph4}نص بيثون يحل " +"المعادلات. REA يلتقط البرنامج الأصلي قبول النتيجة.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "التحدي هو جوزيف ، الذي نشر في مستودع داوندركتف الرسمي." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "في دراسة الحالة هذه" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}ابحث عن رمز التحقق{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}قراءة قناع واحد{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}الجمعية إلى رمز قابل للقراءة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}حل المعادلات{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}تحقق من الجواب{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}انها محاولة لنفسك{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "ابحث عن رمز التحقق" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"النشرة هي ملف 15 كيلو بايت قابل للتنفيذ. يسأل عن العلم ، ثم يطبع {ph0} أو " +"{ph1}. ابدأ بطلب بسيط إلى وكيلك." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "نسخ" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتحليل مس-فلاغ-تشيكر والعثور على العلم. اشرح " +"كيفية عمل الشيكات ، ثم تحقق من الإجابة باستخدام البرنامج " +"الأصلي.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"مثال موجه ، مع التحدي الذي تم تنزيله متاح محليا وتحليل موفر برامج رمز الجهاز" +" المتصل." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "اتبع موجه الإدخال إلى وظيفته" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"يعطي المرجع الوكيل مكانا للتحقيق ، على الرغم من إزالة أسماء الوظائف الأصلية " +"القابلة للتنفيذ." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "قراءة المدقق واثنين من المساعدين" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"الحلقة الأولى نسخ 36 رموز الأحرف. تقوم حلقة الفحص بفك تشفير القناع ، وتلخص " +"الرموز المحددة وتقارن النتيجة برقم مخزن. لها {ph0}- خطوات بايت عبر {ph1} " +"بايت تعطي 26 أقنعة." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"يتم اختيار هذه النتائج من جديد REA تحليل. يتم تقصير مسار الهدف المحلي للعرض " +"؛ تشير العناوين إلى REAالصورة المستوردة." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "شيك واحد يكشف عن حرف واحد" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"المدقق يرتب المدخلات في شبكة 6 6 6. يختار القناع الخلايا التي تساهم في " +"المجموع. يستخدم ترميزه المضغوط أرقاما سالبة لتخطي الخلايا والأرقام الموجبة " +"لتحديدها." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "الاختيار السابع يختار موقف واحد فقط. {ph0}الشكل المفتوح{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "اقرأ القناع وهدفه من الثنائي" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"التعليمات {ph0} يقرأ بايت القناع كقيم موقعة. هذا هو السبب {ph1} يعني -21. " +"الهدف هو عدد صحيح صغير. معا ، تخبر هذه البايتات الوكيل أن {ph2}، بحيث تكون " +"هذه الشخصية {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "من التعليمات إلى فحص قابل للقراءة" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"حدد خطوة لتوصيل مساعد التلخيص ووظيفة الاتصال الخاصة به بنفس القاعدة في ج." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} ابدأ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} اختر" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} إضافة" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} تقدم" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} قارن" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * تعليمات أصلية مختارة" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "قراءة ج * ملخص الاختيار واحد" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * ابدأ من الصفر.{ph1} {ph2} يحمل المبلغ الجاري." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * تحقق من خلية القناع.{ph1} القيمة الصفرية تتخطى الحرف ؛ القيمة غير " +"الصفرية تتضمنها." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * إضافة رمز حرف.{ph1} يتم إضافة عدد صحيح الإدخال في نفس الإزاحة إلى " +"المجموع." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * الانتقال إلى الخلية التالية.{ph1} تقدم الحلقة الأصلية أربعة بايت " +"لكل عدد صحيح وتزور ستة صفوف من ست خلايا." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * مقارنة مع الهدف المخزن.{ph1} تتلقى وظيفة الاستدعاء المبلغ في " +"{ph2}. عدم تطابق يقفز إلى {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"تأتي التعليمات من مساعد التلخيص ووظيفة الاتصال الخاصة به. ال ج هو ملخص " +"توضيحي بأسماء وصفية وحلقة مسطحة من 36 خلية." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "حل المعادلات 26" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"تختار معظم الأقنعة عدة خلايا. على سبيل المثال ، يضيف الفحص الأول 16 رمزا " +"للأحرف ويتطلب إجمالي 1441. تعطي التحديدات المتداخلة معادلات يمكن أن يحلها نص" +" بايثون صغير معا." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "بيثون * حلالا مقتطفات" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"ض3 هو حلالا يجد قيما تفي بهذه المعادلات. يستخدم هذا المقتطف الشيكات " +"المستخرجة ويفترض أ {ph0} العلم مع الحروف والأرقام والشرطات السفلية والأقواس." +" يشمل التنزيل الكامل جميع الأقنعة والأهداف الـ 26." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "تحميل حلالا كاملة" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "تحقق من الإجابة مع البرنامج الأصلي" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REAالصورة القبض على عملية يسجل تنفيذ الأصلي قبول العلم حلها. تغيير حرف واحد " +"محدد من {ph0} إلى {ph1} يجعل المبلغ الأول 1440 بدلا من 1441, والبرنامج يرفض " +"ذلك." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "المدخلات" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "الإخراج المرصود" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "رمز الخروج" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "علم حلالا" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "تم تغيير حرف واحد" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "إظهار العلم المسترد والإخراج الملتقط" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * إخراج البرنامج الأصلي" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "نسخ العلم" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"تتطابق القيمة المستردة أيضا مع العلم في البيانات الوصفية للتحدي المنشورة " +"للمنظمين ، والتي تم فحصها بعد حل الثنائي." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "المصدر والهوية المستهدفة وتفاصيل التحليل" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"تحليل جديد واثنين من عمليات الالتقاط في 8 أكتوبر 2026 ، باستخدام REA 4.1.0 " +"مع Ghidra 12.1.4 على Linux 64. ثنائي هو جردت س 86-64 قزم ، 15 ، 248 بايت." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"تم فحص مراجع السلسلة والوظائف والثوابت قبل قراءة مصدر أو حل المنظمين. تم " +"بناء بيثون حلالا والرسم البياني من تلك REA النتائج." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}قارن مع مصدر المنظمين{ph1} · {ph2}تحدي البيانات الوصفية والعلم{ph3} · " +"{ph4}REA ملاحظات الأدلة{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "انها محاولة لنفسك" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"تحميل التحدي الأصلي وحلالا في مجلد واحد. استخدم المطالبة أعلاه للتحقيق مع " +"وكيلك ، أو قم بتشغيل البرنامج النصي المضمن." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "محطة * حل وتشغيل" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"يقوم البرنامج النصي بطباعة علامة مرشح ؛ الصقه في موجه البرنامج. حل يحتاج " +"بيثون و {ph0}. تشغيل الاحتياجات القابلة للتنفيذ الأصلي Linux س86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "إعداد REA مع مساعدك البرمجي" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "كتف الهندسة العكسية: داونندركتف مدقق العلم — REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"استخدام REA لحل المربعات ملثمين مدقق العلم. ابحث عن وظائف الفحص واستخرج " +"الأقنعة وقارن العلم المسترد بالبرنامج الأصلي." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "دراسة حالة مدقق العلم" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "نسخة كتف مثال موجه" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "معادلة قناع كتف ؛ التمرير أفقيا على شاشات أصغر" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"يتخطى القناع السابع 21 خلية ، ويختار الموضع 21 ، ثم يتخطى 14. فقط تلك الخلية" +" تساهم في المجموع. رمز الحرف المطلوب هو 55 ، مما يعني أن الحرف هو 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "اتبع الاختيار كتف" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "نسخ الجمعية كتف" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "نسخة قابلة للقراءة كتف الاختيار" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "نسخة كتف حلالا مقتطفات" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "نسخ العلم المسترد" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "نسخ كتف حلالا الأوامر" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}الرئيسية{ph1} / {ph2}يعرض{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "دراسة حالة · DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "إعادة البناء DX-Ball{ph0}من قابل للتنفيذ." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"الهدف هو نسخة ج قابلة للصيانة من 1996 Windows لعبة. REA يساعد الوكيل على فحص" +" الأصل ، وظيفة واحدة في كل مرة." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows ط386 * ج · REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"وظيفة واحدة ، من قابل للتنفيذ لفحص ج. REA يوفر التعليمات والمتصلين وقراءة " +"البيانات ؛ ينفذ مشروع إعادة الإعمار ويختبر النتيجة. {ph0}الشكل المفتوح{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "في دراسة الحالة هذه" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}المشروع{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}عموم الصوت{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}التحقق من النتيجة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}مواصلة العمل{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "وظائف جيم التي تمت صيانتها" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "مقارنات مع الكود الأصلي" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "وظائف مع مطابقة بايت المترجمة" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"نقطة تفتيش المشروع: 7 أكتوبر 2026. {ph0}التقدم ليدجر{ph1} · {ph2}تغطية " +"الاختبار{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "المشروع حتى الآن" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"يغطي الرمز المسترد معالجة اللوحة والموارد ، وضربات الطوب ، والرسوم المتحركة " +"، والجسيمات ، وإنتاج المكافآت. توفر البنيات الحالية أدوات فحص ومكتبة تحليل. " +"يستمر العمل في اللعبة القابلة للعب مع فيزياء الكرة والمجداف ومعالجة الطاقة و" +" Windows التكامل." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "العثور على حساب يسار / يمين موقف الصوت" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"عندما يتم ضرب الطوب ، يتم تمرير موضعه الأفقي إلى رمز الصوت. التحقيق اللازمة " +"لاستعادة كيف أن تنسيق الشاشة يصبح قيمة بالغسل يسار/يمين." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "نسخ" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لمعرفة كيف DX-Ball يحسب بالغسل الصوت. شرح الحساب" +" وإظهار التعليمات البرمجية.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"مثال موجه لعامل الترميز الخاص بك ، مع توفر الملف التنفيذي المحلي. التحقيق " +"أدناه يوضح REA الاستفسارات والأدلة وراء الجواب." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"الوكيل المستخدم REA لتفقد وظيفة ، اتبع المتصل لبنة ضرب وقراءة الثوابت من " +"الملف القابل للتنفيذ. قدمت هذه النتائج المدخلات والحساب اللازمين لكتابة دالة" +" ج أدناه." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"نتيجة التحليل الأولى للوظيفة من أجل {ph0} وشملت بسيودوكود إعلان {ph1} " +"والدعوة {ph2}. أظهر عرض التعليمات الخاص به إدخال مكدس وعمليات الفاصلة " +"العائمة. أعطى هذا التناقض الوكيل سببا ملموسا لمواصلة التحقيق." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "عرض فك التحويل الأول" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"يظهر الإخراج مكالمة تحويل. قراءة التعليمات أدناه تكشف عن المدخلات والتغذية " +"حساب تلك الدعوة." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "الإجابة على ثلاثة أسئلة من خلال REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "استعادة المدخلات المفقودة" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"تتضمن نتيجة الوظيفة تعليمات جنبا إلى جنب مع الكود الكاذب ووظائف الاتصال. " +"هنا, {ph0} يعرض الإدخال الصحيح المفقود من طريقة عرض برنامج فك التحويل " +"البرمجي." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "اتبع المتصل لفهم المدخلات" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA حدد هذا المتصل في النتيجة الأولى. مقياس التعليمات السابق {ph0} بواسطة 30" +" ؛ إضافة 20 يعطي تنسيق شاشة الطوب, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "قراءة القيم وراء عناوين الذاكرة" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"البايتات التي تم إرجاعها تنشئ الثوابت الحسابية ومقياس عموم الأولي. يحتوي " +"العامل الآن على القيم اللازمة للتعبير ج." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "من عند REAالنتائج إلى ج" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"اتبع الخطوات الخمس أدناه. كل اختيار يسلط الضوء على التعليمات الأصلية وخطوط ج" +" أبلغوا." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} المدخلات" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} اضرب" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} طرح" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} مقياس" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} العودة" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "الأصلي إكس 86 * مقتطفات" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "أعيد بناؤها ج" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * قراءة المدخلات.{ph1} عرض التعليمات في REAقراءة نتيجة الوظيفة {ph2}" +" ويستخدم {ph3} لتحميل عدد صحيح. متابعة المتصل من خلال REA يحدد معنى تنسيق " +"الشاشة للمعلمة ج {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * اضرب في 1.5625.{ph1} {ph2} يقرأ المزدوج في {ph3}. البايتات التي تم" +" إرجاعها بواسطة REAفي {ph4} فك التشفير إلى {ph5}؛ ال ج يستخدم نفس الثابت." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * اطرح 500.0.{ph1} {ph2} يقرأ المزدوج في {ph3}. REAيتم فك تشفير " +"نتيجة البايت إلى {ph4}، تحويل مركز الحساب إلى تنسيق الشاشة {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * تطبيق المقياس المخزن.{ph1} الثاني {ph2} يقرأ {ph3}. هذا العالمي " +"يدعى {ph4} في المصدر المحفوظ. REAقراءة البايت الثاني تحدد قيمتها الأولية لـ " +"{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * إرجاع عدد صحيح.{ph1} الدعوة في {ph2} يصل {ph3}، تم تحديدها في " +"REAنتائج المستدعي. ج يلقي النتيجة إلى {ph4} المقارنات الأصلية-86 تحقق من " +"القيمة التي تم إرجاعها." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"يختار مقتطف التجميع تعليمات الإدخال والحساب والإرجاع. تتضمن القائمة الكاملة " +"أدناه أيضا المتاجر المتداخلة وإعداد الوظائف وتنظيفها." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "التجميع الكامل والأدلة الداعمة" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA النتيجة * 0 * 406400-0 * 40643 هـ" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "ما لوازم المتصل" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"وظيفة ضرب الطوب في {ph0} موازين تنسيق البلاط من قبل 30 ، ويضيف 20 ، ثم يدفع " +"به قبل المكالمة:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "ما تقرأ البيانات إنشاء" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA يقرأ البايت ، يتم فك تشفيره على أنه زوجي صغير" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "العنوان" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "القيمة" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "تستخدم ل" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "الضرب الأول" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "الطرح" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} في البداية" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "مقياس عموم المخزنة" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"سجلت مع REA 4.1.0 للتجزئة المثبتة DX-Ball 1.07 هدف. تحتفظ مذكرات التحقيق " +"المرتبطة بهويات الأدلة." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "{ph0}المصدر المحفوظ{ph1} · {ph2}ملاحظات التحقيق ومراجع الأدلة{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "التحقق من الوظيفة المستردة" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"تمر الدالة المستردة بفحصين: تتطابق قيم الإرجاع الخاصة بها مع الأصل ، وتتطابق" +" وحدات البايت المترجمة مع الملف القابل للتنفيذ." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3,205 حالات السلوك" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"الاختبارات تنفيذ وظيفة س 86 الأصلي ومقارنة قيمة عودتها مع الحفاظ على ج. أنها" +" تغطي كل موقف صحيح من 0 إلى 640 في خمسة جداول عموم: 0 ، 0.5 ، 1 ، 20 و -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 بايت مطابقة" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"يتم تجميع وظيفة ج مع سلسلة أدوات فك 4.0 المثبتة. يتطابق إعادة تشغيل المترجم " +"مع الوظيفة الكاملة بعد تطبيق عمليات الترحيل التي تمت مراجعتها والتحقق من " +"الثوابت المشار إليها." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"على مقياس من 1 ، يعود الحساب المسترد -500 في الحافة اليسرى ، 0 في المركز و " +"500 في الحافة اليمنى. الجزء التالي من العمل الصوتي هو دمج هذه القيمة مع " +"الخلفية الصوتية للعبة." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}اقرأ تفاصيل إعادة تشغيل المترجم{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "مواصلة التحقيق" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"يتم استخدام نفس النهج لتحديثات الجسيمات وقوائم انتظار الانفجار وتوليد " +"المكافآت: فحص الوظائف ذات الصلة ، واستعادة حالتها وتبعياتها ، ثم مقارنة " +"التنفيذ بالأصل." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"لفحص وظيفة الصوت عموم نفسك ، اتبع DX-Ball تعليمات إعداد المشروع وتوفير الهدف" +" الأصلي المطابق. ثم تشغيل:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "في ال DX-Ball الخروج" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0}DX-Ball مستودع{ph1}{ph2}المصدر الحالي والتقدم والإعداد المحلي.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0}REA تحليل سير العمل{ph1}{ph2}اتبع الحساب ، ثم استخدم نفس النهج مع " +"الثنائي الخاص بك.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}الجسيمات وإنتاج المكافأة{ph1}{ph2}تحقيق أكبر في الدولة ، طوابير ويكتب " +"بكسل.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball الهندسة العكسية: بالغسل الصوت — REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"اتبع أ DX-Ball إعادة الإعمار من التحليل الثنائي من خلال REA للحفاظ على ج ، " +"الأصلي-س 86 الاختبارات ومطابقة بايت وظيفة المترجمة." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "DX-Ball التحقيق عموم الصوت ؛ التمرير أفقيا على شاشات أصغر" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"دي إكس بول.إيكس وظيفة 0 * 00406400 يتم تفتيشها مع REA. يوفر المتصل الذي تم " +"ضربه من الطوب 20 مرة بالإضافة إلى 30 مرة تحميل التعليمات س ، اضرب في 1.5625 " +"، اطرح 500.0 ، طبق مقياس عموم وأعد عددا صحيحا. يتم فحص ج الحفاظ بشكل مستقل " +"ضد الأصلي 86 في 3 ، 205 الحالات و فك 4.0 مترجم إعادة مطابقة 63 بايت." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball دراسة حالة إعادة الإعمار" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "نسخة مثال موجه" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "اتبع حساب يسار / يمين موقف الصوت" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "نسخ مقتطفات الجمعية الأصلية" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "نسخ الصوت-وظيفة عموم" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "نسخ الصوت الكامل-تجميع عموم" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "نسخ DX-Ball أمر التحليل" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}الرئيسية{ph1} / المعارض" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA دراسات الحالة." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"الروبوت, ألعاب, Electron وتحدي فرقة العمل المشتركة ، مع رمز والأرقام " +"والنتائج فحص." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "اندرويد · APK التحليل" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "كيف يقوم المصدق بإنشاء رمز تسجيل الدخول" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"البحث Aegisحساب الرمز المكون من ستة أرقام في إصداره APK. تتبع طرق التوليد " +"باستخدام REA، ثم انقل ساعة تجريبية لمعرفة سبب تغيير الرمز كل 30 ثانية." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "قراءة دراسة حالة الروبوت" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "* تحليل برامج كود الآلة" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "حل مدقق العلم كتف" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"تفقد تحدي دوونديركتف سهلة مع REA. ابحث عن وظائف الفحص الخاصة به ، وقم بتحويل" +" الأقنعة والمبالغ إلى معادلات ، ثم تحقق من العلم الذي تم حله باستخدام " +"البرنامج الأصلي." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "اقرأ دراسة حالة لجنة مكافحة الإرهاب" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "مواطن * إعادة الإعمار" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ballحساب عموم الصوت" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"استعادة حساب عموم الصوت من عام 1996 Windows لعبة. REAتعليمات الصورة ، مراجع " +"المتصل والثوابت الرقمية تؤدي إلى وظيفة ج صغيرة ، فحص ضد السلوك الأصلي وجميع " +"63 بايت المترجمة." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "قراءة DX-Ball دراسة حالة" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * ميزة تتبع" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "كيف Notion نسخ النص و هتمل" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"تتبع واجهة برمجة تطبيقات تواجه الصفحة من خلال Notionتعبئتها JavaScript. اتبع" +" أغلفة إيبك إلى حافظة النظام ، ثم انظر كيف تحافظ علامة هتمل الصغيرة على " +"بيانات كتلة غنية متصلة بنسخة." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "قراءة Notion دراسة حالة" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 دوس * إعادة الإعمار" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "كيف TH04 يهدف حلقة من الرصاص" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"افحص مساعد الزاوية الأصلي 16 بت باستخدام REA. تطابق عمليات الضرب والقسمة " +"والتنسيق مع ج readable المقروء ، ثم انظر كيف ينتجون حلقة تستهدف اللاعب." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "قراءة TH04 دراسة حالة" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "أدلة خطوة بخطوة" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"أدلة المشي من خلال حساب الأصلي ، وهو Electron تصدير وطلب المتصفح. كل يبدأ مع" +" موجه وهدف ملموس." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "اقرأ الأدلة" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "دراسات حالة الهندسة العكسية — REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"اتبع REA التحقيقات من خلال الكود والأرقام والعروض التوضيحية: مصادق أندرويد, " +"DX-Ball, Notion, TH04 ومدقق العلم دوونديركتف." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}الرئيسية{ph1} / {ph2}يعرض{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "دراسة حالة · Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "كيف Notion نسخ{ph0}النص و هتمل." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"تتبع مكالمة الحافظة من Notionواجهة برمجة تطبيقات الصفحة ، من خلال التحميل " +"المسبق والعملية الرئيسية ، إلى Electronكاتب الحافظة." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion سطح المكتب 7.6.1 · JavaScript · REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "الجسر في الداخل Notionحزمة سطح المكتب" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * واجهة برمجة تطبيقات مواجهة للصفحة{ph1} {ph2}{ph3}{ph4} {ph5}يعرض " +"التحميل المسبق طريقة قابلة للاستدعاء.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * غلاف التحميل المسبق{ph1} {ph2}{ph3}{ph4} {ph5}المجمع يرسل القناة " +"والحجج.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * معالج العملية الرئيسية{ph1} {ph2}{ph3}{ph4} {ph5}يتحقق المتلقي من " +"الصفحة التي أرسلتها.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * حافظة النظام{ph1} {ph2}{ph3}{ph4} {ph5}Electron يكتب النص المرفق و" +" هتمل.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "قناة واحدة تنضم إلى الجانبين: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"يستخدم الرمز المعبأ نفس القناة في التحميل المسبق والعملية الرئيسية. حل مغلفة" +" يكشف عن Electron يدعو وراء تلك الأسماء." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "في دراسة الحالة هذه" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}اتبع جسر الحافظة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}الحفاظ على هيكل الكتلة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}المزيد من الأمثلة والمصادر{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "أين تذهب عملية النسخ?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"ترى الصفحة طريقة تسمى {ph0}. تنفيذه في التحميل المسبق هو المجمع. السؤال " +"المفيد هو ما يرسله هذا الغلاف ، وأي رمز يستقبله." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "نسخ" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتتبع كيف Notion نسخ النص و هتمل إلى حافظة " +"النظام. أظهر الرمز في كل خطوة.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "مثال موجه مع Notionحزمة التطبيق المحلية المتاحة لمساعدك البرمجي." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA يجد من أين تبدأ القراءة" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"تحليل علامة التبويب التحميل المسبق مع REA يقع أبي يتعرض إلى الصفحة والمكالمة" +" التي ترسل طلب إيبك. تأتي كلتا النتيجتين مع نطاقات المصدر في الحزمة المصغرة:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA النتائج places مكانين لفتح" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"الحقول المختارة من جديد {ph0} النتيجة على Notionعلامة التبويب التحميل المسبق" +" ، المسجلة مع REA 4.1.0. تستخدم المواضع خط الحزمة الأصلي والعمود الصفري." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"يفتح الوكيل هذه المواقع ، ويجد عضو الحافظة في واجهة برمجة التطبيقات المجمعة " +"، ويقرأ {ph0}. لوازم موقع الاتصال {ph1}. يعطي هذا الاسم الوكيل شيئا دقيقا " +"للبحث عنه في الحزمة الرئيسية. تظهر المقتطفات الأربعة أدناه المسار الذي يربط." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "أربع قطع قصيرة من التعليمات البرمجية" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"مبسطة من تعبئتها JavaScript، مع أسماء المتغيرات القابلة للقراءة. تم حذف " +"الأعضاء غير المرتبطين." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "ابدأ من واجهة برمجة التطبيقات المكشوفة للصفحة" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"يوفر هذا العضو اسم القناة. تنفيذ {ph0} يخبرنا كيف يترك الطلب عملية الصفحة." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "حل غلاف التحميل المسبق" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"تقوم الدالة التي تم إرجاعها بإعادة توجيه الوسيطات من خلال Electronطلب " +"واستجابة التصنيف الدولي للبراءات. يمكننا الآن البحث عن {ph0} على الجانب " +"الرئيسي-العملية." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "تحقق من كيفية تسجيل المتلقي" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"تستخدم العملية الرئيسية غلاف آخر. لها {ph0} الطريقة تسجل {ph1} استقبال لتلك " +"القناة." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "ابحث عن الكتابة والتحقق من المرسل" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"هذه هي الوجهة. بعد التحقق من المرسل ، يقوم المعالج بتمرير البيانات المقدمة " +"إلى Electronواجهة برمجة تطبيقات الحافظة. تقوم القناة والأغلفة التي تم حلها " +"بتوصيل الطريقة المكشوفة بهذه المكالمة." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "كيف تحافظ الكتلة المنسوخة على هيكلها?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Notionمحرر الويب يرسل النص و هتمل من خلال {ph0}. فإنه يحتفظ البيانات كتلة " +"محليا ويضع معرف في هتمل نسخها لربطها." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "وصلات أتش تي أم أل إلى بيانات الكتلة المحفوظة" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "قراءة معرف هتمل" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "ابحث عن نفس المعرف المحلي" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "استعادة Notion كتلة البيانات" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"نص توضيحي ومعرف. يستعيد اختبار الوحدة النمطية المسجلة بيانات الكتلة عند " +"تطابق المعرفات ؛ يقوم إدخال قديم بإرجاع النص والأتش تي أم أل فقط." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"على لصق, Notion يبحث عن معرف هتمل ويتحقق من ذلك ضد النسخة المحفوظة. معرفات " +"مطابقة استعادة البيانات كتلة." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "تم تسجيل تنسيق الحافظة من أصول الويب المخزنة مؤقتا في 13 يوليو 2026." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "المزيد من الأمثلة والمصادر" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "مثال آخر: جداول تخفيض السعر" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion يوزع تخفيض السعر في بيانات الكتلة. يوضح هذا المثال كيف يصبح الجدول " +"رأس وصفوف البيانات." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "جدول من خلال Notionمحلل تخفيض السعر" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"الإخراج المسجل من محلل تخفيض السعر المستخرج. يصبح الجدول الصفوف والخلايا." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "مسار آخر: اتصال سكليتي غير متصل" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Notionطلبات العارض {ph0} من خلال التصنيف الدولي للبراءات. العملية الرئيسية " +"بإنشاء قناة رسالة ويعطي منفذ واحد إلى العارض والآخر إلى عملية فائدة سكليتي. " +"دفعات البيان اللاحقة والنتائج تنتقل عبر هذا المنفذ." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"بعد هذا التحول يشرح أين يعمل عمل قاعدة البيانات ، ولماذا تتبع فقط طلب إيبك " +"الأولي يفتقد المحادثة في وقت لاحق." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "المصادر وكيفية قراءة المقتطفات" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"جسر الحافظة يأتي من Notion سطح المكتب 7.6.1 {ph0}: علامة التبويب التحميل " +"المسبق و {ph1}. تعمل المقتطفات على توسيع أسماء المتغيرات المصغرة وحذف " +"التعليمات البرمجية غير ذات الصلة ؛ يظهر مساعد التحقق من المرسل مع أساسه " +"{ph2} اتصل." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"تأتي أمثلة الحافظة الافتراضية والتخفيض من أصول الويب المخزنة مؤقتا في 13 " +"يوليو 2026 ، بما في ذلك الوحدات النمطية {ph0}, {ph1}, {ph2} و {ph3}. هذه " +"الأصول لها نسختها الخاصة. نفذت المجسات المحفوظة وحدات مستخرجة وأحزمة صغيرة ؛" +" تصف مخرجاتها تلك المجسات بدلا من جلسة واجهة مستخدم سطح المكتب الملتقطة." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"ال REA النتيجة الموضحة هنا هي تحليل مركز للتحميل المسبق لعلامة التبويب " +"المحفوظة ، والمسجلة مع المنشور REA 4.1.0 حزمة. فإنه يقع أبي واستدعاء " +"العملية. يتم توصيل عضو الحافظة وجهاز الاستقبال المطابق من خلال قراءة تطبيقات" +" الغلاف الخاصة بهم في الحزمة." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"يستخدم مثال تخفيض السعر وحدة المحلل اللغوي {ph0}. تظهر اختبارات الوحدة " +"النمطية المحفوظة أن عوامل تصفية الصفحة والدردشة تحافظ على هذا الجدول. يحتوي " +"محللو اللصق / الاستيراد والتخفيض المنظم والذكاء الاصطناعي / الدردشة على نقاط" +" دخول منفصلة وتنسيقات وسيطة." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0}JavaScript دليل التطبيق{ph1}{ph2}اتبع صغيرة Electron ميزة تصدير " +"التطبيق.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0}DX-Ball إعادة الإعمار{ph1}{ph2}اتبع التعليمات الأصلية إلى دالة ج " +"محددة.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron الهندسة العكسية: الحافظة — REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"اتبع Notionواجهة برمجة تطبيقات الحافظة من خلال Electronالتحميل المسبق ، " +"مغلفة إيبك والعملية الرئيسية،مع مقتطفات رمز قصيرة ونظرة على شكل الحافظة " +"الغنية." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron دراسة حالة" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "نسخ Notion موجه التحليل" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "نسخ Notion التحميل المسبق مقتطفات" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "نسخ Notion استدعاء مقتطفات المجمع" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "نسخ Notion معالج المجمع مقتطفات" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "نسخ Notion الحافظة استقبال مقتطفات" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "استعادة البيانات الحافظة الغنية على لصق" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "تخطي إلى المحتوى" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}الرئيسية{ph1} / {ph2}يعرض{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "دراسة حالة * توهو 4: قصة لوتس لاند" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "إعادة البناء TH04في{ph0}أنماط رصاصة." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"تبدأ حلقة من الرصاص بحساب زاوية قصير. استخدام REA لتفقد وظيفة دوس الأصلية ، " +"ثم اتبع تعليماتها في قراءة ج++." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 * 16 بت دوس * ج assembly والتجمع" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "عرض TH04 إعادة الإعمار" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "من التعليمات الأصلية إلى المصدر المحدد" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * اللعبة الأصلية{ph1}{ph2}الرئيسية.إكس{ph3}{ph4}ال PC-98 قابل " +"للتنفيذ ومساعد زاوية الرصاصة.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * فحص مع REA{ph1}{ph2}تعليمات + المراجع{ph3}{ph4}تحقق من رمز دوس " +"تحميل وقراءة حساب زاوية من الملف القابل للتنفيذ.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * قراءة ج C{ph1}{ph2}الفضاء-الهدف-تدوير{ph3}{ph4}قم بتوصيل كل عملية " +"بإعادة الإعمار التي تمت صيانتها.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * تحقق من المصدر{ph1}{ph2}2,139 بايت مطابقة{ph3}{ph4}تغطي فحوصات " +"المترجم المسجلة رمز إنشاء التعداد النقطي الذي يحتوي على هذا المساعد.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA إرجاع الرمز الأصلي وأدلة تحليله. ال TH04 يوفر المشروع شيكات المصدر " +"والمترجم التي تم صيانتها." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "في دراسة الحالة هذه" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}حلقة الرصاصة{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}ماذا REA المرتجعات{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}الجمعية إلى ج C{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}التحقق من المصدر{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}المشروع الكامل{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "كيف تهدف الحلقة إلى اللاعب" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"يطلب هجوم إيلي حلقة موجهة بعدد أولي قدره 16. مساعد واحد يحسب اتجاه كل رصاصة." +" يمكن أن تواجه الحلقة نفسها اتجاها ثابتا أو تتجه نحو اللاعب." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مساعدك البرمجي" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "نسخ" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لمعرفة كيف TH04 يخلق حلقة من الرصاص ويهدف إلى " +"لاعب. شرح الحساب وإظهار التعليمات البرمجية.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"مثال موجه ، مع الخروج الأصلي القابل للتنفيذ وإعادة الإعمار متاح محليا." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 يخزن دورة كاملة في اتجاه عقارب الساعة في 256 وحدة زاوية. مقابل 16 رصاصة" +" ، يضيف كل فهرس 16 وحدة: {ph0}. تؤدي إضافة اتجاه اللاعب إلى تدوير تلك " +"المواضع معا." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"رسم توضيحي للرياضيات الزاوية المستردة للعد 16 واتجاه اللاعب 40 ودوران القالب" +" 0. {ph0}الشكل المفتوح{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "قالب إطلاق النار في المصدر المسترد" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "هجوم حلقة اللي · مقتطفات المصدر" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"تحدد هذه الخطوط النمط قبل ضبط الصعوبة والأداء. {ph0}اقرأ مصدر الهجوم{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "ماذا REA المرتجعات" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"نحن نفحص {ph0}، الوظيفة التي تحدد سرعة وزاوية كل رصاصة. REA إرجاع تعليماته ،" +" بسيودوكود والمراجع. ثلاثة أجزاء من هذه النتيجة تشرح النمط." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "تحقق من صورة دوس قبل قراءة رمزها" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"يربط الشيك الكود المحمل وسجلات النقل إلى الملف القابل للتنفيذ المرفق. يتم " +"تقصير المسار أعلاه للعرض." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "قراءة الحلبة ضرب وتقسيم" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} يحمل مؤشر رصاصة. يضربها التحول في 256 ، ثم يستخدم القسمة العد المقروء " +"من {ph1}. أسماء المصدر المحتفظ بها هذا الحقل {ph2}. يظهر التسلسل الكامل " +"أدناه." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "ابحث عن المكان الذي يتحول فيه النمط نحو المشغل" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"المعاملات تعليمات فضح اثنين من الاختلافات تنسيق ومساعد الاتجاه. تضاف قيمة " +"الإرجاع إلى زاوية الحلقة النسبية. أسماء المصدر تجعل هذه العناوين قابلة " +"للقراءة; REA يتيح للوكيل التحقق من العمليات الأصلية خلفهم." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "من التجميع إلى القراءة ج C" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"حدد خطوة لمطابقة التعليمات الأصلية مع حساب الزاوية. يتبع هذا الملخص مسار " +"الحلقة المستهدفة ؛ يعالج المصدر الكامل أيضا فروق الأسعار والمداخن والأنماط " +"العشوائية." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} الفهرس" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} الفضاء" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} الهدف" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} تدوير" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} متجر" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * تعليمات 16 بت الأصلية" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "قراءة ج · * تهدف حلقة ملخص" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * قراءة مؤشر رصاصة.{ph1} يتم تحميل وسيطة المكدس في {ph2}. في حلقة " +"مكونة من 16 رصاصة ، يمتد فهرس الأعضاء هذا من 0 إلى 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * الفضاء الاتجاهات حول بدوره الكامل.{ph1} {ph2} يتضاعف بنسبة 256. " +"العد هو صفر-ممتد إلى كلمة ، ثم {ph3} يقسم المنتج على هذا العدد. بالنسبة للعد" +" 16 ، يتقدم كل فهرس بـ 16 وحدة زاوية." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * إضافة اتجاه لاعب.{ph1} يشكل الطرحان إحداثيات أصل اللاعب ناقص. " +"مساعد الاتجاه يعود زاوية في {ph2}؛ مضيفا أنه يحول الحلقة بأكملها نحو اللاعب." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * إضافة دوران النمط.{ph1} {ph2} يضيف زاوية القالب. قالب إيلي الأولي " +"يضبطه على الصفر ؛ يمكن للأنماط الأخرى استخدام نفس المساعد مع الدوران." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * حافظ على الزاوية النهائية في بايت واحد.{ph1} يكتب المتجر {ph2} إلى" +" حقل تفرخ الزاوية. القيم التفاف بعد 255 ، تماما كما يفعل يلقي بايت غير " +"موقعة. يحول المصدر المحيط أيضا هذه الزاوية والسرعة إلى سرعة." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"يختار التجميع فرع الحلقة المستهدفة وحساب الهدف والمخزن النهائي. ج above " +"أعلاه هو ملخص مقروء. تنطبق عمليات التحقق من المترجم أدناه على المصدر المحفوظ" +" في المشروع المرتبط." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "قراءة حلقة الحفاظ ومصدر الهدف" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}حلقة ماكرو{ph1} · {ph2}الهدف ومصدر السرعة{ph3} · {ph4}تمثيل " +"الزاوية{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "التحقق من المصدر الذي تم صيانته" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"ال TH04 تقوم الشيكات المسجلة للمشروع بتجميع رمز إنشاء الرصاص ، بما في ذلك " +"هذا المساعد ، مع سلسلة أدوات توربو سي J 4.0 ي." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 بايت مطابقة" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"يتطابق رمز إنشاء التعداد النقطي المجمع مع قسم 2139 بايت من الملف التنفيذي " +"الأصلي." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "اثنين نظيفة يبني" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"اثنين من يبني منفصلة تنتج نفس بايت مطابقة. تتطابق تجزئات الإدخال المسجلة مع " +"المصدر المحفوظ الموضح هنا." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "تم تسجيله في 3 أكتوبر 2026. {ph0}قراءة الشيكات مترجم{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "تحديد الهدف ونطاق التحليل" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "الهدف الأصلي" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156 ، 258 بايت ، دوس ميجا هرتز" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "دخول المساعد" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} في REAالصورة المحملة" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "إزاحة الملف الأصلي" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}، عاد من قبل {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "فحص الكود المسجل" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 أكتوبر 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"تغطي شيكات المترجم قسم الرمز النقطي الكامل ، بما في ذلك هذا المساعد. كما " +"أنها تقارن مساهمة الخريطة وإعادة التوطين المتداخلة." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA تم التحقق من صورة تحميل دوس الثابتة في مقطع التحميل {ph0}. تصف عناوينها " +"صورة التحليل هذه. تقارير نتيجة وظيفة 503 بايت الجسم في نطاقين عبر فترة 517 " +"بايت ؛ التعليمات المحددة أعلاه تكمن في تلك النطاقات المبلغ عنها." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"أسماء المصدر والشيكات مترجم تأتي من TH04 نقطة تفتيش {ph0}. استخدمت ملاحظات " +"إعادة الإعمار السابقة نصوص التحليل الخاصة بالمشروع; تضيف هذه الصفحة جديدة " +"REA التفتيش على نفس الهدف الأصلي. يتم تثبيت هوية اللعبة الموردة من خلال بيان" +" المستودع الخاص بها ، مع استمرار فتح مصدر التفريغ الأصلي المستقل." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"يوضح الشكل حساب الزاوية. ضوابط اللعبة الكاملة والتوقيت و PC-98 سلوك الأجهزة " +"لديها الشيكات وقت التشغيل منفصلة في مشروع إعادة الإعمار." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "كامل TH04 إعادة الإعمار" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"يقوم المشروع ببناء منتجات دوس الأربعة للعبة من صيانة ج assembly والتجميع. ما" +" وراء جيل رصاصة ، ويغطي المصدر مراحل ، ورؤساء ، وتقديم ، والمدخلات ، " +"والقوائم ، والنهايات والتعامل مع النتيجة." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}استكشاف TH04 مستودع{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}مصدر توليد الرصاص{ph1}{ph2}المساعد الكامل وأنواع الأنماط الأخرى وضبط " +"القالب.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}دوس بناء وتشغيل دليل{ph1}{ph2}بناء المصدر واختباره في المشروع PC-98 سير" +" عمل المحاكي.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}حالة المشروع الحالية{ph1}{ph2}التحقق من دوس ومنفذ إكس 64 الأصلي " +"المنفصل.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 الهندسة العكسية: أنماط رصاصة دوس — REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"فحص TH04رمز دوس الأصلي 16 بت مع REA. اتبع التجمع وتعافى ج to لنرى كيف " +"متباعدة حلقة من الرصاص وتهدف إلى لاعب." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "في هذه الصفحة" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04 دراسة حالة نمط رصاصة" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "نسخ TH04 مثال موجه" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "TH04 حلقات رصاصة ثابتة وموجهة ؛ التمرير أفقيا على شاشات أصغر" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"اثنين من الرسوم البيانية من حلقة 16 رصاصة. تبدأ الحلقة الثابتة بزاوية صفر. " +"إضافة اتجاه لاعب 40 تدور كل اتجاه بنفس المقدار; النقاط الأولى المميزة تجاه " +"اللاعب. كلاهما يحتفظ بمسافة 16 وحدة زاوية ، أو 22.5 درجة." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "نسخ TH04 قالب إطلاق النار" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "اتبع TH04 تهدف-حساب الدائري" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "نسخ TH04 مقتطفات الجمعية" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "نسخ حساب الحلقة المستهدفة المقروءة" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "العودة للأعلى" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "نسخ" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "نسخ" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "مختارة" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "رمز نسخ إلى الحافظة." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "رمز المحدد. استخدم لوحة المفاتيح لنسخها." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA على GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "المسافة {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "ضرب الصبار. جرب سرعة أخرى." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "الفضاء أو القفز ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "اللعب مرة أخرى" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "العب" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "وقفة" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "اضغط على تشغيل ، ثم اقفز فوق الصبار." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"ضرب الصبار. اضغط على تشغيل مرة أخرى ، أو قم بتغيير السرعة وإعادة التشغيل." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "تشغيل. الفضاء أو القفز يزيل الصبار." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "توقف. اضغط على تشغيل للمتابعة." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "سرعة ثابتة: {speed}. الفضاء أو القفز يزيل الصبار." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "سرعة ثابتة: {speed}. اضغط على تشغيل لتجربته." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "القاعدة المستردة: ابدأ من 6 ، ثم زد نحو 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "سرعة ثابتة: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"ردت القاعدة المستردة. تتطابق جميع القيم الأربع مع فحص اللعبة الأصلية المتحكم" +" فيه عند تقريبه إلى ثلاثة كسور عشرية." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"تختلف الإعادة عن قيم اللعبة الأصلية المسجلة. قارن قاعدة السرعة والإعدادات " +"أعلاه." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} ثواني" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} ثواني ، كتلة الوقت {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"الحساب التفاعلي غير متوفر في هذا المتصفح. يوضح المثال الرمز في 59 ثانية." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "التحقق…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} الشيكات مرت (ست حالات مرجعية ، في ستة وثمانية أرقام)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "تعذر تشغيل الشيكات المرجعية. حاول مرة أخرى." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "محلل يفكر في الكمبيوتر" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "شيك واحد يكشف عن حرف واحد" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"يختار القناع السابع الموضع 21 فقط في شبكة الإدخال الستة بستة. يجب أن يساوي " +"رمز الحرف الخاص به 55 ، وبالتالي فإن الحرف هو 7. تختار الأقنعة الأخرى مواضع " +"مختلفة وتعطي معادلات أخرى." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "الشيك السابع. تسميات الخلايا هي مواضع إدخال ، تبدأ من 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "قناع مشفر: -21 ، +1 ، -14 ، 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "تخطي 21 خلية. اختر 1. تخطي 14. توقف عند 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "تساهم خلية واحدة فقط في هذا المبلغ" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "يجب أن يحتوي الموضع 21 في العلم على 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "المحدد: خلية واحدة" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 أقنعة تعطي 26 المعادلات." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "حلها معا للعثور على العلم." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball تحقيق الصوت عموم" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA يوفر دليل التعليمات والمتصل والبايت للقراءة لأحد DX-Ball وظيفة. يتم ضرب " +"إدخال المكدس في 1.5625 ، ويقابله 500 ، ويتم تحجيمه وتحويله إلى عدد صحيح. يتم" +" التحقق من الحفاظ على ج في 3205 الحالات الأصلية-س 86 وإعادة مترجم 63 بايت " +"منفصلة." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "المكدس" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "الإدخال x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "صحيح" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "إرجاع" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "الدالة المستعادة" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "كود C مستعاد" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "استدعاء اصطدام" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "الكود الأصلي" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "مقارنة" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3,205 اختبارات" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "بناء VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "تطابق 63 بايت" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA تدفق التحقيق" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"اطرح سؤالا حول هدف محلي. REA يتفقد ويتتبع من خلال محولات التحليل المحلية ، " +"وإرجاع الأدلة ، ويدعم أسئلة المتابعة كما يشرح وكيلك ، وتنفذ والاختبارات." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. اسأل" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "المساعد + ملف محلي" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "تطبيق / ملف / متصفح" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. افحص وتتبّع" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. اقرأ الأدلة" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "كود / مراجع /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "نقاط مجهولة" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. استخدم النتائج" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "مساعدك" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "اشرح / أنشئ / اختبر" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "أدوات التحليل" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "أدوات تحليل محلية" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "سؤال إضافي" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: تباعد وتهدف حلقة من الرصاص" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"يحتوي الانعطاف الكامل في اتجاه عقارب الساعة على 256 وحدة زاوية. ستة عشر " +"رصاصة تبدأ من الزوايا صفر ، ستة عشر ، اثنان وثلاثون ، حتى 240. إضافة مثال " +"على اتجاه اللاعب الأربعين يحول جميع الاتجاهات الستة عشر معا ؛ النقاط الأولى " +"في اللاعب. دوران القالب هو صفر." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "حلقة ثابتة" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "الرصاصة الأولى: الزاوية 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "تهدف حلقة" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "الرصاصة الأولى: اتجاه اللاعب" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "المركز" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "لاعب" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "نفس التباعد: 256 1 16 = 16 وحدة زاوية = 22.5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "أمثلة عملية" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "المدونة" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "ابدأ هنا" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "الأدلة" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "الكود المصدري" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "رخصة MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "انضم إلى المجتمع" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "تابعنا على X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * مصدر البرنامج النصي المحدد" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "الكود المصدري" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "الناتج المنسق المتوقع" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "التعليمات" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "المتصل" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "الثوابت" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "جيم وظيفة" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "زر" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "واجهة برمجة تطبيقات التحميل المسبق" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "التصنيف الدولي للبراءات" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSV ملف" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "انقر فوق الخاص بك" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "طلب تم التقاطه" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "نص التصدير" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA النتيجة * ملخص.مقتطفات التصنيف الدولي للبراءات" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA مقتطفات التعليمات * 0 * 406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA مقتطف المتصل · 0 * 411 أف 5 ب" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "REA نتائج البايت * تفسر على أنها زوجي صغير" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "تعافى ج * مقتطفات" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "شاهد كيف يعمل REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "دليل الإعداد" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "يعرض →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "الإعدادات المحددة من البرنامج النصي الذي تم فحصه" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "ملخص مقروء لمعالج ٪" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * تعليمات أصلية مختارة" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "معرفات المشغل * مصدر مايكروسوفت" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "اتبع @رياتولس على س" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "وكيل → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA - وكيل * نتائج مختارة" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA - وكيل * طرق والمتصلين" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * جافا مفككة مختارة" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "ملخص مقروء * تفسير الوكيل" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * جينيراتوتب ، كامل الجسم" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "تحميل Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "تحميل مزود تحليل الروبوت" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "وكيل → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA - وكيل * نتائج مختارة" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA - وكيل * تعليمات مختارة" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "وكيل → REA * قراءة _ بايت" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA agent الوكيل * الإدخالات السابعة" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "قابل للتنفيذ الأصلي · SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "تحميل التحدي الأصلي" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "تحميل حلالا" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA النتيجة * مقتطفات من الكود الكاذب" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "وكيل → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA - وكيل * مقتطفات التعليمات" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA - وكيل * المتصل مقتطفات" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "وكيل → REA * اثنان {ph0} الطلبات" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REA نتائج بايت * فك كما الزوجي" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "ابدأ بالهدف الخاص بك" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "توليد التعليمات البرمجية" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "القاعدة المستردة" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "ساعة قابلة للتعديل" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "ثنائي" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "التحقق من التعليمات البرمجية" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "المعادلات" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "صحيح!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "قابل للتنفيذ" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA النتائج" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "تعافى ج" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "التحقق من الصحة" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "التطبيق المعبأ" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "واجهة برمجة تطبيقات مكشوفة" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "مغلفة التصنيف الدولي للبراءات" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "الحافظة" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "كود دوس الأصلي" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA التعليمات" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "حساب الزاوية" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "حلقة رصاصة" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "واجهة برمجة تطبيقات الصفحة المكشوفة" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "دعوة العارض إيبك" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "إرسالها إلى حافظة النظام" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "محفوظ محليا بواسطة Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "إدخال تخفيض السعر" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "منظم محلل الإخراج * مقتطفات" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "تحليل التطبيق الخاص بك" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "وكيل → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA agent وكيل * الحقول المحددة" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "وكيل → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA - وكيل * مقتطفات التعليمات" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "نفس النتيجة وظيفة * تهدف مقتطفات" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "المقابلة الحفاظ ج C" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "حلقة ماكرو · TH04 فرع ، مقتطفات" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "الزاوية والسرعة * مقتطفات المصدر" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "اضغط ٪ لمعرفة ما يحدث ل 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10 ٪ من 200 تساوي 20. اضغط = لإضافته." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "للضرب ، 10 يصبح 0.1. اضغط = لضرب." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "يتم تحديث الترجمة. اقرأ هذه الصفحة باللغة الإنجليزية في الوقت الحالي." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتحليل {ph3} وشرح كيفية تصدير البيانات. إظهار " +"التعليمات البرمجية ذات الصلة ومواقع المصدر.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ثبّت REA واربطه بمساعد البرمجة هذا باستخدام {ph3}. اعرض خطة " +"الإعداد أولاً وانتظر موافقتي، ثم تحقّق من التثبيت.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}تحميل {ph3} في مجلد مثال جديد وفك ضغطه. استخدام REA للعثور " +"على ما يحدث عند النقر فوق تصدير الملاحظات. أظهر أين {ph4} هو مكتوب ، والحقول" +" التي يحتوي عليها ، والملفات والخطوط ذات الصلة.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ثبّت REA واربطه بمساعد البرمجة هذا باستخدام {ph3}. اعرض خطة " +"الإعداد أولاً وانتظر موافقتي، ثم تحقّق من التثبيت.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ثبّت REA واربطه بمساعد البرمجة هذا باستخدام {ph3}. اعرض خطة " +"الإعداد أولاً وانتظر موافقتي، ثم تحقّق من التثبيت.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتفقد {ph3}. استنساخ هذا الموقع بالنسبة " +"لي.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "إعادة الإعمار · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"مع {ph0} و npm متاح ، تشغيل الإعداد ، واختيار مساعدك البرمجي ومراجعة " +"التغييرات المقترحة." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "مثال مقدم · {ph0} و npm * مساعدك البرمجي" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"استخدم عامل ترميز مثل Claude Code, Codex أو Cursor. سوف تحتاج {ph0} و npm؛ " +"ال {ph1}قوائم دليل الإعداد الإصدارات المدعومة{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}الصفحة · {ph1}{ph2}{ph3}ملاحظات التصدير{ph4}{ph5}المكالمات {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}جسر · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}يرسل رسالة مسماة إلى العملية " +"الرئيسية.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}معالج · {ph1}{ph2}{ph3}اكتب {ph4}{ph5}{ph6}يدعو المنسق في {ph7} ويكتب " +"الملف.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * خطوط 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}توقع CSV للحصول على ملاحظة مع معرف 1 والعنوان {ph3}. ثم قم " +"بتشغيل المثال {ph4} المنسق مع {ph5} للتحقق من ذلك. عرض التنبؤ والإخراج " +"الفعلي.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"يبقى العنوان في حقل واحد مقتبس ؛ يتم مضاعفة كل علامة اقتباس. هذا يتحقق من " +"المنسق مباشرة مع {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV المنسق" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "سوف تحتاج {ph0} 22 (22.19+), 24 (24.11+) أو 26+. npm يأتي مع {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "ليس لديك {ph0}, أو لست متأكدا?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"إذا {ph0} يطبع الإصدار 22.19+ أو الإصدار 24.11+ أو الإصدار 26+ ، فأنت جاهز. " +"إذا قام بطباعة إصدار أقدم أو \"غير معروف\" / \"لم يتم العثور على الأمر\" ، " +"فقم بالتثبيت {ph1} 24 لتر:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * مثال مقتطفات المصدر" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "{ph0}افتح المثال{ph1} · {ph2}تحميل {ph3}{ph4} · {ph5}تحميل {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * مثال المصدر" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"قم بتنزيل المثال وفك ضغطه. يحتوي الأرشيف على كامل {ph0} مجلد. تحليلها مع " +"{ph1} و npm; Electron ليست هناك حاجة لهذا المثال." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"أول مرة ، أو مفقود {ph0} أو المساعد البرمجي? {ph1}اتبع دليل الإعداد خطوة " +"بخطوة →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "مثلاً: {ph0}لماذا تعطي الآلة الحاسبة 220 عند حساب {ph1}؟{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتفقد Windows آلة حاسبة. لماذا {ph3} منح " +"220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * تحميل {ph0} * خطوط مختارة" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"رأينا لماذا {ph0}{ph1} يعطي 220.{ph2} الآن دعنا نستعيد القواعد لكل من + و × " +"، ونجربها." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA يقرأ {ph1}{ph2}{ph3}تطلق تطبيق الآلة الحاسبة{ph4}{ph5}يفتح " +"الرمز {ph6}. ثم يقوم الوكيل بتحديد مكتبة التطبيق المثبت.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}استخدام REA لتفقد ايجيس-الإصدار 3.4.{ph3}. ابحث عن كيفية " +"إنشاء رمز تسجيل الدخول المكون من ستة أرقام ، واشرح سبب تغييره كل 30 ثانية ، " +"وأعد بناء عرض توضيحي صغير حيث يمكنني تغيير الوقت.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "علامة التبويب_المتصفح_عرض/{ph0} * عضو واجهة برمجة التطبيقات" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "علامة التبويب_المتصفح_عرض/{ph0} * إيبك مساعد" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "الرئيسية/{ph0} * معالج مساعد" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "الرئيسية/{ph0} * استقبال الحافظة" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "إعادة الإعمار * دينو السرعة.شبيبة" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "مع Node.js و npm متاح ، تشغيل الإعداد ، واختيار وكيل الترميز الخاص بك " +#~ "ومراجعة التغييرات المقترحة." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "مثال مقدم · Node.js و npm * وكيل الترميز الخاص بك" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "استخدم عامل ترميز مثل Claude Code, Codex أو Cursor. سوف تحتاج Node.js و npm؛" +#~ " ال {ph0}قوائم دليل الإعداد الإصدارات المدعومة{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}الصفحة * العارض.شبيبة{ph1}{ph2}ملاحظات التصدير{ph3}{ph4}المكالمات " +#~ "{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}جسر * التحميل المسبق.شبيبة{ph1}{ph2}{ph3}{ph4}{ph5}يرسل رسالة مسماة إلى" +#~ " العملية الرئيسية.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}معالج * الرئيسية.شبيبة{ph1}{ph2}كتابة الملاحظات.كسف{ph3}{ph4}يدعو " +#~ "المنسق في {ph5} ويكتب الملف.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}توقع CSV للحصول على ملاحظة مع معرف 1 وعنوان مرحبا،\"REA\". " +#~ "ثم قم بتشغيل منسق توسف المثال مع Node.js للتحقق من ذلك. عرض التنبؤ والإخراج " +#~ "الفعلي.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "يبقى العنوان في حقل واحد مقتبس ؛ يتم مضاعفة كل علامة اقتباس. هذا يتحقق من " +#~ "المنسق مباشرة مع Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV المنسق" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "سوف تحتاج Node.js 22 (22.19+), 24 (24.11+) أو 26+. npm يأتي مع Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "ليس لديك Node.js, أو لست متأكدا?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "إذا {ph0} يطبع الإصدار 22.19+ أو الإصدار 24.11+ أو الإصدار 26+ ، فأنت جاهز. " +#~ "إذا قام بطباعة إصدار أقدم أو \"غير معروف\" / \"لم يتم العثور على الأمر\" ، " +#~ "فقم بالتثبيت Node.js 24 لتر:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}افتح المثال{ph1} · {ph2}تحميل تصدير.شبيبة{ph3} · {ph4}تحميل " +#~ "الملاحظات.جسون{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "قم بتنزيل المثال وفك ضغطه. يحتوي الأرشيف على كامل {ph0} مجلد. تحليلها مع " +#~ "Node.js و npm; Electron ليست هناك حاجة لهذا المثال." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "أول مرة ، أو مفقود Node.js أو وكيل الترميز? {ph0}اتبع دليل الإعداد خطوة " +#~ "بخطوة →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "مثلاً: {ph0}لماذا تعطي الآلة الحاسبة 220 عند حساب 200 + 10%؟{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}استخدام REA لتفقد Windows آلة حاسبة. لماذا 200 + 10% منح " +#~ "220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "رأينا لماذا {ph0}200 + 10% يعطي 220.{ph1} الآن دعنا نستعيد القواعد لكل من + " +#~ "و × ، ونجربها." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA يقرأ احسب.إكس{ph1}{ph2}تطلق تطبيق الآلة الحاسبة{ph3}{ph4}يفتح " +#~ "الرمز {ph5}. ثم يقوم الوكيل بتحديد مكتبة التطبيق المثبت.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}استخدام REA لتفقد ايجيس-الإصدار 3.4.3.إيه بي كيه. ابحث عن " +#~ "كيفية إنشاء رمز تسجيل الدخول المكون من ستة أرقام ، واشرح سبب تغييره كل 30 " +#~ "ثانية ، وأعد بناء عرض توضيحي صغير حيث يمكنني تغيير الوقت.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "عرض/تحميل مسبق.جس * أبي عضو" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "عرض/تحميل مسبق.شبيبة * إيبك مساعد" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "الرئيسية / فهرس.شبيبة * معالج مساعد" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "الرئيسية / فهرس.شبيبة * الحافظة استقبال" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "الرئيسية.الخطوط 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "تصدير.شبيبة * مثال مقتطفات المصدر" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "العارض.شبيبة * مثال المصدر" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "التحميل المسبق.شبيبة * مثال المصدر" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "الرئيسية.شبيبة * مثال المصدر" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * مؤشر تحميل.شبيبة * خطوط مختارة" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}استخدام REA لتحليل / مطلق / مسار / إلى / التطبيق وشرح كيفية " +#~ "تصدير البيانات. إظهار التعليمات البرمجية ذات الصلة ومواقع " +#~ "المصدر.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}تثبيت REA وتوصيله إلى هذا وكيل الترميز باستخدام npx ريا " +#~ "وكلاء@أحدث الإعداد. أرني خطة الإعداد للموافقة عليها ، ثم تحقق من " +#~ "التثبيت.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}تحميل https://rea.tools/examples/notes-example.zip في مجلد " +#~ "مثال جديد وفك ضغطه. استخدام REA للعثور على ما يحدث عند النقر فوق تصدير " +#~ "الملاحظات. تظهر فيها الملاحظات.هو مكتوب كسف ، الحقول التي يحتوي عليها ، " +#~ "والملفات والخطوط ذات الصلة.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}تثبيت REA وتوصيله إلى هذا وكيل الترميز باستخدام npx ريا " +#~ "وكلاء@أحدث الإعداد. أرني خطة الإعداد للموافقة عليها ، ثم تحقق من " +#~ "التثبيت.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}تثبيت REA وتوصيله إلى هذا وكيل الترميز باستخدام npx ريا " +#~ "وكلاء@أحدث الإعداد. أرني خطة الإعداد للموافقة عليها ، ثم تحقق من " +#~ "التثبيت.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0 * 5 ب" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0 * 5 سي" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0 * 64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}استخدام REA لتفقد https://rea.tools/. استنساخ هذا الموقع " +#~ "بالنسبة لي.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "الرمز [21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0 * 00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr " pan مقياس عموم" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}عكس مهندس أي شيء{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/de/messages.po b/website/locales/de/messages.po new file mode 100644 index 000000000..d922cf936 --- /dev/null +++ b/website/locales/de/messages.po @@ -0,0 +1,13594 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Startseite{ph1} / Blog" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blog." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Gedanken zum Reverse Engineering." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Spielrekonstruktion{ph0}Essay" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "Die industrielle Revolution im Reverse Engineering" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"Welches Handbuch RE und Rekonstruktion TH08 , TH095 und TH04 hat mich " +"gelehrt, über Agenten, Überprüfung und Wissen, dass Verbindungen über " +"Projekte hinweg." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Lesen Sie den Artikel" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Von N0zoM1z0 · 10. Oktober 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Oberen" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA Blog - Gedanken zum Reverse Engineering" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Gedanken zum Reverse Engineering, gestützt auf praktische Erfahrungen mit " +"REA und KI-Agenten." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA - Finden Sie heraus, wie Software funktioniert. Reverse Engineering mit " +"Ihrem Codierungsagenten." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "REA-Startseite" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Hauptnavigation" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA auf GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "REA auf Discord beitreten" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "REA auf X folgen" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Startseite{ph1} / {ph2}Blog{ph3} / Touhou Wiederaufbau" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Essay * Touhou-Rekonstruktion" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "Die industrielle Revolution im Reverse Engineering." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Von N0zoM1z0 · 10. Oktober 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Das Wichtigste" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Geben Sie den Agenten Autonomie über die Ermittlungen.{ph1} Legen Sie " +"ein klares Ziel und Akzeptanzkriterien fest und lassen Sie den Agenten " +"entscheiden, was er als nächstes versuchen möchte." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Verwenden Sie das Repository und Git als Arbeitsspeicher.{ph1} Behalten" +" Sie die Argumentation mit dem Code bei. Git Checkpoints lassen die nächste " +"Sitzung nach Beendigung der Konversation fortgesetzt werden." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Lassen Sie Beweise entscheiden, was Sie behaupten.{ph1} Eine sichere " +"Erklärung muss noch getestet werden. \"Unbekannt\" ist eine gültige Antwort," +" wenn die Beweise unvollständig sind." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Testen Sie auch die Verifizierungsreferenz (Oracle).{ph1} Versuchen Sie" +" Fälle, die es ablehnen sollte. Wenn ein Fehler übersehen wird, besuchen Sie" +" die früheren Ergebnisse, die davon abhingen, erneut." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Wir befinden uns in den frühen Tagen der industriellen Revolution von " +"RE.{ph1} Die Methoden nehmen immer noch Gestalt an. Es gibt noch viel zu " +"entdecken." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Wie erleben Sie Verbindungen" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Menschliche Richtung{ph1} * Ziel und Akzeptanzkriterien" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Autonomie" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Agent" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Wähle ein Experiment.{ph0}Schlage eine Hypothese vor." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Prüfung" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Prüfreferenz" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Test gegen eine{ph0}konkreter Hinweis." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Repository" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Arbeitsgedächtnis" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Code, Beweise,{ph0}kontrollen und Unterricht." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Mismatch{ph0}{ph1}Überarbeiten Sie die Hypothese{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Best{ph0}{ph1}Ausgangspunkt{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Wiederverwendung" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Übergeben{ph1} * Bewahren Sie das Ergebnis und seine Beweise auf" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Jedes Projekt verlässt das nächste mit einem besseren Ausgangspunkt. Dazu " +"gehört auch, die Prüfungen zu korrigieren, wenn wir eine Lücke entdecken." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "In diesem Artikel" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Februar 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08 : die Fortsetzung{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Zwei Ansätze{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095 : Aufbereitung{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04 : architekturübergreifend{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}Von exakt zu lesbar{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Der industrielle Wandel{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Was möglich wird{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Was hat sich im August 2026 geändert" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Vor dieser Arbeit hatte ich viel manuelles Reverse Engineering gemacht. Ich " +"würde eine Funktion inspizieren, bis ich eine Erklärung hatte, und diese " +"Erklärung dann gegen das Programm testen. Weiter zu kommen bedeutete, mehr " +"Zeit mit der nächsten Funktion zu verbringen. Es bedeutete auch, ein immer " +"größeres Bild in meinem Kopf zu behalten." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"Der größte Teil meiner Arbeit dreht sich um Spiele. Ich rekonstruiere sie, " +"damit ihr Verhalten verstanden und schließlich in einen Softwareport oder " +"einen Mod übertragen werden kann. Das ist die Erfahrung hinter diesem " +"Artikel. Die Methode kann an anderer Stelle nützlich sein, aber jedes Feld " +"muss festlegen, was es anhand einer zuverlässigen Referenz überprüfen kann." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"Im August 2026 begann ich, agentengesteuerte RE ernsthaft zu erforschen. Ich" +" wollte sehen, wie weit ein Agent mit Zugriff auf das Programm und " +"gewöhnliche Entwicklungstools kommen kann. Touhou Reconstruction gab mir ein" +" umfangreiches Projekt, in dem ich es herausfinden konnte." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Der frühe Fortschritt war verblüffend. Eine Untersuchung könnte weitergehen," +" ohne dass ich jeden einzelnen Schritt auswähle. Bei einem fehlgeschlagenen " +"Vergleich wird der Agent möglicherweise an einen anderen Anrufer gesendet. " +"Es könnte eine kleine Diagnose schreiben und anhand des Ergebnisses " +"entscheiden, was als nächstes versucht werden soll. Ihm diese Freiheit zu " +"geben, machte einen Unterschied: Ich konnte mehr Aufmerksamkeit auf die " +"Richtung des Projekts richten und darauf, ob seine Überprüfungen " +"vertrauenswürdig waren." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"Das Tempo erregte zuerst meine Aufmerksamkeit. Dann begann ich mich zu " +"fragen, was über das aktuelle Projekt hinaus überleben würde. Würde das " +"nächste Spiel von allem profitieren, was wir gerade gelernt hatten?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08 : auf menschlicher Arbeit aufbauen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} MODELL: TH08 {ph1}, Unvergängliche Nacht, begann als Fortsetzung von " +"{ph2} Die Rekonstruktion von GensokyoClub{ph3}. Ihre öffentliche Quelle gab " +"mir eine substanzielle Grundlage. Es kam mit Kenntnis des Builds und einer " +"Geschichte von Beiträgen, die ich in der Fortsetzung aufbewahrt habe." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"Die importierte Historie endet am öffentlichen Kontrollpunkt am 10.August. " +"Meine selbständige Fortsetzung begann am 13.August. Bis zum 19.August " +"zeichnete das Ledger die Quelle für alle 1.107 identifizierten " +"Spielfunktionen auf." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Ein spielbarer Linux-Rekonstruktionsport wurde am 24.August, ungefähr elf " +"Tage nach Beginn der Fortsetzung, festgelegt. Eine Webausgabe folgte. Die " +"native 64-Bit-Version Linux ist am 30.August eingetroffen." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Was mir auffiel, war, dass die Arbeit ein Programm erreicht hatte, das die " +"Leute ausführen konnten. Der Weg dorthin erforderte folgende Probleme, die " +"über eine einzelne Funktion hinausgingen. Selbst wenn zwei Funktionen " +"isoliert richtig aussahen, konnten sie versehentlich separate Kopien des " +"Status verwenden, die gemeinsam genutzt werden sollten." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Dies machte Referenzprüfungen zu einem zentralen Bestandteil der Arbeit. Ich" +" nenne sie {ph0}Verifikationsreferenzen (Orakel){ph1}. Ein Codevergleich " +"kann uns sagen, ob eine rekonstruierte Funktion die ursprünglichen " +"Anweisungen reproduziert. Eine Laufzeitprüfung kann uns sagen, ob eine " +"ausgeübte Route den erwarteten Zustand erreicht. Der Agent schlägt eine " +"Erklärung vor und testet sie; Eine Nichtübereinstimmung gibt ihm etwas " +"Spezifisches zu untersuchen." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Eine exakte Übereinstimmung mit der falschen Konstante" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Eine Verifizierungsreferenz (Oracle) ist Software, die jemand geschrieben " +"hat. TH08 hat mich deutlich daran erinnert, wie viel von dieser Software " +"abhängen kann." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"Im September führte ein Fehler, der von einem nachgeschalteten Switch-Port " +"gemeldet wurde, zur automatischen Erfassung von Elementen zurück. Die " +"rekonstruierte Quelle überprüfte die Leistung des Spielers gegen {ph0}. Das " +"Original verwendet {ph1}, der Schwellenwert für die maximale Leistung." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"Die normale Leistung ist nicht negativ, so dass die rekonstruierte " +"Leistungsprüfung effektiv immer erfüllt wurde. Oberhalb der Sammellinie " +"könnte das Spiel Gegenstände anziehen, ohne maximale Kraft zu benötigen. Die" +" anderen Ausnahmen in der Bedingung waren korrekt. Diese eine Konstante " +"veränderte das Verhalten." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "" +"{ph0}Doch die Funktion hatte den genauen Vergleich bereits bestanden.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Eine Neuerstellung kann eine Konstante an eine andere Adresse setzen. Das " +"Vergleichstool berücksichtigte dies, indem es die Adressen in den " +"kompilierten Anweisungen anpasste, bevor es sie mit dem Original verglich. " +"Der Gleitkommawert, der an der referenzierten Adresse gespeichert ist, wurde" +" jedoch nie überprüft." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Das hinterließ ein Loch im Scheck. Es könnte die rekonstruierte Anweisung " +"auf die des Originals verweisen {ph0} während die Quelle noch sagte {ph1}. " +"Die Befehlsbytes stimmten überein. Die Quelle meinte etwas anderes." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"Der {ph0}2. September behoben{ph1} korrigierte die Quelle und ließ den " +"Vergleich die tatsächlichen Bytes der referenzierten Konstante überprüfen. A" +" {ph2}umfassendere Prüfung{ph3} dann wurden 1.548 Gleitkommakonstanten-" +"Referenzen untersucht. Es wurden weitere zwölf falsche Referenzen für fünf " +"akzeptierte Funktionen gefunden." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"Der Vergleich überprüft nun jede solche Gleitkommakonstante. Seine Tests " +"enthalten absichtlich falsche Werte, um sicherzustellen, dass sie abgelehnt " +"werden. Wir mussten auch Ergebnisse überprüfen, die die schwächere Prüfung " +"bestanden hatten." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}Die Verifikationsreferenz (Oracle) musste ebenfalls rekonstruiert " +"werden.{ph1} Das Reparieren war Teil der Reparatur des Spiels." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Das ist wichtig, wenn das Team hauptsächlich aus einer Person besteht, die " +"mit Agenten arbeitet. Ich kann nicht jede Linie, die sie produzieren, " +"persönlich inspizieren, daher ruht ein Großteil meines Vertrauens auf ihren " +"Kontrollen. Der blinde Fleck einer gemeinsamen Verifizierungsreferenz " +"(Oracle) kann viele Untersuchungen beeinflussen, bevor ich es bemerke. Ich " +"muss verstehen, was der Prüfer tatsächlich überprüft, und es anhand von " +"Fällen testen, die fehlschlagen sollten." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"Im weiteren Verlauf der Arbeit wurden diese Überprüfungen Teil des " +"Repositorys. Ebenso die Gründe für Quelländerungen und Notizen, die eine " +"spätere Sitzung dort aufnehmen ließen, wo eine frühere aufgehört hatte. " +"{ph0}Das Quellcode-Repository wurde zum Arbeitsspeicher des Projekts.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Ein erfolgreicher Batch gab uns sowohl wiederhergestellten Code als " +"auch eine bessere Umgebung für den nächsten Batch.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Zwei verschiedene Rekonstruktionsideen" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"Von GensokyoClub {ph0}öffentliche README-DATEI{ph1} macht seine Ablehnung " +"dieser Art von Arbeit deutlich. In der Bekanntmachung wird angekündigt, dass" +" die weitere Entwicklung bis zur Fertigstellung privat erfolgen wird. Eine " +"Passage lautet:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"Der Aufstieg von Griftern (KI-Dekompilierungen und -portierungen) in diesem " +"Bereich, die aus unserer Arbeit stammen, zeichnet ein schlechtes Bild für " +"zukünftige Dekompilierungsbemühungen…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"Der Hinweis beschreibt auch die psychologische Belastung der Betreuer. Ihre " +"Beitragsrichtlinie schließt Pull-Anfragen aus, die hauptsächlich mit KI " +"erstellt wurden. Sie haben ihre Freizeit in schwierige Arbeit gesteckt, und " +"diese Arbeit hat dazu beigetragen, dass ich weitermachen konnte. Ich " +"respektiere den Aufwand, der dahinter steckt. Die Meinungsverschiedenheit, " +"die ich diskutieren möchte, betrifft die Frage, wie der Wiederaufbau " +"ablaufen soll und wie ein Beitrag zu bewerten ist." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"Im manuellen Workflow, den ich kannte, fiel das Entwickeln eines " +"Funktionsverständnisses und das Rekonstruieren in der Regel derselben Person" +" zu. Ein Projekt stützte sich stark auf das Fachwissen dieser Person. Das " +"Vertrauen in den Mitwirkenden war wichtig, weil so viele Überlegungen " +"während der Arbeit stattfanden." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Bestehende Projekte bewahren bereits Wissen in ihrer Quelle und bauen " +"Werkzeuge. Was sich für mich geändert hat, war, dass ein Agent dieses Wissen" +" nutzen konnte, um die nächste Untersuchung selbstständig durchzuführen." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"In meiner Fortsetzung entscheide ich das Ziel und den Standard für die " +"Annahme eines Ergebnisses. Der Agent hat große Freiheit zu untersuchen. Der " +"vorgeschlagene Wiederaufbau muss dann die entsprechenden Kontrollen " +"überstehen. Ich möchte, dass eine andere Person untersuchen kann, warum wir " +"uns für eine Implementierung entschieden haben, auch wenn ein Agent die " +"meiste Arbeit erledigt hat." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Dies kann ein schwieriger Übergang sein. Jahrelange sorgfältige Arbeit kann " +"die Grundlage für eine Fortsetzung werden, die sich viel schneller bewegt. " +"Das wirft echte Fragen zum Kredit auf. Es ändert auch, was Betreuer wissen " +"müssen, bevor sie einen Beitrag annehmen." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"Die industrielle Analogie hilft mir, darüber nachzudenken. In einem Handwerk" +" hängt ein Großteil des Prozesses von den Fähigkeiten der Person ab, die ihn" +" ausführt. Maschinen ändern sich dort, wo diese Fähigkeit benötigt wird. " +"Jemand muss den Prozess noch entwerfen und erkennen, wenn seine Ausgabe " +"falsch ist. Verschiedene Gemeinschaften können wählen, wie viel von dieser " +"Veränderung sie übernehmen möchten." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Meine Entscheidung ist es, offen fortzufahren, wobei das ererbte Werk " +"gutgeschrieben und seine Geschichte bewahrt wird. Ich möchte, dass die neue " +"Arbeit überprüfbar ist. Das gibt uns die Möglichkeit zu fragen, wie weit " +"dieser Ansatz gehen kann und aus dem zu lernen, was auf dem Weg schief geht." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Quelle: GensokyoClubS {ph0}LIESMICH-Hinweis{ph1}, überprüft am 10. Oktober " +"2026, und seine {ph2}beitragsrichtlinie{ph3}. Das Zitat ist ein gekürzter " +"Auszug. Von TH08 {ph4}credits und Provenienz{ph5} notieren Sie die " +"Fortsetzungsgrenze." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095 : Erfahrung beginnt sich zu vermehren" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} MODELL: TH095 {ph1}, Schieße auf die Kugel, machte den Wert dieser " +"Erfahrung viel leichter zu erkennen. Das Repository begann am 29. August mit" +" null bestätigten Spielfunktionen im Hauptbuch. Wir mussten das Spiel noch " +"lernen. Aber wir wussten schon viel mehr darüber, wie man einen Wiederaufbau" +" beginnt und wie man ihn in Bewegung hält." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"Bis zum 7. September hatten alle 697 identifizierten Spielfunktionen eine " +"Quelle. Bis zum 8. September waren 696 als exakte Vergleiche akzeptiert " +"worden. Das gesamte Programm ist am 9. September verlinkt. Die Windows " +"i386-Rekonstruktion wurde am 10.September, etwa zwölf Tage nach der " +"Initialisierung, als spielbar markiert." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Ich fand das spannender als die Geschwindigkeit des ersten Projekts. Ein " +"neues Ziel könnte von der Arbeit an einem anderen Spiel profitieren. Die " +"Erfahrung war bereits in den Tools und in der Organisation des Projekts " +"vorhanden." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Zum Beispiel hatte uns TH08 beigebracht, frühzeitig auf das " +"zusammengestellte Programm zu achten. Wenn mehrere wiederhergestellte " +"Funktionen vom selben Zustand abhängen, lassen ihre isolierten Vergleiche " +"eine wichtige Frage offen. Wir müssen sehen, wie sie zusammenarbeiten. Diese" +" Lektion hat dazu beigetragen, wie wir uns dem gesamten Programmaufbau von " +"TH095 näherten." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Eine Lektion, die in meinem Kopf bleibt, ist nützlich, während ich dort bin." +" Sobald überprüft wird, ob eine andere Sitzung ausgeführt werden kann, kann " +"sie weiterhin helfen, nachdem ich weitergezogen bin. Der nächste Agent kann " +"das Ergebnis verwenden, ohne die Untersuchung zu wiederholen, die dazu " +"geführt hat." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Der Gleitkommakonstanten-Fehler gehört auch in diesen Speicher. Es erklärt, " +"warum die Überprüfung einer Referenz auch die Überprüfung der Daten dahinter" +" erfordert. Wenn diese Korrektur im Code beibehalten wird, können spätere " +"Projekte vermeiden, dass der blinde Fleck der alten Prüfung vererbt wird." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}Die Methode wird Teil des Ausgangsmaterials für das nächste Spiel.{ph1}" +" Wir können mehr von den Anstrengungen des nächsten Projekts darauf " +"verwenden, was an seinem Ziel tatsächlich neu ist." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Der gleiche Vorteil steht Personen zur Verfügung, die später beitreten. Sie " +"können eine Entscheidung einsehen und ihre Prüfung wiederholen, bevor sie " +"die Arbeit fortsetzen. Sie müssen nicht die gesamte Projektgeschichte " +"rekonstruieren, um herauszufinden, warum die Quelle so aussieht, wie sie " +"aussieht." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04 : Der Workflow überlebt eine andere Architektur" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} MODELL: TH04 {ph1}, Lotus Land Story, nahm diese Arbeit in die PC-98 " +"DOS-Ära auf. Das Ziel war nun eine 16-Bit-Umgebung mit vier kooperierenden " +"Programmen. Um das Hardwareverhalten zu verstehen, waren andere Beweise als " +"bei den Windows-Spielen erforderlich. Bestehenden {ph2}ReC98 Arbeit{ph3} gab" +" uns auch hier wertvolles Wissen und Quellenmaterial." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"Die DOS-Rekonstruktion funktioniert jetzt. In meinen manuellen Tests habe " +"ich komplette normale Routen durch ihre Enden gespielt und Speicherstände " +"überprüft. Die aktuelle Arbeit ist eine native 64-Bit-Portierung. Das " +"Einrichten einer funktionierenden DOS-Version gibt diesem Port zuerst eine " +"Referenz." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"Die Architektur veränderte das, was wir untersuchen mussten. Es hat auch den" +" Compiler und die Laufzeit geändert, mit denen wir unsere Arbeit überprüft " +"haben. Aber der Agent könnte immer noch einer Frage bis zu einem Ergebnis " +"folgen und dieses Ergebnis das nächste Experiment leiten lassen." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Betrachten Sie den Übergang vom Gameplay zu einem Ende. Wir müssen wissen, " +"welcher Staat diese Grenze überschreitet und welches Programm dafür " +"verantwortlich ist. Das können wir gegen das DOS-Produkt untersuchen. Sobald" +" die Beweise und Überprüfungen verfügbar sind, kann ein Agent die Frage " +"ähnlich wie bei einem Windows-Titel bearbeiten." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"Aus diesem Grund ist TH04 für das Argument von Bedeutung. Ein wesentlicher " +"Plattformwechsel hat uns nicht gezwungen, mit einer neuen Arbeitsweise von " +"vorne zu beginnen. Die Architektur definierte das Problem; Der Workflow gab " +"uns immer noch einen Weg, es zu lösen." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Für den 64-Bit-Port können wir jetzt die neue Implementierung anhand des " +"Verhaltens untersuchen, das bereits unter DOS wiederhergestellt wurde. Das " +"Wissen aus dem Wiederaufbau gibt dem Hafen etwas, auf dem er aufbauen kann." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Projektstand per 10.Oktober 2026: {ph0}DOS-Rekonstruktion und manuelles " +"Testen{ph1} · {ph2}64-bit-Anschluss{ph3}. Der Hafen bleibt in der " +"Entwicklung." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Vom exakten Code zum lesbaren Code" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Sobald eine Rekonstruktion funktioniert, möchte ich, dass jemand anderes sie" +" verstehen kann." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Montage und Rohversatz können sich für mich wie alte Freunde anfühlen. Mir " +"ist klar, dass dies eine etwas ungewöhnliche Definition von “lesbar\" ist.\"" +" Die meisten Leute würden es vorziehen, der Logik des Spiels zu folgen, ohne" +" das Speicherlayout der ausführbaren Datei im Kopf zu behalten." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"Das ist wo {ph0}semantische Rekonstruktion{ph1} hereinkommen. Ein " +"wiederhergestelltes Feld kann immer noch hauptsächlich durch seinen Offset " +"bekannt sein. Wir verfolgen, wie das Spiel es verwendet, bis wir seine Rolle" +" erklären können. Dann können wir ihm einen aussagekräftigen Namen und einen" +" Typ geben, der zu den Beweisen passt. Wir behalten die Begründung bei der " +"Quelle, damit die nächste Person sehen kann, woher diese Interpretation " +"stammt." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Dies wird besonders wichtig für einen Software-Port. Eine absolute Adresse " +"sagt mir, wo etwas in der alten ausführbaren Datei gelebt hat. Es gibt einer" +" 64-Bit-Implementierung wenig Hilfe bei der Entscheidung, welches Objekt " +"diesen Status besitzen soll. Um das Verhalten sicher zu verschieben, müssen " +"wir die Beziehung hinter dem alten Speicherzugriff wiederherstellen." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "Die Reihenfolge, die ich jetzt benutze, ist:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Stellen Sie eine genaue Basislinie wieder her.{ph1} Kompilieren Sie die" +" rekonstruierten Stücke mit dem historischen Compiler. Vergleichen Sie den " +"relevanten Code und die relevanten Daten mit der ursprünglichen ausführbaren" +" Datei. Zeichnen Sie ungelöste Differenzen auf, damit die nächste Phase " +"einen klaren Ausgangspunkt hat." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Baue und spiele es auf der ursprünglichen Plattform.{ph1} Verknüpfen " +"Sie diese Teile mit der ursprünglichen Architektur und dem ursprünglichen " +"Compiler mit dem realen Programm. Übe wichtige Spielpfade aus. Hier können " +"wir Probleme mit dem gemeinsamen Status oder der Initialisierung finden, die" +" ein isolierter Funktionsvergleich übersehen hat." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Rekonstruieren Sie die Semantik anhand beider Referenzen.{ph1} Nehmen " +"Sie jeweils einen zusammenhängenden Teil des Spiels und stellen Sie fest, " +"was die wiederhergestellte Quelle bedeutet. Verbessere seine Darstellung " +"unter Beibehaltung der genauen Vergleiche und des spielbaren historischen " +"Builds." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Machen Sie den modernen Hafen.{ph1} Verschieben Sie das etablierte " +"Verhalten in die neue Umgebung, z. B. einen nativen 64-Bit-Build. Das " +"rekonstruierte Original-Plattformspiel bleibt eine Referenz für den " +"Vergleich des Verhaltens des Ports." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"Der spielbare Build aus der zweiten Stufe wird zu einem {ph0}zweite " +"Verifizierungsreferenz (Oracle){ph1} während der dritten. Die erste " +"Verifikationsreferenz (Oracle) prüft, ob unsere geänderte Quelle noch den " +"relevanten Originalcode und die entsprechenden Originaldaten reproduziert. " +"Die zweite überprüft, ob das rekonstruierte Programm auf den von uns " +"ausgeübten Pfaden noch korrekt aufgebaut ist und sich korrekt verhält." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Sie fangen verschiedene Fehler. Eine Typänderung kann die generierten " +"Anweisungen ändern. Ein Eigentümerwechsel kann dazu führen, dass zwei Teile " +"des Spiels unterschiedliche Kopien des Zustands verwenden. Wenn Sie beide " +"Überprüfungen verfügbar halten, muss der Agent dies konkret untersuchen, " +"bevor er einen Refactor weiterführt." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Ein Name braucht einen eigenen Beweis. Ein genauer Vergleich kann uns nicht " +"sagen, ob ein Feld wirklich “Unverwundbarkeitszeit\" bedeutet.\" Wir müssen " +"das anhand der Art und Weise feststellen, wie das Spiel es schreibt und " +"verwendet. Bleibt die Bedeutung ungewiss, ist ein neutraler Name für den " +"nächsten Leser hilfreicher als eine sichere Vermutung." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Diese Reihenfolge haben wir durch die Projekte gelernt. TH08 hatte bereits " +"vor einigen seiner späteren Audits für historische Plattformen spielbare " +"Ports. Das machte es schwieriger, bestimmte Mängel zu erkennen. Der " +"{ph0}Aktueller Workflow der Fabrik{ph1} stellt den ursprünglichen Plattform-" +"Build an die erste Stelle, damit die semantische Arbeit ihn als Referenz " +"verwenden kann, bevor die Portierung beginnt." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}Die genaue Rekonstruktion gibt uns einen Hinweis. Die semantische " +"Rekonstruktion macht das gewonnene Wissen nutzbar.{ph1} Ein Port kann dann " +"auf beiden aufbauen." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Was macht diesen industriellen Wandel aus" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Diese Projekte haben sich verändert, wo ich meine Aufmerksamkeit aufgewendet" +" habe. Sobald Agenten einen Großteil einer Untersuchung vorantreiben " +"konnten, wurde die Verbesserung ihres Arbeitsumfelds zu einem der " +"nützlichsten Dinge, die ich tun konnte. Ein besseres Werkzeug könnte bei " +"jeder späteren Funktion helfen, die es benötigt." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"Autonomie ist hier wichtig. Der sinnvolle nächste Schritt wird oft erst nach" +" einem gescheiterten Experiment klar. Ein Agent braucht genug Freiheit, um " +"diesem Ergebnis irgendwo unerwartet zu folgen. Wenn es darauf warten muss, " +"dass ich jeden Schritt vorschreibe, bleibt ein Großteil der Arbeit an meine " +"Aufmerksamkeit gebunden." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Ich erwarte, dass der Agent falsche Hypothesen aufstellt. Entscheidend ist, " +"ob wir sie testen und aus dem Ergebnis lernen können. Eine fehlgeschlagene " +"Überprüfung sollte ihm helfen, den Fehler gut genug zu verstehen, um es " +"erneut zu versuchen. Ich muss noch entscheiden, ob die gesammelten Beweise " +"einen Projektmeilenstein unterstützen." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA gibt dem Agenten Zugriff auf Analysetools. Eine Frage zum Aufrufer einer" +" Funktion kann direkt zur Überprüfung dieses Aufrufers führen. Das " +"Rekonstruktionsprojekt liefert den Compiler und seine eigenen " +"Referenzprüfungen. Der Agent kann diese verwenden, um die von ihm " +"vorgeschlagene Quelle zu testen und zu sehen, wo seine Erklärung steht." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"Der Fehler TH08 zeigt, warum diese Überprüfungen eigene technische " +"Aufmerksamkeit verdienen. Wenn derselbe Vergleich über Hunderte von " +"Funktionen hinweg verwendet wird, kann sich eine Lücke darin viel weiter " +"ausbreiten als ein Fehler in einer Implementierung. Das Testen des Prüfers " +"verbessert das Feedback, das für alle späteren Arbeiten verfügbar ist." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"Die industrielle Analogie hat hier ein nützliches historisches Beispiel. " +"Boulton und Watt führten ein {ph0}dampfmaschinenanzeige im Jahr 1796{ph1} um" +" die Einstellung der Motorventile zu erleichtern. Eine Aufzeichnungsversion " +"zeichnete den Druck über den Kolbenhub auf. Es stellte das interne Verhalten" +" des Motors zur Inspektion zur Verfügung. Unsere Vergleichstools dienen " +"einem ähnlichen Zweck: Sie lassen uns untersuchen, was die Maschinen tun, " +"während wir sie verbessern." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Wir befinden uns in einem frühen Stadium dieses industriellen " +"Wandels.{ph1} Ein Großteil der Infrastruktur ist noch unausgereift. Agenten " +"können sich schneller bewegen, als unsere Prüfungen unterstützen sollen, " +"daher muss sich der Prozess neben ihnen entwickeln. Wenn wir einen Defekt in" +" einem gemeinsam genutzten Tool finden, müssen wir ihn reparieren und die " +"betroffenen Ergebnisse erneut überprüfen. Das nächste Projekt kann dann ein " +"stärkeres Werkzeug erben." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Es gibt auch eine praktische Grenze für jedes einzelne Gespräch. Es wird " +"enden, bevor eine große Rekonstruktion abgeschlossen ist. Das Quellcode-" +"Repository muss es ermöglichen, dass eine weitere Sitzung fortgesetzt werden" +" kann, ohne den Grund für die letzte Entscheidung zu verlieren." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"Der {ph0}Touhou-Wiederaufbaufabrik{ph1} wuchs aus diesem Bedürfnis heraus. " +"Es gibt Projekten eine gemeinsame Möglichkeit, ihre Prüfungen und Lektionen " +"voranzutreiben. Die Arbeit an einem Spiel kann die Startbedingungen für ein " +"anderes verbessern." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"Das macht die industrielle Analogie für mich sinnvoll. Erfahrung wird Teil " +"von Werkzeugen, die andere nutzen können. Die Verbesserung dieser Tools " +"ändert, wie viel die nächste Person — oder der nächste Agent - erledigen " +"kann." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Die Projekte, die wir jetzt in Betracht ziehen können" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Das Tempo ist wichtig, weil es die Entscheidung ändert, zu beginnen. Ein " +"Spiel könnte faszinierend zu rekonstruieren sein und trotzdem mehr von " +"meiner eigenen Aufmerksamkeit verlangen, als ich es realistisch geben " +"könnte. Viele Projekte würden Ideen bleiben." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Jetzt sehe ich einen Weg, ein solches Projekt durch wiederholte " +"Untersuchungen am Laufen zu halten. Eine funktionierende Rekonstruktion " +"macht einen Software-Port praktischer. Das Wiederherstellen lesbarer " +"Semantik erleichtert es anderen, einen Mod zu erkunden. Der Aufwand, das " +"Spiel zu verstehen, kann sich nach dem Start der ersten Version weiter " +"auszahlen." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Ich schaue mir jetzt ein unbekanntes Programm an und frage: {ph0}welcher " +"Zugang, welches Feedback und welches gesammelte Wissen würden einen Agenten " +"zuverlässig daran arbeiten lassen?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Diese Frage lässt mich über Projekte nachdenken, die ich vorher in Ruhe " +"gelassen hätte. Jeder kann die Art und Weise verbessern, wie wir uns dem " +"nächsten nähern. Ich möchte weiter erforschen, wie weit uns das bringen " +"kann." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Projektmeilensteine und Quellen" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Die Daten beschreiben aufgezeichnete Projektprüfpunkte, die am 10.Oktober " +"2026 mit der öffentlichen GitHub-Historie abgeglichen wurden. Die " +"verstrichene Zeit ist die Kalenderzeit zwischen den Commits. Quellenpräsenz," +" genaue Vergleiche, ein Build- und ein Laufzeitergebnis nennen jeweils einen" +" anderen Meilenstein." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} MODELL: TH08 :{ph1} {ph2}13. August Fortsetzung{ph3}, {ph4}19. August " +"Quellenbuch{ph5}, {ph6}24. August Linux Hafen{ph7}, {ph8}Webausgabe vom 26. " +"August{ph9}, und {ph10}30. August Veröffentlichung der 64-Bit-Version " +"Linux{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} MODELL: TH095 :{ph1} {ph2}29. August erstes Hauptbuch{ph3}, {ph4}7. " +"September Quellenbuch{ph5}, {ph6}8. September Vergleiche{ph7}, {ph8}9. " +"September Verknüpfung{ph9}, und {ph10}10. September spielbar-Rekord " +"erstellen{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} MODELL: TH04 :{ph1} {ph2}Übergabe am 10. Oktober{ph3} zeichnet die " +"funktionierende DOS-Rekonstruktion, den vollständigen Normalroutentest des " +"Betreuers und die aktuelle 64-Bit-Phase auf." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} TH08 Verifizierungsreferenz (Oracle) Korrektur:{ph1} {ph2}der " +"gemeldete Fehler bei der automatischen Erfassung{ph3}, {ph4}der Quell- und " +"Vergleichs-Fix{ph5}, und {ph6}das vollständige Gleitkommakonstanten-" +"Audit{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Semantische Rekonstruktion:{ph1} {ph2} TH08S Lesbarkeits-Playbook{ph3} " +"und {ph4}Phasenreihenfolge der Fabrik und zwei Validierungspfade{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Industriegeschichte:{ph1} {ph2}rekord für Dampfmaschinenindikatoren der" +" Science Museum Group{ph3} beschreibt die Einführung von 1796 und den " +"Druckaufzeichnungsmechanismus." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Methode:{ph1} Fabrik {ph2}agenten-Autonomie{ph3} und " +"{ph4}spielübergreifendes Wissen{ph5} dokumente behalten die " +"Arbeitsprinzipien und Lektionen bei." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "" +"{ph0}Weitere Artikel{ph1} · {ph2}Erkunden Sie eine TH04-Untersuchung{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Die industrielle Revolution des Reverse Engineerings - REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 reflektiert das manuelle Reverse Engineering, die Touhou-" +"Rekonstruktion mit KI-Agenten und wie sich das Wissen in TH08 , TH095 und " +"PC-98 TH04 zusammenfügt ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Erfahrungsaustausch zwischen Projekten" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Touhou Wiederaufbau Essay" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Startseite{ph1}{ph2}/{ph3}Dinosaurier-Geschwindigkeitslabor" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Inspizieren → Neu erstellen → Ändern" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Baue die Geschwindigkeitsregel des Dinosauriers wieder auf." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Um die Beschleunigung des Spiels wiederherzustellen, suchen Sie zuerst die " +"Regel, die seine Geschwindigkeit steuert. {ph0} REA hat das laufende Skript " +"zurückgegeben;{ph1} wir haben seine Regel verwendet, um dieses Minispiel mit" +" zu bauen {ph2}einstellbare Geschwindigkeit.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Spielen und die Geschwindigkeit ändern{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Lesen Sie die wiederhergestellte Regel{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Überprüfen Sie die Rekonstruktion{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Probieren Sie die Analyse aus{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Spielen und die Geschwindigkeit ändern" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Drücke Play und springe dann über den Kaktus. Bewegen Sie den " +"Geschwindigkeitsregler, um ein langsameres oder schnelleres Spiel zu " +"versuchen. es schaltet auf eine feste Geschwindigkeit um. Wählen Sie die " +"wiederhergestellte Regel aus, um bei 6 zu beginnen und schrittweise wieder " +"zu beschleunigen." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Den Nachbau spielen" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Spielen" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Springen ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Neustart" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Geschwindigkeit" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Verwenden Sie die wiederhergestellte Beschleunigungsregel" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "" +"Ursprüngliche Regel: Beginnen Sie bei 6 und erhöhen Sie sich dann in " +"Richtung 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Bewegen Sie den Schieberegler, um Ihre eigene Geschwindigkeit einzustellen. " +"Leertaste oder Sprung löscht einen Kaktus." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Aktivieren Sie JavaScript, um die Rekonstruktion abzuspielen. Der Code und " +"die obige Erklärung bleiben lesbar." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Lesen Sie das zurückgegebene Skript REA" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Wir inspizierten {ph0}wayous von Chromium abgeleitete Browser-Edition{ph1} " +"mit REA. Es gab das geladene zurück {ph2}, einschließlich dieses Zweigs in " +"der Update-Funktion des Spiels:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Die Einstellungen sind {ph0}, {ph1} und {ph2}. Das Spiel führt diesen Zweig " +"bei einem Update ohne Kollision aus." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Verwenden Sie die gleiche Regel im neuen Spiel" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Kopieren" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Das Minispiel nutzt diese Funktion zur automatischen Beschleunigung. Das " +"Bewegen des Schiebers liefert stattdessen eine feste Geschwindigkeit. " +"Zeichnen, Sprungphysik und Rechteckkollisionsprüfungen sind neuer Code für " +"dieses Lehrspiel; Seine Simulation schreitet mit 60 Aktualisierungen pro " +"Sekunde voran." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "" +"{ph0}Laden Sie die Geschwindigkeitsregel herunter{ph1} · {ph2}Lesen Sie den " +"Spielcode{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Überprüfen Sie die Rekonstruktion" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Wir haben die Update-Funktion des Originalspiels mit deaktivierten " +"Hindernissen und automatischer Zeitplanung aufgerufen. Vergleichen Sie diese" +" aufgezeichneten Geschwindigkeiten mit einer Wiedergabe der " +"wiederhergestellten Regel." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Aktualisierungen" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Originalspiel" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Rekonstruierte Herrschaft" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Führen Sie den Geschwindigkeitscheck durch" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Werte auf drei Dezimalstellen gerundet. Der Zweig prüft vor dem Hinzufügen, " +"sodass das letzte Inkrement eine Geschwindigkeit von knapp über 13 annehmen " +"kann." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Probieren Sie die Analyse selbst aus" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Einrichten von REA {ph1} mit Ihrem Codierungsagenten." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Folgen Sie dem {ph0}schritte zur Browser-Verbindung{ph1}, wobei {ph2} wie " +"die Seiten-URL." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Geben Sie Ihrem Agenten die Seiten-URL und den lokalen Debugging-Endpunkt " +"und kopieren Sie diese Eingabeaufforderung." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um dieses Dinosaurierspiel zu " +"inspizieren. Warum wird es schneller? Zeigen Sie die Geschwindigkeitsregel " +"an und bauen Sie dann eine kleine Version mit einstellbarer " +"Geschwindigkeit.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Fragen Sie ein Follow-up: {ph0}“Wo wird die Sprunghöhe berechnet? Fügen Sie " +"der neuen Version eine Sprunghöhensteuerung hinzu.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Quelle: {ph0}geprüfter Geschwindigkeitscode{ph1}, Chromium Autoren. " +"{ph2}Urheberrecht und BSD-Lizenz{ph3}. REA 4.1.0 hat die laufende HTTP-" +"Edition in Chrome 150 überprüft." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "" +"Chrome Dinosaurier-Spiel: Bauen Sie seine Geschwindigkeitsregel wieder auf -" +" REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Lies die Geschwindigkeitsregel des Dinosaurierspiels mit REA, baue sie neu " +"auf, ändere dann die Geschwindigkeit und spiele." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Geschwindigkeitsrekonstruktion von Dinosauriern" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Dinosaurier-Minispiel. Verwenden Sie die Sprungtaste oder drücken Sie die " +"Leertaste, während das Spiel fokussiert ist." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Rekonstruierte Geschwindigkeitsregel kopieren" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Aufforderung zur Dinosaurieranalyse kopieren" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Startseite{ph1} / HÄUFIG GESTELLTE FRAGEN" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA HÄUFIG GESTELLTE FRAGEN." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Einrichtung, Updates, Analyse und Fehlerbehebung." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Themen" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Einrichtung und Updates{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Analyse{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Fehlerbehebung{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Daten und Weitergabe{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Einrichtung und Updates" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Wie installiere ich REA?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Terminal * Agenten-Einrichtung" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Kopieren" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"Die Einrichtung registriert die MCP-Verbindung von REA und installiert den " +"zugehörigen Analyse-Skill. Starten Sie anschließend Ihren Agenten neu und " +"geben Sie ihm einen Dateipfad und eine Frage. Die " +"{ph0}Einrichtungsanleitung{ph1} erklärt die Voraussetzungen und die erste " +"Analyse." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Welche Codierungsmittel können REA verwenden?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Jeder Agent, der lokale MCP-Server unterstützt. Die Einrichtung umfasst " +"Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, " +"OpenCode, Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP und" +" VS Code . Der Connector von Grok Bot wird aus seinem Chat hinzugefügt." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Verbinden Sie Ihren Codierungsagenten{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Wie aktualisiere ich REA?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA wird häufig veröffentlicht, einschließlich Fehlerkorrekturen. Wenn Sie " +"den CLI mit npm installiert haben :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Terminal * installiert CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Befolgen Sie den Befehl Setup Refresh, der vom Update gedruckt wird. Wenn " +"Sie Ihren Agenten über einrichten {ph0}, laufen:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Terminal * Einrichtung des Aktualisierungsagenten" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Prüfen Sie die Änderungen und starten Sie Ihren Agenten neu. Seine REA-" +"Verbindung verwendet eine festgelegte Paketversion. Führen Sie die " +"Einrichtung erneut aus, damit er die neue Version nutzt. Für einen einzelnen" +" CLI-Aufruf hängen Sie den Befehl an {ph0} an." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Installiert den Skill von skills.sh genug?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"Der Skill gibt Ihrem Agenten Anweisungen zur Untersuchung. Laufen {ph0} REA " +"Einrichtung{ph1} um den MCP-Server zu verbinden und den passenden Skill zu " +"installieren, starten Sie Ihren Agenten neu, damit er die Tools aufrufen " +"kann." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Analyse" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "Was kann ich mit REA analysieren?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Beginnen Sie mit der Art von Software, die Sie haben:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Native ausführbare Dateien und Bibliotheken{ph1}: Funktionen, " +"Assemblierung, Pseudocode und Referenzen." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Apps für JavaScript und Electron{ph1}: Module, Importe, IPC- und " +"Quellspeicherorte." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Browser-Seiten{ph1}: Skripte, Anfragen und Laufzeitbeobachtungen." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA verfügt auch über Workflows für verwaltete Assemblys, Android-APKs, " +"Firmware und gepackte Ressourcen. {ph0}Sehen Sie sich die Fallstudien " +"an{ph1} für durchgeführte Untersuchungen." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Benötige ich Hopper, Ghidra oder IDA?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"Eine gründliche Analyse von Maschinencodeprogrammen verwendet eine davon. " +"Statische JavaScript- und .NET-Inspektionen arbeiten mit den mitgelieferten " +"Dateien und benötigen keine Analyse der Maschinencode-Programm-Engine." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Verbinden Sie Ihre vorhandene Ghidra- oder IDA-Installation oder lassen Sie " +"das Setup Hopper erkennen und eine Installation vorschlagen. Ihr Host und " +"Ihr Ziel bestimmen, welcher Anbieter verwendet werden kann. {ph0}Analyse von" +" Maschinencode-Programmen einrichten{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Kann ich REA ohne Codierungsmittel verwenden?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Ja. Der CLI verwendet die gleichen Analyse-Workflows. Für eine lokale " +"JavaScript- oder Electron-App:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Terminal * statische Anwendungsanalyse" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Ersetzen Sie den Pfad durch einen extrahierten Anwendungsordner oder eine " +"ASAR-Datei. {ph0}Verwenden Sie den CLI {ph1} für Installationsoptionen." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "Welchen Code liefert REA?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"Die Analyse nativer Programme liefert Assembler und Pseudocode sowie " +"Funktionsaufrufe, Verweise und relevante Konstanten. Die JavaScript-Analyse " +"liefert Module, ihre Beziehungen und die Stellen im Quellcode." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Ihr Agent verwendet diese Erkenntnisse, um das Verhalten zu erklären oder " +"eine Implementierung zu schreiben und zu testen. Der {ph0} DX-Ball " +"Berechnung{ph1} und {ph2}CTF-Flaggenprüfer{ph3} zeigen Sie, wie dieser " +"Prozess funktioniert." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "Was soll ich meinen Agent fragen?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Geben Sie ihm ein lokales Ziel und ein zu untersuchendes Verhalten. Für eine" +" JavaScript- oder Electron-App:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Ersetzen Sie den Pfad durch Ihr Ziel. Der {ph0}Hilfslinien{ph1} geben Sie " +"Eingabeaufforderungen für native, Electron- und Browserbeispiele an." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Fehlerbehebung" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Warum kann mein Agent die REA-Tools nicht sehen?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Starten Sie Ihren Agenten nach der Einrichtung neu oder verbinden Sie ihn " +"erneut. Überprüfen Sie die REA-Registrierung mit {ph0}; für Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Terminal * Überprüfen Sie einen Client" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Ersetzen {ph0} mit Ihrer Kundennummer, wie zum Beispiel {ph1} oder {ph2}. " +"Wenn der Bericht eine fehlende oder veraltete Registrierung anzeigt, führen " +"Sie Setup für diesen Client aus:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Terminal * Reparieren Sie das Setup eines Clients" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Überprüfen Sie den Plan und starten Sie den Client neu. Wenn die " +"Registrierung fehlerfrei ist, aber keine Tools vorhanden sind, überprüfen " +"Sie den Verbindungsfehler MCP des Clients. {ph0}Weitere Setup-" +"Diagnosen{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Muss ich Hopper zuerst starten?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA startet Hopper, wenn eine Operation dies benötigt. Schließen Sie beim " +"macOS die erste Auswahl zwischen Demo-Modus oder Lizenzaktivierung vor der " +"unbeaufsichtigten Analyse ab. {ph0}Siehe Einrichtung des nativen " +"Anbieters{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Was mache ich bei einem Fehler?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Aktualisieren Sie REA {ph1}, starten Sie Ihren Agenten neu und " +"wiederholen Sie die gleiche Aufgabe. Eine aktuelle Version behebt das " +"Problem möglicherweise bereits." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Wenn es anhält, {ph0}öffnen Sie eine Ausgabe{ph1} mit Ihrer REA-Version, " +"Betriebssystem, Zieltyp, zu reproduzierenden Schritten und Fehlerausgabe. " +"Geben Sie den Anbieternamen an, wenn das Problem die Analyse von " +"Maschinencodeprogrammen betrifft." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Daten und Weitergabe" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "Lädt REA meine App hoch?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA analysiert Ziele auf Ihrem Computer. Ihr Agent erhält die Ergebnisse, " +"und die Datenrichtlinie seines Modellanbieters gilt für diese Ergebnisse." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Wie kann ich ein Beispiel teilen oder einen Beitrag leisten?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Haben Sie ein nützliches REA-Beispiel? Wir würden es gerne sehen. Teilen Sie" +" das Ziel, Ihre Frage, die Ergebnisse und wie Sie sie überprüft haben in " +"einem {ph0}Problem{ph1} oder {ph2}pull-Anfrage{ph3}. Kurze Codeauszüge und " +"Zahlen helfen anderen, die Untersuchung zu verfolgen." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Fehlerberichte, Funktionswünsche, Dokumentation und Codeverbesserungen sind " +"ebenfalls willkommen. Sie können auch ein Beispiel in der diskutieren " +"{ph0}Gemeinschaft{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA FAQ: Einrichtung, Updates und Fehlerbehebung" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Antworten auf häufig gestellte Fragen zum REA: Installation, Updates, " +"Analysetools, Codierungsagenten, Fehlerbehebung und Beispiele zum Teilen." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Häufig gestellte Fragen zu REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "REA Setup-Befehl kopieren" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Kopieren Sie den Aktualisierungsbefehl REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Befehl zum Aktualisieren des Agenten-Setups kopieren" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Kopieren Sie den REA CLI-Analysebefehl" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Beispielanalyse-Eingabeaufforderung kopieren" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Clientdiagnosebefehl kopieren" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Befehl zum Kopieren des bereichsbezogenen Setups" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Startseite{ph1} / Ihre erste Untersuchung" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Finden Sie heraus, wo{ph0}exportierte Notizen gehen." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Verwenden Sie REA, um eine kleine App zu überprüfen, folgen Sie der " +"Schaltfläche Notizen exportieren und überprüfen Sie ein Detail selbst." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "In dieser Übung" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Einrichten{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Fragen Sie nach Export{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Folge der Antwort{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Überprüfen Sie eine Vorhersage{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Stellen Sie eine andere Frage{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Verbinden Sie Ihren Agenten mit REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Kopieren" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Oder führen Sie diesen Befehl in Ihrem Terminal aus:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Überprüfen Sie den Plan, genehmigen Sie die Einrichtung und starten Sie dann" +" Ihren Agenten neu. Bereits verbunden? Weiter unten." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Fragen Sie, wo der CSV geschrieben ist" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"Das Beispiel ist eine Electron-App mit sechs Dateien und einem {ph0}Notizen " +"exportieren{ph1} Schaltfläche. Ihr Agent kann seinen Code überprüfen, ohne " +"Electron zu installieren oder zu starten." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Ihr Agent lädt die Dateien herunter und gibt den entpackten Ordner zur " +"Überprüfung an REA weiter." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Beispiel-ZIP herunterladen{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Wenn Ihr Agent keine Dateien herunterladen kann, entpacken Sie dieses Archiv" +" selbst. Gib ihm den Weg zum {ph0} ordner und die gleiche Exportfrage." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Folgen Sie der Antwort zurück zum Code" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "" +"Suchen Sie nach einer kurzen Erklärung mit Datei- und Zeilenreferenzen:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Die Schaltfläche sendet eine {ph0} Nachricht. Der Hauptprozess formatiert " +"die Notizen als CSV und schreibt {ph1} im Download-Ordner des Benutzers. Die" +" Spalten sind {ph2} und {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Von der Schaltfläche zum Dateischreiber" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"Die statische Analyse von REA koppelt die Nachricht mit ihrem Handler. Das " +"Ziel wird aus dem Code gelesen." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Der Dateipfad, der Formatierer und der Schreibaufruf sind in diesem Handler " +"zusammen. Bitten Sie Ihren Agenten, diese Zeilen zu zeigen, wenn die Antwort" +" sie auslässt." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" +"{ph0}Sehen Sie sich den vollständigen Code-Trace und das aufgezeichnete REA-" +"Ergebnis an{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Überprüfen Sie eine Vorhersage" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Die Spalten CSV werden durch ein Komma getrennt. Was passiert, wenn ein " +"Notiztitel selbst ein Komma oder Anführungszeichen enthält?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Führen Sie den Check selbst durch" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Öffnen Sie ein Terminal im entpackten {ph0} Ordner:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Dieser Befehl verwendet eine Shell mit here-Document-Unterstützung, z. B. " +"Bash oder Zsh. Ihr Agent kann denselben JavaScript in der Shell Ihrer " +"Plattform ausführen." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Stellen Sie eine andere Frage" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Versuchen Sie ein Follow-up im selben Gespräch:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"Was passiert, wenn die Datei nicht geschrieben werden kann? Folgen Sie dem " +"Fehler zurück zur Seite." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Oder geben Sie Ihrem Agenten eine eigene App und fragen Sie nach einer " +"Schaltfläche, Datei oder einem Verhalten." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Wie Notion Text und HTML kopiert{ph1}{ph2}Folgen Sie einer " +"Zwischenablage-Funktion in einer gepackten Electron-App.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Wie DX-Ball die Stereoklangpositionierung berechnet{ph1}{ph2}Lesen Sie " +"die Originalanleitung und die Überprüfungen der Rekonstruktion.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Fehlerbehebung bei der Einrichtung oder Analyse{ph1}{ph2}Aktualisieren " +"Sie REA und überprüfen Sie die Verbindung, wenn Sie nicht weiterkommen.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Ihre erste Reverse Engineering Untersuchung - REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Probieren Sie REA in einer kleinen Notizen-App aus. Richten Sie Ihren " +"Agenten ein, fragen Sie, wohin exportierte Notizen gehen, und überprüfen Sie" +" den Formatierer CSV mit einem Beispieltitel." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "Ihre erste REA-Untersuchung" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Installationsaufforderung für REA kopieren" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Setup-Befehl kopieren" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Aufforderung zur Untersuchung von Notizen kopieren" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Kopiere CSV Eingabeaufforderung prüfen" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Befehl Formatierungsprüfung kopieren" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Startseite{ph1} / Erste Schritte" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Richten Sie REA ein ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Verbinden Sie REA mit Ihrem Codierungsagenten oder überprüfen Sie eine " +"lokale App von Ihrem Terminal aus." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Öffnen Sie ein Terminal und überprüfen Sie:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Terminal" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Kopieren" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (Datenblatt){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows Datenblatt" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Geben Sie Y ein, wenn Sie aufgefordert werden, die Bedingungen zu " +"akzeptieren. Schließen Sie PowerShell, öffnen Sie es erneut und führen Sie " +"es dann aus {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Wenn PowerShell später sagt {ph0}\"das Ausführen von Skripten ist auf diesem" +" System deaktiviert.\"{ph1} wenn du rennst {ph2}, führen Sie dies einmal aus" +" und versuchen Sie es erneut:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Wenn Sie Homebrew verwenden :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "MODELL: macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Sonst:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Terminal schließen, wieder öffnen, dann:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"Der Installateur benötigt {ph0} und {ph1} (auf Debian / Ubuntu: {ph2}). " +"Schließen Sie das Terminal, öffnen Sie es erneut und dann:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Ihre eigene Distribution {ph0} paket ist oft älter als 22.19, also " +"überprüfen Sie {ph1} wenn Sie es stattdessen verwenden." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Bevorzugen Sie einen regulären Installer? Laden Sie die LTS-Version herunter" +" von {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Setup-Optionen" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Verbinden Sie Ihren Codierungsagenten{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Verwenden Sie den CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Analyse von Maschinencode-Programmen einrichten{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Hilfe bekommen{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Verbinden Sie Ihren Codierungsagenten" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Führen Sie Setup aus, um REA mit Ihrem Codierungsagenten zu verbinden. Zu " +"den Clientoptionen gehören Claude Code, Codex, Cursor, Gemini CLI, Windsurf," +" Grok Build und andere unterstützte MCP-Clients. Der Connector von Grok Bot " +"wird aus seinem Chat hinzugefügt." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Neu bei Codierungsagenten?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Ein Codierungsagent ist ein KI-Assistent, der auf Ihrem Computer statt in " +"einem Browser-Tab funktioniert. Es kann Dateien lesen und Befehle ausführen " +"und fragt, bevor Änderungen vorgenommen werden. REA gibt es Werkzeuge für " +"das Reverse Engineering." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Wenn Sie noch keine haben, wählen Sie eine aus, folgen Sie der " +"Installationsseite und melden Sie sich an:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} MODELL: Claude Code {ph2}{ph3} von Anthropic . Benötigt einen " +"kostenpflichtigen Claude-Plan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} MODELL: Codex {ph2}{ph3} von OpenAI . Melden Sie sich mit Ihrem " +"ChatGPT-Konto an." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} MODELL: OpenCode {ph2}{ph3}, OpenSource. Verbinden Sie den " +"Modellanbieter Ihrer Wahl." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Öffnen Sie es dann und kopieren Sie die folgende Eingabeaufforderung hinein." +" Der Agent führt das Setup von REA aus und zeigt Ihnen den Plan an, bevor " +"Sie etwas ändern." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Oder führen Sie das Setup selbst aus" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Wie öffne ich ein Terminal?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} MODELL: Windows :{ph1} öffnen Sie das Startmenü, geben Sie ein " +"{ph2}PowerShell{ph3} und drücken Sie die Eingabetaste." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} MODELL: macOS :{ph1} drücken {ph2} {ph3}, Art {ph4}Terminal{ph5} und " +"drücken Sie die Eingabetaste." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0} MODELL: Linux :{ph1} drücken {ph2} {ph3} {ph4} auf den meisten " +"Desktops." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Fügen Sie einen Befehl mit ein {ph0} {ph1} ( macOS ) : {ph2} {ph3}; Linux " +"Anschlussklemmen: {ph4} {ph5} {ph6}), und drücken Sie dann die Eingabetaste." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Wählen Sie Ihren Kunden und überprüfen Sie den Einrichtungsplan. REA fügt " +"seine MCP-Verbindung und die passende Ermittlungsfähigkeit hinzu und sichert" +" die vorhandene Konfiguration. Es fragt nach, bevor die Änderungen " +"übernommen werden." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Starten Sie Ihren Client neu, wenn das Setup abgeschlossen ist." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Wie starte ich meinen Client neu?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Desktop-Anwendungen{ph1} (Claude Desktop, Cursor , Windsurf , VS Code):" +" Beenden Sie die App vollständig und öffnen Sie sie erneut. Das Fenster zu " +"schließen reicht nicht aus. Auf macOS drücken Sie {ph2} {ph3}; auf Windows " +"beenden Sie auch das Taskleistensymbol, falls vorhanden." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Terminalagenten{ph1} ( Claude Code , Codex , Gemini CLI ): Beenden Sie " +"die Sitzung und starten Sie sie erneut." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Geben Sie Ihrem Agenten einen Zielpfad und eine spezifische Frage. Für eine " +"JavaScript- oder Electron-App können Sie mit beginnen:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Schau dir an {ph0} und finden Sie heraus, wie es Daten exportiert. Zeigen " +"Sie die Einstiegspunkte, Aufrufe und Abhängigkeiten mit den " +"Quellspeicherorten für Ihre Ergebnisse an." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Ersetzen Sie den Pfad durch Ihr lokales Ziel." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Wie erhalte ich den vollständigen Pfad eines Ordners?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} MODELL: Windows :{ph1} klicken Sie im Datei-Explorer mit der rechten " +"Maustaste auf den Ordner und wählen Sie {ph2}Als Pfad kopieren{ph3}. Halten " +"Sie bei Windows 10 die Umschalttaste gedrückt, während Sie mit der rechten " +"Maustaste klicken." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} MODELL: macOS :{ph1} klicken Sie im Finder mit der rechten Maustaste " +"auf den Ordner, halten Sie die Option gedrückt und wählen Sie {ph2}Kopiere " +"\"...\" als Pfadnamen{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Jedes System:{ph1} ziehen Sie den Ordner in ein Terminalfenster und " +"sein Pfad wird angezeigt." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" +"Setzen Sie in einem Terminal Anführungszeichen um einen Pfad, der " +"Leerzeichen enthält." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Verwenden Sie den CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Analysieren Sie einen JavaScript- oder Electron-Anwendungsordner oder ein " +"ASAR-Archiv, ohne die App auszuführen:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Statische Anwendungsanalyse" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Ersetzen Sie den Pfad durch Ihr extrahiertes App-Verzeichnis oder {ph0} " +"Datei. Auf Windows ein Pfad wie {ph1} arbeitet hier." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Wo finde ich eine App .asar-Datei?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron Apps halten es normalerweise in einem {ph0} Ordner:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} MODELL: Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} MODELL: macOS :{ph1} {ph2} (klicken Sie mit der rechten Maustaste auf " +"die App und wählen Sie {ph3}Packungsinhalt anzeigen{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} MODELL: Linux :{ph1} oft {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Einige Apps werden an anderer Stelle installiert. Durchsuchen Sie den Ordner" +" der App nach {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Das Ergebnis identifiziert die App, zeigt Verbindungen zwischen Modulen und " +"gibt deren Quellorte an. Verbindungen, die REA nicht auflösen kann, sind im " +"Ergebnis markiert." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Wenn Sie eine dauerhafte {ph0} befehl in Ihrer Shell:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Installieren Sie den CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Fahren Sie mit dem JavaScript-Anwendungshandbuch fort{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Analyse von Maschinencode-Programmen einrichten" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Maschinencodeprogramme benötigen ein lokales Analysewerkzeug. Wählen und " +"konfigurieren Sie eine unten, dann geben Sie REA Ihre ausführbare Datei oder" +" Bibliothek." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Wählen Sie ein Werkzeug: Ghidra , Hopper oder IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Verwenden Sie einen vorhandenen Ghidra 12.1.x-Installation und ein 64-Bit-" +"JDK 21 oder neuer auf Linux oder macOS, auf x64 oder arm64. Ihre Ghidra-" +"Installation benötigt einen nativen Dekompiler für Ihre Host-Architektur. " +"Legen Sie die Pfade fest, bevor Sie Setup ausführen:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Verbinden Sie Ihre Ghidra-Installation" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra-Anschluss · macOS / Linux-Anschluss" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Ersetzen Sie beide Pfade durch Ihre vorhandenen Installationen. Setup " +"überprüft sie und zeichnet gültige Einstellungen für Ihren ausgewählten " +"Client auf. Auf Linux arm64 müssen Sie möglicherweise den nativen Dekompiler" +" von Ghidra separat erstellen." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Verbinden Sie Ghidra mit Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 bietet experimentelle schreibgeschützte Unterstützung für native" +" x86- und x64-PE-Anwendungen und DLLs auf festen lokalen NTFS-Laufwerken. " +"Verwenden Sie einen vorhandenen Ghidra 12.1.x-Installation und ein 64-Bit-" +"JDK 21 oder neuer:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra-Verbindung * Windows-PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Ersetzen Sie die beiden Pfade durch Ihre Installationen und überprüfen Sie " +"dann den Setup-Plan." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Verbinden Sie Hopper mit macOS oder Linux. Führen Sie den obigen Setup-" +"Befehl aus. Es erkennt eine vorhandene Installation oder bietet einen " +"Installationsplan zur Genehmigung an." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"Führen Sie auf dem macOS die erste Auswahl des Demo-Modus oder der " +"Lizenzaktivierung des Hopper aus, bevor Sie eine unbeaufsichtigte Analyse " +"durchführen." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"Die verifizierten IDA-Setups verwenden Windows mit einer vorhandenen MCP-" +"Registrierung für eine angehängte GUI oder eine Headless-Datenbank. Die " +"kopflose Analyse von Linux und macOS bleibt ungeprüft." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Verbinden Sie ein vorhandenes IDA MCP Registrierung" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Halten Sie den Upstream-Server am Laufen {ph0}, {ph1} und optional {ph2} in " +"einer JSON-Datei. Eine bestehende {ph3} objekt mit einem {ph4} der Eintritt " +"wird ebenfalls akzeptiert. Zeigen Sie vor dem Einrichten mit REA auf diese " +"Datei:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA-Verbindung * Windows-PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"Das angehängte Profil verwendet Upstream-Legacy-1.4.0-Tools, wobei die " +"ursprüngliche Binärdatei bereits in IDA geöffnet ist. Das Headless-Profil " +"verwendet die vorgeschaltete Datenbank-Supervisor-API und eine Registrierung" +" bei {ph0}; die echte Überprüfung umfasst einen IDA 9.3 Windows " +"x64-Supervisor. Der Arzt überprüft die Registrierung, ohne IDA zu starten." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Geben Sie REA den ursprünglichen ausführbaren Pfad mit {ph0} in einer CLI-" +"Abfrage. Für einen Agenten, einschließen {ph1} in der Umgebung der REA-" +"Registrierung und wählen Sie IDA beim Öffnen der Binärdatei." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "Überprüfen Sie für ein vorhandenes Ghidra-Setup eine Funktion mit:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Funktionsanalyse" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "" +"Ersetzen {ph0} mit dem Funktionsnamen oder der Adresse, die Sie überprüfen " +"möchten." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "Wie die Analyse von Maschinencode-Programmsitzungen funktioniert" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Jeder Befehl CLI importiert und analysiert die Binärdatei und schließt dann " +"seine Sitzung. Die MCP-Abfragen Ihres Agenten verwenden die importierte " +"Binärdatei wieder, während diese Sitzung geöffnet ist." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Folgen Sie einer Analyse von Maschinencode-Programmen Beispiel{ph1} um " +"zu sehen, wie das Funktionsergebnis zu einer wiederhergestellten Berechnung " +"führt." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Hilfe bekommen" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Wenn Ihr Agent REA nicht sieht" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Starten Sie den Client nach dem Setup neu oder verbinden Sie ihn erneut. " +"Überprüfen Sie die REA-Verbindung mit {ph0}; für Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Überprüfen Sie einen Client" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Wenn ein Anbieter Aufmerksamkeit braucht" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Überprüfen Sie den Anbieter, den Sie verwenden. Für Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Überprüfen Sie einen Anbieter" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" +"Der Bericht enthält die fehlgeschlagene Prüfung und einen Vorschlag für den " +"nächsten Schritt." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} REA HÄUFIG GESTELLTE FRAGEN{ph1}{ph2}Schnelle Antworten auf Updates, " +"Agenten und Analysen.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Wählen Sie einen Untersuchungsleitfaden{ph1}{ph2}Arbeitsbeispiele für " +"eine Binärdatei, eine Electron-App und einen Browser.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Probleme mit GitHub{ph1}{ph2}Melden Sie ein Problem mit dem Befehl und" +" der Diagnose.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} REA Gemeinschaft{ph1}{ph2}Fragen, Untersuchungen und laufende " +"Arbeiten.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Installieren Sie REA und richten Sie Ihren Codierungsagenten ein" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Verbinden Sie REA mit Ihrem Codierungsagenten oder überprüfen Sie eine " +"lokale JavaScript- oder Electron-App vom Terminal aus. Einrichtung, erste " +"Fragen und Anleitungen für native Anbieter." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Node.js Versionsprüfung kopieren" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Kopieren Sie den Node.js-Installationsbefehl für Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Befehl zum Kopieren der PowerShell-Ausführungsrichtlinie" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Kopieren Homebrew Node.js Installationsbefehl" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Kopieren Sie den fnm-Installationsbefehl für macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Kopieren Sie Node.js 24 Befehle für macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Kopieren Sie den fnm-Installationsbefehl für Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Kopieren Sie Node.js 24 Befehle für Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA Anleitung für die ersten Schritte" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Installationsaufforderung für REA kopieren" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Befehl Agent-Setup kopieren" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Kopieren Sie den JavaScript-Analysebefehl" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Kopieren Sie den Installationsbefehl CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Ghidra-Verbindung kopieren * macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Kopieren Sie die Ghidra-Verbindung für die Windows-PowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Kopieren Sie die IDA-Verbindung für die Windows-PowerShell" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Befehl zur Analyse der nativen Funktion kopieren" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Clientdiagnosebefehl kopieren" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Provider-Diagnosebefehl kopieren" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Startseite{ph1} / {ph2}Hilfslinien{ph3} / Browser-Beobachtung" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Sehen Sie, was passiert{ph0}wenn Sie klicken." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Verwenden Sie eine kleine Browser-App, um eine Aktion, ihre " +"Netzwerkanforderung und den JavaScript, der einen Download erstellt, zu " +"verbinden." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "In diesem Handbuch" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Beispiel{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Öffnen Sie den Browser{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Fragen Sie Ihren Agenten{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Aufnahme von CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Lesen Sie die Anfrage und das Skript{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Was passiert, wenn Sie auf Exportieren klicken?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"Der {ph0}Beispiel für einen Notes-Browser{ph1} hat eine {ph2}Notizen " +"exportieren{ph3} Schaltfläche. Wenn Sie darauf klicken, wird geladen {ph4}, " +"formatiert die beiden Notizen als CSV und startet einen Download." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Vom Klick zum CSV Download" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 · Sie{ph1}{ph2}Klicken Sie auf Notizen exportieren{ph3}{ph4}Führen " +"Sie die Aktion in Ihrem Browser aus, während das Capture ausgeführt " +"wird.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA {ph1}{ph2}Notieren Sie die Anfrage{ph3}{ph4}Erfassen Sie die " +"Anforderungs-URL, den Antwortstatus und die JSON-Struktur von der " +"ausgewählten Seite.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 · Ihr Agent{ph1}{ph2}Lesen Sie den Exportcode{ph3}{ph4}Verbinden Sie" +" die beobachtete Anforderung mit {ph5} in {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Starten Sie die Aufnahme, bevor Sie auf Notizen exportieren klicken." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Öffnen Sie Chrome mit Remote-Debugging" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Öffnen Sie das gehostete Notes-Beispiel mit einem separaten Browserprofil " +"und einem lokalen Debugging-Port. Auf Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Starten Sie den Beispielbrowser" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Kopieren" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Verwenden Sie den ausführbaren Pfad Ihres installierten Browsers auf macOS " +"oder Windows . Sie können die Seiten-URL durch eine andere Seite ersetzen, " +"die Sie überprüfen möchten." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA stellt eine Verbindung zu diesem vorhandenen Browser her. Sie behalten " +"die Kontrolle über die Seite, führen die Aktion aus und schließen den " +"Browser, wenn Sie fertig sind." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Bitten Sie Ihren Agenten, eine Aktion zu sehen" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um diese Seite zu überprüfen, während ich" +" auf Notizen exportieren klicke. Welche Anfrage stellt es und wie ist der " +"CSV aufgebaut?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Beispiel Eingabeaufforderung. Geben Sie Ihrem Agenten den Debugging-" +"Endpunkt, {ph0} und die Seiten-URL. Lassen Sie die Aufnahme starten, bevor " +"Sie klicken." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Ihr Agent entdeckt das Seitenziel, startet ein Beobachtungsfenster und liest" +" die resultierenden Beweise. Es kann dann das Skript hinter dem Export " +"überprüfen." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Oder vom Terminal aus erfassen" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Suchen Sie die Ziel-ID der Seite:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Finden Sie die Seite" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Wählen Sie das Ziel mit der Beispiel-URL für Notizen aus. Ersetzen {ph0} " +"unten mit seiner ID, dann lauf:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Erfassen Sie die nächsten zehn Sekunden" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Lassen Sie den Befehl einige Sekunden lang verbinden und klicken Sie dann " +"auf {ph0}Notizen exportieren{ph1} in diesem Browser. Das Ergebnis kommt nach" +" dem Ende des Beobachtungsfensters an." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Das erfasste Ergebnis enthält die ausgewählte Seite, die Netzwerkaktivität " +"während dieses Fensters und die Form der JSON-Antwort. Frühere Anfragen " +"liegen außerhalb dieser Erfassung." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Lesen Sie das Anforderungs- und Exportskript" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Aufgenommen mit REA 4.1.0 am Beispiel lokaler Notizen" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Erfasste Tatsache" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Wert" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Anfrage" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Antwort" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Initiator der Anfrage" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} · Skript" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Antwortstruktur" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} mit {ph1} und {ph2} Datenfelder" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Lesen Sie die geladenen Skripte" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"Die Anforderung identifiziert die Datenquelle und REA-Datensätze {ph0} als " +"sein Initiator. Lesen Sie die erfasste Skriptquelle, um zu sehen, wie die " +"Daten verwendet werden:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"Der Download wird auf der Seite mithilfe der JSON-Antwort erstellt. Der " +"Formatierungsschritt CSV stammt aus dem Skript; Die Netzwerkerfassung stellt" +" fest, dass dieser Klick angefordert wurde {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Suchen Sie das Skript, das anfordert {ph0}. Wie werden Titel mit Kommas oder" +" Anführungszeichen vermieden?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Fahren Sie bei einer installierten JavaScript- oder Electron-App mit der " +"{ph0}anwendungs-Workflow{ph1} dateien und Prozessgrenzen zu folgen." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Browser- und Netzwerkanalyse - REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Beobachten Sie einen Notizexport mit REA: Wählen Sie eine Browserseite aus, " +"erfassen Sie einen Klick, überprüfen Sie die Anforderung und folgen Sie dem " +"Exportskript." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Browser-Beobachtung" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Kopieren Starten Sie den Beispielbrowser" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Beispiel-Eingabeaufforderung kopieren" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Kopieren finden Sie die Seite" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Kopieren Erfassen Sie die nächsten zehn Sekunden" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Kopieren Lesen Sie die geladenen Skripte" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Startseite{ph1} / Hilfslinien" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REA Anleitungen." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Analysieren Sie eine native Funktion, einen Electron-Export oder eine " +"Browseranforderung. Jede Anleitung enthält eine Eingabeaufforderung, einen " +"Code und Ergebnisse." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Erste Untersuchung" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Einrichten von REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "" +"Schließen Sie Ihren Codierungsagenten an oder verwenden Sie REA vom Terminal" +" aus." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Erste Schritte mit REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Maschinencode-Programme" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "" +"Stellen Sie eine Berechnung der linken / rechten Klangposition wieder her" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Beginnen Sie mit einer ausführbaren Datei für das Windows-Spiel. Überprüfen " +"Sie die Anweisungen, folgen Sie einem Aufrufer, lesen Sie numerische " +"Konstanten und überprüfen Sie das wiederhergestellte C." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Handbuch zur Analyse von Maschinencode-Programmen" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "Modell: JavaScript und Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Einem CSV-Export folgen" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Eine kleine Notizen-App verteilt eine Funktion auf den Renderer-, Preload- " +"und Hauptprozess. Verwenden Sie REA, um die API, den IPC-Kanal und den " +"Dateischreiber zu verbinden." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "Anleitung für JavaScript und Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Für eine größere gepackte App folgen Sie {ph0} Zwischenablage-Brücke von " +"Notion{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Browserverhalten" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Beobachten Sie einen Klick" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Öffnen Sie ein Beispiel für Arbeitsnotizen, erfassen Sie eine " +"Exportanforderung und suchen Sie den Code, der die Antwort in einen Download" +" umwandelt." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Anleitung zur Browserbeobachtung" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Anleitungen zum Reverse Engineering - REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Lernen Sie REA anhand kurz gearbeiteter Beispiele: eine native Berechnung, " +"einen Electron CSV Export und eine Browseranforderung." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "" +"{ph0}Startseite{ph1} / {ph2}Hilfslinien{ph3} Modell: JavaScript und " +"Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Verfolgen Sie einen Electron {ph0} CSV exportieren." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Folgen Sie einem Knopfdruck von der Seiten-API über den Electron IPC zum CSV" +" File Writer." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "In diesem Handbuch" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Beispiel{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Fragen Sie Ihren Agenten{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Verfolgen Sie den Exportcode{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Probieren Sie das Beispiel aus{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Überprüfen Sie den CSV-Schreiber{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "Wohin geht \"Notizen exportieren\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Diese Anleitung verwendet eine kleine Electron-App. Klicken {ph0}Notizen " +"exportieren{ph1} ruft eine API auf der Seite auf, wechselt in den " +"Hauptprozess und schreibt einen CSV . Das Verhalten ist auf mehrere Dateien " +"verteilt." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "Der CSV-Export über Electron-Prozesse hinweg" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Renderer → Vorladen{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} ruft die API auf, die" +" von bereitgestellt wird {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Zwischen Prozessen{ph1}{ph2}{ph3}{ph4}{ph5}Der Preload ruft einen IPC-" +"Kanal auf: eine benannte Nachricht an den Hauptprozess.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Hauptprozess{ph1}{ph2}Ein Export-Handler{ph3}{ph4}{ph5} behandelt " +"diesen Kanal und ruft den CSV-Writer auf.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} formatiert die Notizen → {ph1} schreibt {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA ordnet den literalen IPC-Aufruf seinem Handler zu und identifiziert die " +"exponierte API. Der Pfad wird aus dem Code abgeleitet; Eine " +"Laufzeiterfassung kann überprüfen, was ausgeführt wird." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Fragen Sie nach dem CSV Export" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Verbinden Sie Ihren Agenten mit REA {ph1} und geben Sie ihm das App-" +"Verzeichnis oder die ASAR-Datei:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Kopieren" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um herauszufinden, was passiert, wenn ich" +" Notizen in diese App exportiere. Wo wird der CSV erstellt?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "" +"Beispiel Eingabeaufforderung. Geben Sie den absoluten Pfad zum " +"Anwendungsordner an oder {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA liest die Anwendungsdateien und erstellt eine Karte mit " +"Einstiegspunkten, Modulen und Prozessgrenzen. Ihr Agent verwendet diese " +"Karte, um die Untersuchung auf die Exportfunktion einzugrenzen." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Verfolgen Sie den Exportcode" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "Die Seite ruft eine kleine API auf" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"Die Seite kennt den Methodennamen. Die Implementierung lebt im Preload, " +"wodurch sie dem Renderer ausgesetzt wird." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA Aufzeichnungen {ph0} und der wörtliche Kanal {ph1}. Es koppelt diesen " +"Aufruf mit dem einzelnen übereinstimmenden Handler im Hauptprozess." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"Das Lesen des Handlers beantwortet die ursprüngliche Frage: {ph0} formatiert" +" die Notizen und der Hauptprozess schreibt {ph1} in den Download-Ordner des " +"Benutzers." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Aufgenommen von REA 4.1.0 im unten stehenden herunterladbaren Beispiel. " +"Quellorte begleiten die API-, Kanal- und Handler-Ergebnisse." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Analysieren Sie das Beispiel selbst" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Beispiel-ZIP herunterladen{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Durchsuchen Sie die sechs Quelldateien" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Statische Anwendungsanalyse" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Ersetzen Sie den Pfad durch den Ordner, den Sie entpackt haben. Sie sollten " +"einen IPC-Kanal und einen passenden Handler in finden {ph0}. Quellstandorte " +"sind in {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Verwenden Sie für Ihre eigene App denselben Befehl mit seinem Verzeichnis " +"oder ASAR-Pfad. Ein Agent kann mit den Feature-Tracing-Tools von REA einer " +"Literalzeichenfolge, einem API-Namen oder einem IPC-Kanal folgen." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Überprüfen Sie den CSV-Schreiber" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Folgen {ph0} zu seinem Handler. Welche Eingänge erreichen den CSV Writer und" +" was passiert, wenn das Schreiben der Datei fehlschlägt?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Verwenden Sie die Quellspeicherorte, um diese Details zu überprüfen. " +"Berechnete Kanalnamen und mehrdeutige Handler können ungelöst bleiben; " +"Laufzeitbeobachtungen bieten Ihnen eine andere Möglichkeit, sie zu " +"untersuchen." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Folgen Sie der Zwischenablage-Brücke von Notion{ph1} {ph2}Wenden Sie " +"den gleichen Ansatz auf eine gepackte Electron-App an.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Beobachten Sie einen Browser-Export{ph1}{ph2}Erfassen Sie einen echten " +"Klick und sehen Sie, welche Anfrage er stellt.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Einer nativen Funktion folgen{ph1}{ph2}Fahren Sie mit einer Binärdatei " +"fort, wenn eine Funktion vom systemeigenen Code abhängt.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "Analyse von JavaScript und Electron - REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Verfolgen Sie einen Notes CSV-Export über eine Renderer-API, Preload und " +"IPC-Handler mit REA. Enthält herunterladbare Beispieldateien und ein " +"verifiziertes Analyseergebnis." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "Modell: JavaScript und Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Beispiel-Eingabeaufforderung kopieren" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Statische Anwendungsanalyse kopieren" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Startseite{ph1} / {ph2}Hilfslinien{ph3} / Analyse von Maschinencode-" +"Programmen" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "" +"Wiederherstellen von DX-BallS{ph0}berechnung der linken / rechten " +"Klangposition." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Überprüfen Sie die Originalanweisungen, identifizieren Sie die Eingabe und " +"die Konstanten und überprüfen Sie dann das wiederhergestellte C." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "In diesem Handbuch" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Beispiel{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Fragen Sie Ihren Agenten{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Lesen Sie die REA-Ergebnisse{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Wiederherstellen und überprüfen{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Verwenden Sie Ihre eigene Binärdatei{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Berechnen Sie die linke / rechte Stereoklangpositionierung" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"In DX-Ball liefert ein Ziegelsteintreffer eine horizontale " +"Bildschirmposition. Der Soundcode wandelt ihn in einen Links / Rechts-" +"Schwenkwert um." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"Die Startfunktion, {ph0}, hat ein kurzes Dekompilierergebnis: ein Aufruf an " +"{ph1}. REA gibt auch seine Anweisungen und Anrufer zurück, die dem Agenten " +"die Möglichkeit geben, die fehlende Arithmetik zu untersuchen." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Neu bei diesen Bedingungen?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Anweisung:{ph1} die Schritte, die der Prozessor ausführt, werden in " +"lesbarer Form dargestellt, wie z {ph2} oder {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Dekompiler-Ergebnis / Pseudocode:{ph1} der Versuch eines " +"Analysewerkzeugs, Anweisungen wieder in C-ähnlichen Code umzuwandeln. Es " +"kann Teile vermissen, wie in diesem Beispiel." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Anrufer:{ph1} eine Funktion, die diese aufruft. Es zeigt an, welche " +"Werte übergeben werden." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Anschrift:{ph1} eine Stelle im Programm, die hexadezimal geschrieben " +"ist, z. B.: {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Konstant:{ph1} feste Zahlen, die im Programm gespeichert, als Rohbytes " +"gelesen und dekodiert werden." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Drei Beweise, eine Rechnung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * Anleitung{ph1}{ph2}Eine ganzzahlige Eingabe{ph3}{ph4}Ein " +"Stapellesevorgang liefert den Wert, der von den Gleitkommabefehlen verwendet" +" wird.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * Anrufer{ph1}{ph2}Eine Bildschirmkoordinate{ph3}{ph4}Der " +"Ziegelstein-Hit-Anrufer geht vorbei {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * Datenbytes{ph1}{ph2}Die numerischen " +"Konstanten{ph3}{ph4}Referenzierte Bytes dekodieren zu {ph5}, {ph6} und einen" +" Skalenwert.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA liefert die Anweisungen, die Funktionsaufrufbeziehung und die Bytes. Der" +" Agent interpretiert sie zusammen." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Fragen Sie nach dem Verhalten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Nach {ph0}REA mit Ihrem Agenten verbinden{ph1} und {ph2}einrichten eines " +"Tools zur Analyse von Maschinencode-Programmen{ph3}, geben Sie die lokale " +"ausführbare Datei und eine Frage an:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Welches Analysetool soll ich verwenden?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA benötigt eines davon, um native Programme zu lesen:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} MODELL: Hopper {ph1} (macOS oder Linux): Das Setup von REA erkennt es " +"oder bietet an, es zu installieren. Öffnen Sie macOS auf Hopper einmal und " +"wählen Sie den Demo-Modus oder aktivieren Sie eine Lizenz vor Ihrer ersten " +"Analyse." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} MODELL: Ghidra {ph1} (macOS oder Linux; experimentell auf Windows): " +"kostenlos, benötigt jedoch ein vorhandenes Ghidra 12.1.x-Installation und " +"ein 64-Bit-JDK 21 oder neuer." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} MODELL: IDA {ph1} (Windows ): für ein vorhandenes IDA-Setup mit einer " +"MCP-Registrierung." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Sehen {ph0}Analyse von Maschinencode-Programmen einrichten{ph1} für die " +"Stufen." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Kopieren" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um herauszufinden, wie DX-Ball die " +"Stereoklangpositionierung berechnet. Erklären Sie die Berechnung und zeigen " +"Sie den Code.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Beispiel Eingabeaufforderung. Geben Sie Ihrem Agenten den Pfad zu Ihrer " +"lokalen ausführbaren Datei DX-Ball 1.07. REA enthält DX-Ball nicht. " +"Verwenden Sie also Ihre eigene Kopie oder stellen Sie die gleiche Frage zu " +"einem anderen kleinen Windows-Programm, das Sie haben." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Wie erhalte ich den vollständigen Pfad einer Datei?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} MODELL: Windows :{ph1} klicken Sie im Datei-Explorer mit der rechten " +"Maustaste auf die Datei und wählen Sie {ph2}Als Pfad kopieren{ph3}. Halten " +"Sie bei Windows 10 die Umschalttaste gedrückt, während Sie mit der rechten " +"Maustaste klicken." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} MODELL: macOS :{ph1} klicken Sie im Finder mit der rechten Maustaste " +"auf die Datei, halten Sie die Option gedrückt und wählen Sie {ph2}Kopiere " +"\"...\" als Pfadnamen{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Jedes System:{ph1} ziehen Sie die Datei in ein Terminalfenster und ihr " +"Pfad wird angezeigt." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Lesen Sie die REA-Ergebnisse" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Lesen Sie die Eingabe" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Die Anweisungen laden ein ganzzahliges Argument und konvertieren es für " +"Gleitkomma-Arithmetik. Dies ist die Eingabe, die in der ersten Pseudocode-" +"Ansicht fehlt." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Folgen Sie dem Anrufer" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA identifiziert den Brick-Hit-Anrufer. Seine früheren Anweisungen " +"multiplizieren die Kachelkoordinate mit 30; Hinzufügen {ph0} (20) gibt die " +"Bildschirmposition des Bausteins an." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Lesen Sie die referenzierten Konstanten" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"Die Arithmetik referenziert diese Adressen. Das Lesen der Bytes liefert die " +"tatsächlichen Werte; Die Befehlsreihenfolge teilt dem Agenten mit, wie sie " +"verwendet werden." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Schreiben und überprüfen Sie die wiederhergestellte Funktion" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"Bei einem Maßstab von 1,0 werden die Bildschirmpositionen 0, 320 und 640 vor" +" der Ganzzahlumwandlung auf -500, 0 und 500 abgebildet. Bei der Berechnung " +"wird die Bildschirmmitte in die Mitte des Stereofelds gesetzt." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"Der Agent verwendete die Ergebnisse von REA, um das C zu schreiben. Separate" +" Überprüfungen verglichen 3.205 Eingaben mit der ursprünglichen x86-Funktion" +" und reproduzierten alle 63 kompilierten Bytes der vollständigen Funktion." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "" +"{ph0}Sehen Sie sich die vollständige Untersuchung und den Assembly-to-C-" +"Vergleich an{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Probieren Sie es mit Ihrer eigenen Binärdatei aus" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Verbinden Sie eine Analyse von Maschinencode-Programmen Anbieter{ph1}, " +"dann geben Sie Ihrem Agenten eine lokale ausführbare Datei oder Bibliothek " +"und eine zu untersuchende Funktion. Nützliche Startfragen sind unter anderem" +" “Wie wird diese Datei analysiert?\" oder \"Welche Funktion behandelt diese " +"Menüaktion?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Wenn Sie bereits einen Funktionsnamen oder eine Adresse kennen, können Sie " +"diese vom Terminal abfragen. Für eine konfigurierte Ghidra-Installation:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Funktionsanalyse" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Ersetzen Sie den Zielpfad und {ph0} mit Ihrem eigenen Funktionsnamen oder " +"Ihrer eigenen Adresse. Jeder CLI-Aufruf importiert und analysiert die " +"Binärdatei und schließt dann ihre Sitzung. Die MCP-Abfragen Ihres Agenten " +"verwenden die importierte Binärdatei wieder, während diese Sitzung geöffnet " +"ist." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Lesen Sie den Pseudocode zusammen mit Anweisungen und Referenzen. Wenn ein " +"Ergebnis einen Anruf oder Wert ungelöst lässt, verwenden Sie diesen Ort als " +"nächste Frage." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Native binäre Analyse - REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Stellen Sie eine native Berechnung mit REA wieder her: Überprüfen Sie " +"Anweisungen, folgen Sie einem Aufrufer, lesen Sie Konstanten und überprüfen " +"Sie rekonstruiertes C." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Analyse von Maschinencode-Programmen" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Beispiel-Eingabeaufforderung kopieren" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Analyse der Kopierfunktion" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Einrichten von REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Einrichten von REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}Was ist RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Wie REA hilft{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Dinosaurier-Spiel{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Rechner{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Probieren Sie REA aus {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Tiefer einsteigen{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Hilfe & Feedback{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Gemeinschaft{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Reverse Engineering mit Ihrem Codierungsagenten" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Finde heraus,{ph0}wie Software funktioniert." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA gibt deinem Coding-Agent die Werkzeuge, um ein Programm zu untersuchen " +"und sein Verhalten zu erklären." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "Kennen Sie RE schon? {ph0}Zu den Analysehandbüchern springen →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Willst du tiefer gehen? {ph0}Lesen Sie den Blog →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Kopiere diesen Prompt in deinen Coding-Agent:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Kopieren" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Oder führe diesen Befehl im Terminal aus:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "" +"Prüfe und bestätige die geplanten Änderungen. Starte danach deinen Agent " +"neu." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Was ist Reverse Engineering?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Herausfinden, wie Software funktioniert, indem man {ph0}das Programm selbst " +"untersucht.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"Das Ziel: ein Feature gut genug verstehen, um {ph0}erkläre es{ph1}, " +"{ph2}ändern Sie es{ph3} oder {ph4}bauen Sie es wieder auf.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "Vor REA · Du untersuchst es {ph0}selbst{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Zweige dekodieren" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Anrufe verfolgen" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Wiederherstellen der Regel" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Original x64 * ausgewählte Anleitung{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * Welche Branche?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5 Grad?{ph1} Zwei Sprünge an die gleiche Stelle. Welche " +"Betreiber sind das?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Suchen Sie nach den Befehls-IDs und beschriften Sie den Zweig." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Teilen ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Multiplizieren ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Was machen die aufgerufenen Funktionen?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"“100 ist klar. Die Anrufe sind nur Adressen. {ph0}Welcher teilt sich? " +"Welcher Wert geht ein?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "" +"Überprüfen Sie die Hilfsfunktionen und verfolgen Sie die gespeicherten " +"Werte." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Teilen" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 · Was ist die Regel?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"“Dieser Pfad multipliziert sich mit der anderen Eingabe. So {ph0}10% " +"bedeutet 10% von 200{ph1} nach +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "Benennen Sie die Operanden und überprüfen Sie beide Operatorpfade." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Anschauliche Argumentation von Experten" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Sie entschlüsseln die Anweisungen, folgen den Funktionsaufrufen und " +"rekonstruieren die Berechnung.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "Mit REA · Du fragst {ph0}deinen Agent{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Ein einziger Prompt." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Frag deinen Agent {ph0}in ganz normalen Worten.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Beispiel Eingabeaufforderung * " +"Rechner" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Beispielantwort * basierend auf den Ergebnissen" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "Nach + nimmt die% -Taste {ph0}ein Prozentsatz der ersten Zahl.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA liefert" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Die Anweisungen des Handlers, dekompilierter Code und Aufrufe." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Dein Agent erklärt" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "Welcher Zweig gilt, was er berechnet und wie er neu erstellt wird." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Ausgewählte Baugruppe aus der installierten Taschenrechner-DLL. Die Gedanken" +" und Antworten veranschaulichen die Ergebnisse. {ph0}Fahren Sie mit dem " +"Taschenrechnerbeispiel fort ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Probieren wir zwei Beispiele aus.{ph1} Ändere die Geschwindigkeit eines" +" Spiels, kehre dann zum Taschenrechner zurück und baue die%-Schaltfläche neu" +" auf." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Beispiel 01 * Dinosaurier-Spiel von Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Warum wird der Dinosaurier schneller?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Ziel" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Baue das Spiel mit neu auf {ph0}einstellbare Geschwindigkeit.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Warum es zurückentwickeln?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Um seine Beschleunigung zu reproduzieren, brauchen wir {ph0}die Regel im " +"laufenden Spiel{ph1}: wie schnell es beginnt, wie stark es zunimmt und wann " +"es aufhört." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Den Nachbau spielen" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Spielen" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Springen ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Neustart" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Geschwindigkeit" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Verwenden Sie die wiederhergestellte Beschleunigungsregel" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "" +"Ursprüngliche Regel: Beginnen Sie bei 6 und erhöhen Sie sich dann in " +"Richtung 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Bewegen Sie den Schieberegler, um Ihre eigene Geschwindigkeit einzustellen. " +"Leertaste oder Sprung löscht einen Kaktus." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Aktivieren Sie JavaScript, um die Rekonstruktion abzuspielen. Der Code und " +"die obige Erklärung bleiben lesbar." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA hat zurückgegeben" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Das Skript, das tatsächlich auf der Seite ausgeführt wird.{ph1} Der " +"Agent liest seine Aktualisierungsfunktion und Geschwindigkeitseinstellungen " +"und verwendet diese Regel dann in einem neuen Spiel." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Beispiel Prompt * Dinosaurier-Spiel" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um dieses Dinosaurierspiel zu " +"inspizieren. Warum wird es schneller? Zeigen Sie die Geschwindigkeitsregel " +"an und bauen Sie dann eine kleine Version mit einstellbarer " +"Geschwindigkeit.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Untersuchtes Ziel: {ph0}wayous von Chromium abgeleitete Browser-" +"Edition{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Beginnen Sie bei 6.{ph1} Hinzufügen {ph2}0.001{ph3} jedes Update ohne " +"Kollision, während die Geschwindigkeit darunter liegt {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Öffnen Sie das Geschwindigkeitslabor →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Was jeder Teil tut" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 · REA {ph1}{ph2}Lesen Sie das Skript des laufenden " +"Spiels{ph3}{ph4}Geben Sie den tatsächlichen Code und die Einstellungen an " +"den Agenten zurück.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 · Ihr Agent{ph1}{ph2}Erstellen Sie die Regel neu, fügen Sie ein " +"Steuerelement hinzu{ph3}{ph4}Verwenden Sie die wiederhergestellte " +"Beschleunigung in einem kleinen Spiel mit einem Geschwindigkeitsregler.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 · Sie{ph1}{ph2}Ändern Sie die Geschwindigkeit und spielen " +"Sie{ph3}{ph4}Probieren Sie die ursprüngliche Beschleunigung aus und wählen " +"Sie dann Ihr eigenes Tempo.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "" +"Sehen Sie sich das Skript, die Überprüfungen und das Ausprobieren der " +"Analyse an" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA überprüfte die HTTP-Browser-Edition über eine lokale Debugging-" +"Verbindung und gab das geladene zurück {ph0}, einschließlich seiner Quelle " +"und Verdauung." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Wir haben die Update-Funktion des Originalspiels in einem kontrollierten " +"Browser-Check aufgerufen, bei dem Hindernisse und die automatische " +"Zeitplanung deaktiviert waren. Nach 4.000 Aktualisierungen betrug die " +"Geschwindigkeit 10,0; Nach 10.000 war es 13,0, auf eine Dezimalstelle " +"gerundet." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"Das neue Minispiel hält diese Geschwindigkeitsregel ein. Sein Zeichen-, " +"Sprung- und Kollisionscode ist eine kleine Unterrichtsimplementierung. " +"{ph0}Öffnen Sie das Labor{ph1} um den neuen Code zu sehen und die gleiche " +"Geschwindigkeitsprüfung durchzuführen." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Um das Ziel selbst zu inspizieren, folgen Sie den Anweisungen {ph0}schritte " +"zur Browser-Verbindung{ph1} wobei {ph2}die Dinosaurier-Seite{ph3}. Geben Sie" +" Ihrem Agenten die Seiten-URL und Ihren lokalen Debugging-Endpunkt an und " +"kopieren Sie dann die obige Eingabeaufforderung." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Geprüfter Geschwindigkeitscode{ph1} · {ph2} Chromium Autoren * BSD-" +"Lizenz{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Beispiel 02 * Windows Rechner" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Die %-Taste des Rechners nachbauen." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"Erstellen Sie einen kleinen Taschenrechner, der funktioniert {ph0}sowohl + " +"als auch × korrekt.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Die gleiche Schaltfläche verwendet {ph0}unterschiedliche Regeln nach + und " +"×.{ph1} Wir überprüfen die installierte App, um herauszufinden, auf welche " +"Zahl der Prozentsatz angewendet wird." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Probieren Sie die Berechnung aus" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Zurücksetzen" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% von 200 = 20. Dann ist 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Interaktive Darstellung der geprüften Prozentregel." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Ein Zweig teilt sich durch 100. Die andere multipliziert sich auch mit " +"der ersten Zahl.{ph1} Der Agent verwendet beide, um die% -Schaltfläche neu " +"zu erstellen." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Für dieses Beispiel, {ph0} und {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Beispiel-Eingabeaufforderung * " +"Erstellen Sie die %-Schaltfläche neu" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um die% -Schaltfläche des Windows-" +"Rechners zu überprüfen. Stellen Sie die Regeln nach + und × wieder her und " +"erstellen Sie dann einen kleinen Taschenrechner, der beide " +"verwendet.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Mit +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Nimm 10% der ersten Zahl.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Mit ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Verwandle 10% in 0,1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Von der installierten App zu einer funktionierenden% -Schaltfläche" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA liest die Bibliothek{ph1}{ph2}Geben Sie den Code des% " +"-Handlers zurück{ph3}{ph4}Die Funktion überprüft den Operator und verwendet " +"die Konstante {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 · Ihr Agent interpretiert es{ph1}{ph2}Erklären und reproduzieren Sie" +" die Regeln{ph3}{ph4}Überprüfen Sie den Zweig mit der Quelle von Microsoft " +"und versuchen Sie dann oben + und ×.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Sehen Sie sich den echten Code an und wie die Antwort überprüft wurde" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Geprüft mit REA 4.1.0: Windows-Rechner 11.2508.4.0, x64. Die lesbare " +"Zusammenfassung verwendet Namen aus der öffentlichen Quelle von Microsoft, " +"um den wiederhergestellten Zweig zu erläutern." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Prozentuale Umsetzung{ph1} · {ph2}Testfälle von Microsoft{ph3} · " +"{ph4}Anleitung zur nativen Einrichtung{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Ihre erste Untersuchung" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Probieren Sie REA mit einer kleinen App aus." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Laden Sie unser Notizbeispiel herunter, verfolgen Sie den Export von CSV und" +" überprüfen Sie eine geänderte Eingabe." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Probieren Sie das geführte Beispiel aus" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Möchtest du tiefer einsteigen?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Sagen Sie Ihrem Agenten, was Sie verstehen oder bauen möchten. Mit REA " +"können Sie an allem zusammenarbeiten, von {ph0}klonen dieser Website{ph1} zu" +" {ph2}rekonstruieren eines Spiels aus seiner ausführbaren Datei.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Beispiel Eingabeaufforderung * " +"Website" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Ja, das hier." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Beispiel-Eingabeaufforderung * " +"Spielrekonstruktion" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um dieses Spiel aus seiner ausführbaren " +"Datei zu rekonstruieren. Stellen Sie die Gameplay-Logik in C wieder her und " +"testen Sie sie gegen das Original.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Siehe die Fallstudie DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "Wählen Sie für Einrichtungs- und Analyseschritte Ihr Ziel aus:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Maschinencode-Programme" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Überprüfen Sie Funktionen, Zeichenfolgen, Referenzen und " +"Funktionsaufrufbeziehungen in ausführbaren Dateien und Bibliotheken." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Handbuch zur Analyse von Maschinencode-Programmen" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "Modell: JavaScript und Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Ordnen Sie Module, Routen, IPC und native Abhängigkeiten aus einem " +"Anwendungsordner oder einem ASAR-Archiv zu." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Anwendungs-Workflows" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Browser- & Laufzeit-Aktivität" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Erfassen Sie ausgewählte Browser- oder Prozessaktivitäten und vergleichen " +"Sie dann die Ergebnisse über Läufe hinweg." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Anleitung zur Browserbeobachtung" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Noch Fragen?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Lesen Sie die FAQ{ph1}, {ph2}chatten Sie mit uns auf Discord {ph3}, " +"oder {ph4}öffnen Sie eine GitHub-Ausgabe{ph5} für Fehler und " +"Funktionswünsche." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Zur Community" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Teilen Sie Untersuchungen mit und holen Sie sich Hilfe von anderen REA-" +"Benutzern auf Discord. Folgen Sie REA auf X für Projektaktualisierungen." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA - Reverse Engineering für Ihr Codiermittel" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Reverse Engineering von Apps, Binärdateien und Browserverhalten mit Ihrem " +"Codierungsagenten. Befolgen Sie klare Anleitungen und probieren Sie " +"interaktive Beispiele mit REA aus." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Installationsaufforderung für REA kopieren" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Setup-Befehl kopieren" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Befolgen Sie die manuelle Taschenrechneranalyse" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Kopierrechner Prozentfrage" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Dinosaurier-Minispiel. Verwenden Sie die Sprungtaste oder drücken Sie die " +"Leertaste, während das Spiel fokussiert ist." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Aufforderung zur Dinosaurieranalyse kopieren" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Wählen Sie die Berechnung" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Aufforderung zur Analyse des Kopierrechners" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Aufforderung zum Kopieren des Website-Projekts" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Aufforderung zur Wiederherstellung des Spiels kopieren" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Startseite{ph1} / {ph2}Präsentieren{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Fallstudie * Aegis Authentifikator" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Wie funktioniert ein Authentifikator{ph0}einen Login-Code generieren?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Ein sechsstelliger Code ändert sich alle 30 Sekunden. Verwenden Sie REA, um " +"die Berechnung in einem Android APK zu finden, und erstellen Sie sie dann " +"mit einer Uhr neu, die Sie steuern können." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * Offizielle Veröffentlichung APK · 6,9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Sehen Sie sich Aegis auf GitHub an" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "Von einem APK zu einem Code, den Sie reproduzieren können" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * Suchen Sie die Funktion{ph1}{ph2}3.077 klassen → Methoden " +"generieren{ph3}{ph4} REA durchsucht das Paket und verfolgt den von den " +"Anzeige- und Kopieraktionen verwendeten Code.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * Lesen Sie die Berechnung{ph1}{ph2}Zeit + Kontoschlüssel → sechs " +"Ziffern{ph3}{ph4} REA gibt die Methoden und Standardwerte zurück. Der Agent " +"erklärt, wie sie zusammenpassen.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * Umbauen und überprüfen{ph1}{ph2}Ändere die Uhr. Beobachten Sie den" +" Code.{ph3}{ph4}Eine neue Browserdemo reproduziert die Regel und vergleicht " +"sie mit öffentlichen Referenzfällen.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "In dieser Fallstudie" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Fragen Sie Ihren Agenten{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Probieren Sie den Codegenerator aus{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Finden Sie den Code mit REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Lesen Sie die Berechnung{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Überprüfen Sie die Rekonstruktion{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Überprüfen Sie den APK selbst{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Fragen Sie Ihren Agenten" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"Die App zeigt einen sich ändernden Login-Code an. Wir wollen finden {ph0}was" +" verändert es{ph1} reproduzieren Sie dieses Verhalten." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Kopieren" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Eine Beispielaufforderung für den heruntergeladenen APK mit konfigurierter " +"Android-Analyse von REA. {ph0}Holen Sie sich das APK und das Analyse-Setup " +"↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Probieren Sie den Codegenerator aus" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"Die App gruppiert die Zeit in {ph0}30-sekunden-Blöcke.{ph1} Es kombiniert " +"die Blocknummer mit dem Kontoschlüssel, um einen Code zu generieren. " +"Derselbe Schlüssel und derselbe Block erzeugen denselben Code." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Bewegen Sie die Uhr über 60 Sekunden" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Zeit" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "Sekundenschnelle" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Unsere verstellbare Beispieluhr" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30-sekunden-Block" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Block" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 sekunden{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Generierter Code" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Kontoschlüssel + Sperre → sechs Ziffern" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Beispielzeit in Sekunden" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 sekunden" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 sekunden" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"Bei 59 Sekunden: {ph0}287082.{ph1} Bei 60 Sekunden: {ph2}359152.{ph3} Wenn " +"Sie sich innerhalb eines Blocks bewegen, bleibt der Code unverändert." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"Der Schlüssel ist fest, öffentlich {ph0}RFC 6238-Testdaten{ph1}. Die Demo " +"implementiert die vom APK wiederhergestellte Berechnung." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"Das Diagramm zeigt das Ergebnis bei 59 Sekunden. Aktivieren Sie JavaScript, " +"um die Uhr zu ändern." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Finden Sie den Code mit REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Grenzen Sie den APK auf drei Klassen ein" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} ist der Berechnungskandidat; Die anderen beiden betreffen den " +"Fortschrittsbalken und importierte Konten. TOTP bedeutet ein zeitbasiertes " +"Einmalpasswort." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Verbinden Sie den Generator mit dem Display der App" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA identifiziert die Zeitstempelüberladung und findet die Aufrufer der " +"Basismethode. Inspizieren {ph0} zeigt dann das Display an, das anruft {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Anfragen zeigen einen verkürzten Eingabepfad. Ergebnisklassennamen lassen " +"das Gemeinsame weg {ph0} Präfix." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Lesen Sie die Berechnung" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA kehrt zurück {ph0}die Taktumwandlung, Standardeinstellungen und " +"Generierungsmethoden.{ph1} Die Konstruktoren legen ein Intervall von 30 " +"Sekunden und sechs Ziffern fest; Die Zeitstempelmethode wandelt Sekunden in " +"eine Blocknummer um." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Zeitblock" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Schlüssel + Block" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Sechs Ziffern" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Die Zeit wählt den Block.{ph1} Die Sekunden 30 bis 59 geben alle Block " +"1 an. Nach 60 Sekunden wird der Block 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}Auch die Schlüsselfragen.{ph1} Der Generator kombiniert den " +"Kontoschlüssel mit dem Block. Ein Konto mit einem anderen Schlüssel kann " +"gleichzeitig einen anderen Code anzeigen." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Behalte sechs Ziffern bei.{ph1} Der Rest nach der Division durch " +"1.000.000 wird bei Bedarf mit Nullen aufgefüllt, sodass ein Code mit 0 " +"beginnen kann." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Auszüge aus mehreren geprüften Methoden mit Zeilenumbruch zur Anzeige. Das " +"rechte Feld ist eine erläuternde Zusammenfassung. {ph0} Der Code von Aegis " +"ist GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Im Inneren des Generators" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"Der freigegebene APK setzt {ph0} in {ph1}. REA folgt dem Anruf von {ph2} " +"und gibt diesen Körper zurück; Die ursprüngliche Quelle ruft den Helfer auf " +"{ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"Das letzte Hash-Byte wählt eine Position aus. Vier Bytes an dieser Position " +"ergeben eine positive 31-Bit-Zahl; Die Formatierung reduziert sie auf die " +"angeforderte Anzahl von Ziffern. Das letzte Argument des Konstruktors wählt " +"den durch die Kompilierung eingeführten Codeformatierungszweig aus." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Vergleichen Sie mit der passenden Release-Quelle{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Überprüfen Sie die Rekonstruktion" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Wir haben die ausgewählten REA -zurückgegebenen Java-Methoden in einem " +"kleinen Testprogramm zusammengestellt. Ihre Ausgabe entsprach einer " +"unabhängigen Rekonstruktion auf {ph0}133 testfälle{ph1}, einschließlich " +"Zeitblockgrenzen und Codes, die mit Null beginnen." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Beispiel zeit" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Sechsstelliger Code" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 sekunden" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 sekunden" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Der Generator entspricht auch den sechs veröffentlichten " +"SHA-1-Referenzfällen in {ph0}RFC6238{ph1}. Überprüfen Sie die Browser-" +"Implementierung gegen sie:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Referenzprüfungen durchführen" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Lesen Sie die Berechnung der Demo" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"Die Referenzfälle verwenden acht Ziffern. Die Überprüfung überprüft auch " +"ihre sechsstelligen Ergebnisse." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Die Überprüfung führt extrahierte Java-Methoden und die neue Demo aus. Das " +"Android APK wurde statisch inspiziert." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Überprüfen Sie den APK selbst" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Einrichten von REA {ph1} laden Sie diese beiden Dateien auf macOS oder " +"Linux in denselben Ordner herunter. Verwenden Sie auf Windows eine Linux-" +"Umgebung wie WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Android Analysis benötigt ein vollständiges JDK 17 oder höher. Wählen Sie es" +" mit {ph0} oder {ph1}. In diesem Fall wurde JDK 21 verwendet." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Zeigen Sie mit REA auf die Providerdatei und überprüfen Sie den APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "MODELL: macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Ihr Agent kann mit dem CLI von REA über die obige Eingabeaufforderung " +"fortfahren. Für MCP fügen Sie hinzu {ph0} mit der Umgebung des REA-Servers " +"und verbinden Sie ihn erneut." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Eine nächste Frage: {ph0}was passiert, wenn ein Konto acht Ziffern oder ein " +"anderes Zeitintervall verwendet?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Hauptquellen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Offizielle Version von Aegis 3.4.3{ph1} · {ph2}Übereinstimmendes Quell-" +"Commit{ph3} · {ph4}Lizenz GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}Referenzfälle zu RFC 6238{ph1} · {ph2}Demo-Testdaten{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Am 9. Oktober 2026 mit REA 6.1.0 inspiziert. Dekompilierte Auszüge werden " +"Aegis gutgeschrieben; Das Diagramm, die lesbare Zusammenfassung und die " +"Browserrekonstruktion sind neues Lehrmaterial." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK Rückentwicklung: Anmeldecodes - REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Überprüfen Sie den Aegis Android APK mit REA, stellen Sie die sechsstellige " +"Login-Code-Berechnung wieder her und versuchen Sie eine Rekonstruktion mit " +"einer einstellbaren Uhr." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK Fallstudie" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Beispiel-Eingabeaufforderung Aegis kopieren" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Folgen Sie der Login-Code-Berechnung" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Inspektionsbefehl APK kopieren" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Startseite{ph1} / {ph2}Präsentieren{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Fallstudie * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Finde die Flagge in{ph0}eine CTF-Binärdatei." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Verwenden Sie REA, um einen kleinen Flaggenprüfer zu überprüfen, seine " +"Regeln in Gleichungen umzuwandeln und eine Eingabe zu finden, die das " +"ursprüngliche Programm drucken lässt {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "maskierte Quadrate Flaggenprüfer · Einfach · Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Sehen Sie sich die ursprüngliche Herausforderung an" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "Von einer binären zu einer geprüften Antwort" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * Finden Sie den Scheck{ph1}{ph2}Zeichenketten → Funktionen " +"prüfen{ph3}{ph4} REA findet die Eingabeaufforderung, ihre Referenzen und den" +" Code, der eine Eingabe akzeptiert oder ablehnt.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * Extrahieren Sie die Regeln{ph1}{ph2}36 zeichen · 26 " +"summen{ph3}{ph4} REA gibt die Anweisungen und Daten hinter jeder Prüfung " +"zurück. Der Agent wandelt sie in Gleichungen um.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * Lösen und ausführen{ph1}{ph2}Wiederhergestellte Flagge → " +"Korrekt!{ph3}{ph4}Ein Python-Skript löst die Gleichungen. REA erfasst das " +"ursprüngliche Programm, das das Ergebnis akzeptiert.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"Die Herausforderung stammt von Joseph und wurde im offiziellen Repository " +"von DownUnderCTF veröffentlicht." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "In dieser Fallstudie" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Finden Sie den Prüfcode{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Lesen Sie eine Maske{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Assemblierung zu lesbarem Code{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Löse die Gleichungen{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Überprüfen Sie die Antwort{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Probieren Sie es selbst aus{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Finden Sie den Prüfcode" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Das Handout ist eine 15 KB große ausführbare Datei. Es fragt nach einer " +"Flagge und druckt dann {ph0} oder {ph1}. Beginnen Sie mit einer einfachen " +"Anfrage an Ihren Agenten." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Kopieren" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um ms_flag_checker zu analysieren und das" +" Flag zu finden. Erklären Sie, wie die Prüfungen funktionieren, und " +"überprüfen Sie dann die Antwort mit dem Originalprogramm.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Eine Beispiel-Eingabeaufforderung, bei der die heruntergeladene " +"Herausforderung lokal verfügbar ist und eine Analyse des Maschinencode-" +"Programmanbieters verbunden ist." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Folgen Sie der Eingabeaufforderung zu ihrer Funktion" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"Die Referenz gibt dem Agenten einen Ort zum Untersuchen, obwohl die " +"ursprünglichen Funktionsnamen der ausführbaren Datei entfernt wurden." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Lesen Sie den Checker und seine beiden Helfer" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"Die erste Schleife kopiert 36 Zeichencodes. Die Prüfschleife dekodiert eine " +"Maske, summiert die ausgewählten Codes und vergleicht das Ergebnis mit einer" +" gespeicherten Nummer. Seiner {ph0}-byte-Schritte über {ph1} bytes ergeben " +"26 Masken." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Dies sind ausgewählte Ergebnisse einer neuen REA-Analyse. Der lokale " +"Zielpfad wird für die Anzeige gekürzt; Adressen beziehen sich auf das " +"importierte Bild von REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Ein Häkchen zeigt einen Charakter" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Der Checker ordnet die Eingabe in einem 6 × 6-Raster an. Eine Maske wählt " +"aus, welche Zellen zu einer Summe beitragen. Seine kompakte Codierung " +"verwendet negative Zahlen, um Zellen zu überspringen, und positive Zahlen, " +"um sie auszuwählen." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" +"Die siebte Prüfung wählt nur eine Position aus. {ph0}Offene Figur{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Lesen Sie die Maske und ihr Ziel aus der Binärdatei" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"Anweisung {ph0} liest Maskenbytes als vorzeichenbehaftete Werte. Das ist der" +" Grund {ph1} bedeutet -21. Das Ziel ist eine Little-Endian-Ganzzahl. " +"Zusammen sagen diese Bytes dem Agenten, dass {ph2}, also ist dieser " +"Charakter {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Von der Anleitung zum lesbaren Scheck" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Wählen Sie einen Schritt aus, um den Summierungshelfer und seinen Aufrufer " +"mit derselben Regel in C zu verbinden." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Beginnen" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Wählen" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Hinzufügen" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Voraus" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Vergleichen" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * ausgewählte Originalanleitung" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Lesbare C · One-Check-Zusammenfassung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * Bei Null beginnen.{ph1} {ph2} enthält die laufende Summe." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 · Überprüfen Sie die Maskenzelle.{ph1} Ein Nullwert überspringt das " +"Zeichen; Ein Wert ungleich Null schließt es ein." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * Fügen Sie einen Zeichencode hinzu.{ph1} Die Ganzzahl der Eingabe " +"am gleichen Offset wird zur Summe addiert." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * Gehe zur nächsten Zelle.{ph1} Die ursprüngliche Schleife rückt " +"vier Bytes pro Ganzzahl vor und besucht sechs Zeilen mit sechs Zellen." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * Vergleichen Sie mit dem gespeicherten Ziel.{ph1} Der Anrufer " +"erhält die Summe in {ph2}. Eine Fehlanpassung springt zu {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Die Anweisungen stammen vom Summierhelfer und seinem Aufrufer. Das C ist " +"eine erklärende Zusammenfassung mit beschreibenden Namen und einer " +"abgeflachten 36-Zellen-Schleife." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Löse die 26 Gleichungen" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"Die meisten Masken markieren mehrere Zellen. Zum Beispiel fügt die erste " +"Prüfung 16 Zeichencodes hinzu und erfordert insgesamt 1441. Die " +"überlappenden Auswahlen ergeben Gleichungen, die ein kleines Python-Skript " +"zusammen lösen kann." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python * Löser Auszug" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 ist ein Löser, der Werte findet, die diese Gleichungen erfüllen. Dieser " +"Auszug verwendet die extrahierten Prüfungen und geht von einer {ph0} flagge " +"mit Buchstaben, Ziffern, Unterstrichen und geschweiften Klammern. Der " +"vollständige Download enthält alle 26 Masken und Ziele." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Laden Sie den vollständigen Solver herunter" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Überprüfen Sie die Antwort mit dem Originalprogramm" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"Die Prozesserfassung von REA zeichnet die ursprüngliche ausführbare Datei " +"auf, die das gelöste Flag akzeptiert. Ändern eines ausgewählten Zeichens aus" +" {ph0} zu {ph1} macht die erste Summe 1440 anstelle von 1441, und das " +"Programm lehnt sie ab." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Eingang" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Beobachteter Output" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Ausstiegscode" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Flagge des Lösers" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Ein Charakter wurde geändert" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Zeigen Sie das wiederhergestellte Flag und die erfasste Ausgabe an" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * ursprüngliche Programmausgabe" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Flagge kopieren" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"Der wiederhergestellte Wert stimmt auch mit dem Flag in den veröffentlichten" +" Challenge-Metadaten der Organisatoren überein, das nach dem Lösen der " +"Binärdatei überprüft wurde." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Quelle, Zielidentität und Analysedetails" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Neue Analyse und zwei Prozesserfassungen am 8. Oktober 2026 mit REA 4.1.0 " +"mit Ghidra 12.1.4 auf Linux x64. Die Binärdatei ist eine gestrippte x86-64 " +"ELF, 15.248 Byte." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Die Zeichenfolgenreferenzen, Funktionen und Konstanten wurden überprüft, " +"bevor die Quelle oder Lösung des Veranstalters gelesen wurde. Der Python-" +"Solver und das Diagramm wurden aus diesen REA-Ergebnissen erstellt." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Vergleiche mit der Quelle des Veranstalters{ph1} · {ph2}Metadaten und " +"Flag abfragen{ph3} · {ph4} REA Hinweise zum Nachweis{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Probieren Sie es selbst aus" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Laden Sie die ursprüngliche Herausforderung und den Löser in einen Ordner " +"herunter. Verwenden Sie die obige Eingabeaufforderung, um mit Ihrem Agenten " +"Nachforschungen anzustellen, oder führen Sie das mitgelieferte Skript aus." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Terminal * lösen und ausführen" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Das Skript druckt ein Kandidatenflag; Fügen Sie es an der " +"Eingabeaufforderung des Programms ein. Lösungsbedürfnisse Python und {ph0}. " +"Zum Ausführen der ursprünglichen ausführbaren Datei ist Linux x86-64 " +"erforderlich." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Richten Sie REA mit Ihrem Codierungsagenten ein" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "CTF-Rückentwicklung: DownUnderCTF-Flaggenprüfer - REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Verwenden Sie REA, um den Flag-Checker für maskierte Quadrate von " +"DownUnderCTF zu lösen. Finden Sie die Prüffunktionen, extrahieren Sie die " +"Masken und vergleichen Sie ein wiederhergestelltes Flag mit dem " +"Originalprogramm." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "CTF flag-checker Fallstudie" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "CTF-Beispiel-Eingabeaufforderung kopieren" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "CTF-Maskengleichung; auf kleineren Bildschirmen horizontal scrollen" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"Die siebte Maske überspringt 21 Zellen, wählt Position 21 aus und " +"überspringt dann 14. Nur diese Zelle trägt zur Summe bei. Der erforderliche " +"Zeichencode ist 55, was bedeutet, dass das Zeichen 7 ist." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Befolgen Sie den CTF-Check" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "CTF-Baugruppe kopieren" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Kopierlesbare CTF-Prüfung" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Auszug aus dem CTF-Löser kopieren" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Wiederhergestelltes Flag kopieren" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Kopieren von CTF-Solver-Befehlen" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Startseite{ph1} / {ph2}Präsentieren{ph3} Modell: DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Fallstudie * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Umbau DX-Ball {ph0}von seiner ausführbaren Datei." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"Das Ziel ist eine wartbare C-Version des 1996er Windows-Spiels. REA hilft " +"dem Agenten, das Original Funktion für Funktion zu inspizieren." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Modell: Windows i386 · C · REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Eine Funktion, von ausführbar bis geprüft C. REA liefert die Anweisungen, " +"Aufrufer und Datenlesungen; Das Rekonstruktionsprojekt implementiert und " +"testet das Ergebnis. {ph0}Offene Figur{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "In dieser Fallstudie" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Projekt{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Ton schwenken{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Überprüfung des Ergebnisses{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Setzen Sie die Arbeit fort{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "beibehaltene C-Funktionen" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "vergleiche mit Originalcode" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "funktionen mit übereinstimmenden kompilierten Bytes" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Projekt-Checkpoint: 7. Oktober 2026. {ph0}Fortschrittsbuch{ph1} · " +"{ph2}Testabdeckung{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Das Projekt bisher" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Der wiederhergestellte Code umfasst Brett- und Ressourcenhandhabung, " +"Ziegelsteintreffer, Animationen, Partikel und Bonusproduktion. Aktuelle " +"Builds bieten Inspektionsprogramme und eine Analysebibliothek. Die Arbeit am" +" spielbaren Spiel wird mit Ball- und Paddelphysik, Power-Up-Handling und " +"Windows-Integration fortgesetzt." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Ermittlung der Berechnung der linken / rechten Schallposition" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Wenn ein Stein getroffen wird, wird seine horizontale Position an den " +"Soundcode übergeben. Die Untersuchung musste wiederhergestellt werden, wie " +"diese Bildschirmkoordinate zu einem Links / Rechts-Schwenkwert wird." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Kopieren" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um herauszufinden, wie DX-Ball die " +"Stereoklangpositionierung berechnet. Erklären Sie die Berechnung und zeigen " +"Sie den Code.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Eine Beispielaufforderung für Ihren Codierungsagenten, wobei die lokale " +"ausführbare Datei verfügbar ist. Die folgende Untersuchung zeigt die REA-" +"Abfragen und Beweise hinter der Antwort." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"Der Agent hat REA verwendet, um die Funktion zu überprüfen, seinem Aufrufer " +"mit Ziegelsteinen zu folgen und die Konstanten aus der ausführbaren Datei zu" +" lesen. Diese Ergebnisse lieferten die Eingabe und Arithmetik, die zum " +"Schreiben der folgenden C-Funktion erforderlich waren." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"Das erste Funktionsergebnis für {ph0} enthaltene Pseudocode-Deklaration " +"{ph1} und ruft {ph2}. Die Anweisungsansicht zeigte eine Stapeleingabe und " +"Gleitkommaoperationen. Diese Diskrepanz gab dem Agenten einen konkreten " +"Grund, weiter zu ermitteln." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "Die erste Decompiler-Ansicht" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"Die Ausgabe zeigt einen Konvertierungsaufruf. Wenn Sie die folgenden " +"Anweisungen lesen, werden die Eingabe und die Berechnung angezeigt, die " +"diesen Aufruf einspeisen." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Drei Fragen beantwortet durch REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Stellen Sie die fehlende Eingabe wieder her" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"Das Funktionsergebnis enthält Anweisungen neben Pseudocode und Aufrufern. " +"Hier, {ph0} macht die Integer-Eingabe verfügbar, die in der " +"Dekompilierungsansicht fehlt." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Folgen Sie dem Anrufer, um die Eingabe zu verstehen" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA hat diesen Anrufer im ersten Ergebnis identifiziert. Seine " +"vorhergehenden Anweisungen skalieren {ph0} um 30; Das Addieren von 20 ergibt" +" die Bildschirmkoordinate des Bausteins, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Lesen Sie die Werte hinter den Speicheradressen" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Die zurückgegebenen Bytes legen die beiden arithmetischen Konstanten und die" +" anfängliche Schwenkskala fest. Der Agent hat jetzt die Werte, die für den " +"C-Ausdruck benötigt werden." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "Von den Erkenntnissen von REA zu C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Befolgen Sie die folgenden fünf Schritte. Jede Auswahl hebt die " +"ursprünglichen Anweisungen und die von ihnen informierten C-Zeilen hervor." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Eingang" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Multiplizieren" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Subtrahieren" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Skala" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Zurückgeben" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Original x86 * Auszug" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Rekonstruiertes C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * Lesen Sie die Eingabe.{ph1} Die Anweisungsansicht im " +"Funktionsergebnis von REA lautet {ph2} und verwendet {ph3} um die Ganzzahl " +"zu laden. Wenn Sie seinem Aufrufer durch REA folgen, wird die " +"Bildschirmkoordinatenbedeutung des Parameters C festgelegt {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * Multiplizieren Sie mit 1,5625.{ph1} {ph2} liest das Doppelte bei " +"{ph3}. Die von REAS zurückgegebenen Bytes {ph4} dekodieren zu {ph5}; das C " +"verwendet dieselbe Konstante." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * Subtrahieren Sie 500,0.{ph1} {ph2} liest das Doppelte bei {ph3}. " +"Das Byte-Ergebnis von REA dekodiert zu {ph4}, verschieben des " +"Berechnungsmittelpunkts auf die Bildschirmkoordinate {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 · Wenden Sie die gespeicherte Skala an.{ph1} Zweiten {ph2} lesen " +"{ph3}. Das Globale heißt {ph4} in der gepflegten Quelle. Das zweite " +"gelesene Byte von REA legt den Anfangswert von fest {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * Gibt eine Ganzzahl zurück.{ph1} Der Anruf bei {ph2} Oberlauf " +"{ph3}, identifiziert in den angerufenen Ergebnissen von REA. Das C wirft das" +" Ergebnis auf {ph4}; original-x86-Vergleiche überprüfen den zurückgegebenen " +"Wert." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"Der Assemblyauszug wählt die Eingabe-, Arithmetik- und Rückgabeanweisungen " +"aus. Die vollständige Liste unten enthält auch die dazwischenliegenden " +"Speicher sowie die Einrichtung und Bereinigung von Funktionen." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Vollständige Versammlung und unterstützende Beweise" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA Ergebnis · 0x406400–0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Was der Anrufer liefert" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"Die Brick-Hit-Funktion bei {ph0} skaliert die Kachelkoordinate um 30, " +"addiert 20 und schiebt sie dann vor den Anruf:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Was die Daten lesen, stellen Sie fest" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA Byte liest, dekodiert als Little-Endian-Doubles" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Anschrift" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Wert" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Verwendet für" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Erste Multiplikation" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Subtraktion" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} zunächst" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Gespeicherte Pfannenwaage" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Aufgezeichnet mit REA 4.1.0 für das Hash-angeheftete DX-Ball 1.07-Ziel. Die " +"verknüpften Ermittlungsnotizen behalten die Beweismittel-IDs bei." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Gepflegte Quelle{ph1} · {ph2}Ermittlungsnotizen und " +"Beweisreferenzen{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Überprüfen der wiederhergestellten Funktion" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"Die wiederhergestellte Funktion besteht zwei Prüfungen: Ihre Rückgabewerte " +"stimmen mit dem Original überein und ihre kompilierten Bytes stimmen mit der" +" ausführbaren Datei überein." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3.205 Verhaltensfälle" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Die Tests führen die ursprüngliche x86-Funktion aus und vergleichen ihren " +"Rückgabewert mit dem gepflegten C. Sie decken jede ganzzahlige Position von " +"0 bis 640 auf fünf Pan-Skalen ab: 0, 0,5, 1, 20 und -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 übereinstimmende Bytes" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"Die C-Funktion wird mit der angehefteten VC4.0-Toolchain kompiliert. Die " +"Compiler-Wiedergabe stimmt mit der vollständigen Funktion überein, nachdem " +"die überprüften Verschiebungen angewendet und die referenzierten Konstanten " +"überprüft wurden." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"Bei einer Skala von 1 gibt die wiederhergestellte Berechnung -500 am linken " +"Rand, 0 in der Mitte und 500 am rechten Rand zurück. Der nächste Teil der " +"Audioarbeit besteht darin, diesen Wert in das Sound-Backend des Spiels zu " +"integrieren." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Lesen Sie die Compiler-Wiedergabedetails{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Setzen Sie die Untersuchung fort" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"Der gleiche Ansatz wird für Partikelaktualisierungen, " +"Explosionswarteschlangen und Bonusgenerierung verwendet: Überprüfen Sie die " +"relevanten Funktionen, stellen Sie ihren Zustand und ihre Abhängigkeiten " +"wieder her und vergleichen Sie dann die Implementierung mit dem Original." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Um die Sound-Pan-Funktion selbst zu überprüfen, befolgen Sie die " +"Einrichtungsanweisungen des DX-Ball-Projekts und geben Sie das passende " +"Originalziel an. Dann lauf:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "In der Kasse des DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} DX-Ball Archiv{ph1}{ph2}Aktuelle Quelle, Fortschritt und lokale " +"Einrichtung.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} REA Analyse-Arbeitsablauf{ph1}{ph2}Befolgen Sie die Berechnung und " +"verwenden Sie dann den gleichen Ansatz mit Ihrer eigenen Binärdatei.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Partikel- und Bonusproduktion{ph1}{ph2}Eine größere Untersuchung zu " +"Status, Warteschlangen und Pixelschreibvorgängen.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball Rückentwicklung: Tonschwenken - REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Folgen Sie einer DX-Ball-Rekonstruktion von der Binäranalyse über REA zu " +"gepflegten C-, Original-x86-Tests und passenden kompilierten Funktionsbytes." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball Sound-Pan-Untersuchung; auf kleineren Bildschirmen horizontal " +"scrollen" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.Die EXE-Funktion 0x00406400 wird mit REA überprüft. Ein Brick-Hit-" +"Aufrufer liefert 20 plus 30 mal tile_x. Anweisungen laden x, multiplizieren " +"mit 1,5625, subtrahieren 500,0, wenden pan_scale an und geben eine Ganzzahl " +"zurück. Das gepflegte C wird in 3.205 Fällen unabhängig gegen das " +"ursprüngliche x86 und durch VC4.0-Compiler-Wiedergabe mit 63 Bytes " +"überprüft." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball Rekonstruktion Fallstudie" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Beispiel-Eingabeaufforderung kopieren" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Befolgen Sie die Berechnung der linken / rechten Klangposition" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Original-Montageauszug kopieren" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Ton kopieren-Pan-Funktion" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Komplette Sound-Pan-Baugruppe kopieren" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Kopieren Sie den DX-Ball-Analysebefehl" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Startseite{ph1} / Präsentieren" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA Fallstudien." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, Spiele, Electron und eine CTF-Herausforderung mit Code, Zahlen und " +"geprüften Ergebnissen." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Androide * APK Analyse" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Wie ein Authentifikator einen Anmeldecode generiert" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Die sechsstellige Code-Berechnung von Aegis finden Sie in der " +"veröffentlichten APK . Verfolgen Sie die Generierungsmethoden mit REA und " +"bewegen Sie dann eine Demo-Uhr, um zu sehen, warum sich der Code alle 30 " +"Sekunden ändert." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Lesen Sie die Android-Fallstudie" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * Analyse von Maschinencode-Programmen" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Lösen Sie einen CTF-Flag-Checker" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Inspizieren Sie eine einfache DownUnderCTF-Herausforderung mit REA . Finden " +"Sie die Prüffunktionen, verwandeln Sie Masken und Summen in Gleichungen und " +"überprüfen Sie dann das gelöste Flag mit dem Originalprogramm." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Lesen Sie die CTF-Fallstudie" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Einheimische * Rekonstruktion" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-BallS Berechnung der linken / rechten Klangposition" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Stellen Sie eine Berechnung der linken / rechten Klangposition aus einem " +"Windows-Spiel von 1996 wieder her. REAS Anweisungen, Aufruferreferenzen und" +" numerische Konstanten führen zu einer kleinen C-Funktion, die mit dem " +"ursprünglichen Verhalten und allen 63 kompilierten Bytes verglichen wird." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Lesen Sie die DX-Ball-Fallstudie" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * Merkmalsverfolgung" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Wie Notion Text und HTML kopiert" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Verfolgen Sie eine seitenseitige API durch das verpackte JavaScript von " +"Notion . Folgen Sie den IPC-Wrappern in die Systemzwischenablage und sehen " +"Sie dann, wie ein kleiner HTML-Marker umfangreiche Blockdaten mit einer " +"Kopie verknüpft." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Lesen Sie die Notion-Fallstudie" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS * Rekonstruktion" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Wie TH04 einen Kugelring zielt" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Überprüfen Sie den ursprünglichen 16-Bit-Winkelhelfer mit REA . Ordnen Sie " +"die Multiplikations-, Divisions- und Koordinatenoperationen lesbarem C ++ zu" +" und sehen Sie dann, wie sie einen auf den Spieler gerichteten Ring " +"erzeugen." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Lesen Sie die TH04-Fallstudie" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Schritt-für-Schritt-Anleitungen" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Die Anleitungen führen durch eine native Berechnung, einen Electron-Export " +"und eine Browseranforderung. Jeder beginnt mit einer Aufforderung und einem " +"konkreten Ziel." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Lesen Sie die Anleitungen" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Fallstudien zum Reverse Engineering - REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Verfolgen Sie REA-Untersuchungen anhand von Code, Abbildungen und Demos: " +"einem Android-Authentifikator, DX-Ball, Notion, TH04 und einem DownUnderCTF-" +"Flag-Checker." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Startseite{ph1} / {ph2}Präsentieren{ph3} Modell: Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Fallstudie * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Wie Notion kopiert{ph0}text und HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Verfolgen Sie einen Aufruf der Zwischenablage von der Seiten-API von Notion " +"über den Preload- und den Hauptprozess zum Clipboard Writer von Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion Arbeitsfläche 7.6.1 * JavaScript · REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Die Brücke im Desktop-Paket des Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * Seitenseitige API{ph1} {ph2}{ph3}{ph4} {ph5}Das Preload macht eine" +" aufrufbare Methode verfügbar.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * Wickler vorladen{ph1} {ph2}{ph3}{ph4} {ph5}Der Wrapper sendet den " +"Kanal und die Argumente.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * Haupt-Prozess-Handler{ph1} {ph2}{ph3}{ph4} {ph5}Der Empfänger " +"überprüft, welche Seite es gesendet hat.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * System-Zwischenablage{ph1} {ph2}{ph3}{ph4} {ph5} Electron schreibt" +" den mitgelieferten Text und HTML.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Ein Kanal verbindet die beiden Seiten: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Der gepackte Code verwendet denselben Kanal im Preload- und im Hauptprozess." +" Beim Auflösen der Wrapper werden die Electron-Aufrufe hinter diesen Namen " +"angezeigt." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "In dieser Fallstudie" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Folgen Sie der Klemmbrett-Brücke{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Die Struktur eines Blocks beibehalten{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Weitere Beispiele und Quellen{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Wohin geht der Kopiervorgang?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"Die Seite sieht eine Methode namens {ph0}. Seine Implementierung im Preload " +"ist ein Wrapper. Die nützliche Frage ist, was dieser Wrapper sendet und " +"welcher Code ihn empfängt." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Kopieren" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um zu verfolgen, wie Notion Text und HTML" +" in die Systemzwischenablage kopiert. Zeigen Sie den Code bei jedem Schritt " +"an.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Eine Beispiel-Eingabeaufforderung mit dem lokalen Anwendungspaket von " +"Notion, das Ihrem Codierungsagenten zur Verfügung steht." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA findet, wo mit dem Lesen begonnen werden soll" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Die Analyse des Tab-Preloads mit REA lokalisiert die API, die für die Seite " +"verfügbar ist, und den Aufruf, der eine IPC-Anforderung sendet. Beide " +"Befunde werden mit Quellbereichen im minimierten Bündel geliefert:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA Erkenntnisse → zwei Orte zum Öffnen" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Ausgewählte Felder aus einer frischen {ph0} ergebnis auf der Registerkarte " +"Vorspannung von Notion, aufgezeichnet mit REA 4.1.0. Positionen verwenden " +"die Linie und die nullbasierte Spalte des ursprünglichen Bündels." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"Der Agent öffnet diese Speicherorte, sucht das Mitglied der Zwischenablage " +"in der zusammengestellten API und liest {ph0}. Seine Call-Site liefert " +"{ph1}. Dieser Name gibt dem Agenten etwas Genaues, nach dem er im Hauptpaket" +" suchen kann. Die vier folgenden Auszüge zeigen die Route, die es verbindet." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Vier kurze Code-Stücke" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Vereinfacht aus dem verpackten JavaScript mit lesbaren Variablennamen. Nicht" +" verwandte Mitglieder werden weggelassen." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Beginnen Sie bei der API, die der Seite angezeigt wird" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Dieses Mitglied liefert den Kanalnamen. Die Umsetzung von {ph0} sagt uns, " +"wie die Anfrage den Prozess der Seite verlässt." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Lösen Sie den Wrapper des Preloads auf" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"Die zurückgegebene Funktion leitet die Argumente über den Anfrage- und " +"Antwort-IPC von Electron weiter. Wir können jetzt suchen nach {ph0} auf der " +"Hauptprozesseite." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Überprüfen Sie, wie der Empfänger registriert ist" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Der Hauptprozess verwendet einen anderen Wrapper. Seiner {ph0} methode " +"registriert eine {ph1} empfänger für diesen Kanal." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Finden Sie den Schreib- und Absendercheck" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Dies ist das Ziel. Nach Überprüfung des Absenders übergibt der Handler die " +"gelieferten Daten an die Zwischenablage-API von Electron. Der Kanal und die " +"beiden aufgelösten Wrapper verbinden die exponierte Methode mit diesem " +"Aufruf." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Wie behält ein kopierter Block seine Struktur bei?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Der Webeditor von Notion sendet Text und HTML durch {ph0}. Es speichert die " +"Blockdaten lokal und fügt eine ID in den kopierten HTML-Code ein, um sie zu " +"verbinden." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "HTML-Links zu gespeicherten Blockdaten" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Lesen Sie die HTML-ID" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Finden Sie die gleiche lokale ID" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Wiederherstellen von Notion-Blockdaten" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Illustrativer Text und ID. Der aufgezeichnete Modultest stellt die " +"Blockdaten wieder her, wenn die IDs übereinstimmen. Ein veralteter Eintrag " +"gibt nur Text und HTML zurück." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"Beim Einfügen sucht Notion nach der HTML-ID und vergleicht sie mit der " +"gespeicherten Kopie. Übereinstimmende IDs stellen die Blockdaten wieder her." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Format der Zwischenablage, aufgezeichnet aus Web-Assets, die am 13.Juli 2026" +" zwischengespeichert wurden." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Weitere Beispiele und Quellen" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Ein weiteres Beispiel: Markdown-Tabellen" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion analysiert Markdown in Blockdaten. Dieses Beispiel zeigt, wie aus " +"einer Tabelle Kopf- und Datenzeilen werden." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Eine Tabelle durch den Markdown-Parser von Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Aufgezeichnete Ausgabe von einem extrahierten Markdown-Parser. Die Tabelle " +"wird zu Zeilen und Zellen." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Ein anderer Pfad: die Offline-SQLite-Verbindung" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Renderer-Anfragen von Notion {ph0} durch IPC. Der Hauptprozess erstellt " +"einen Nachrichtenkanal und gibt einen Port an den Renderer und den anderen " +"an einen SQLite-Dienstprogrammprozess weiter. Nachfolgende Anweisungsstapel " +"und Ergebnisse werden über diesen Port übertragen." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"Im Anschluss an diese Übergabe wird erläutert, wo die Datenbankarbeit " +"ausgeführt wird und warum bei der Verfolgung nur der anfänglichen IPC-" +"Anforderung die spätere Konversation übersehen wird." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Quellen und wie man die Auszüge liest" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Die Zwischenablage-Brücke stammt von Notion Desktop 7.6.1 {ph0}: die " +"Registerkarte Vorspannung und {ph1}. Die Auszüge erweitern minimierte " +"Variablennamen und lassen nicht verwandten Code weg; Der Absenderprüfungs-" +"Helfer wird mit seinem zugrunde liegenden angezeigt {ph2} nennen." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Die Beispiele für virtuelle Zwischenablage und Markdown stammen aus Web-" +"Assets, die am 13.Juli 2026 zwischengespeichert wurden, einschließlich " +"Modulen {ph0}, {ph1}, {ph2} und {ph3}. Diese Assets haben ihre eigene " +"Version. Gespeicherte Sonden führten extrahierte Module und kleine " +"Kabelbäume aus; Ihre Ausgaben beschreiben diese Sonden und nicht eine " +"erfasste Desktop-UI-Sitzung." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"Das hier gezeigte REA-Ergebnis ist eine fokussierte Analyse des " +"gespeicherten Tab-Preloads, die mit dem veröffentlichten REA 4.1.0-Paket " +"aufgezeichnet wurde. Es sucht die API und ruft die Operation auf. Das " +"Clipboard-Mitglied und der passende Empfänger werden durch Lesen ihrer " +"Wrapper-Implementierungen im Paket verbunden." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"Das Markdown-Beispiel verwendet das Parser-Modul {ph0}. Gespeicherte " +"Modultests zeigen, dass sowohl Seiten- als auch Chatfilter diese Tabelle " +"beibehalten. Die Paste / Import-, Structured Markdown- und AI / Chat-Parser " +"haben separate Einstiegspunkte und Zwischenformate." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} JavaScript Anwendungshandbuch{ph1}{ph2}Folgen Sie der Exportfunktion " +"einer kleinen Electron-Anwendung.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} DX-Ball Rekonstruktion{ph1}{ph2}Befolgen Sie die nativen Anweisungen " +"zu einer überprüften C-Funktion.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron Rückentwicklung: Zwischenablage - REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Folgen Sie der Zwischenablage-API von Notion durch das Preload, die IPC-" +"Wrapper und den Hauptprozess von Electron mit kurzen Codeauszügen und einem " +"Blick auf das umfangreiche Zwischenablage-Format." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron Fallstudie" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Notion Analyseaufforderung kopieren" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Kopieren Notion Vorspannung Auszug" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Kopieren Notion Wrapper-Auszug aufrufen" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Kopieren Sie den Auszug aus dem Notion-Handler-Wrapper" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Kopieren Notion Zwischenablage Empfänger Auszug" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "" +"Wiederherstellen reichhaltiger Daten aus der Zwischenablage beim Einfügen" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Zum Inhalt springen" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Startseite{ph1} / {ph2}Präsentieren{ph3} Modell: TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Fallstudie * Touhou 4: Lotus Land Geschichte" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Rekonstruktion des TH04{ph0}aufzählungsmuster." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Ein Kugelring beginnt mit einer kurzen Winkelberechnung. Verwenden Sie REA, " +"um die ursprüngliche DOS-Funktion zu überprüfen, und folgen Sie dann den " +"Anweisungen in lesbares C ++." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 · 16-Bit-DOS · C++ und Assemblierung" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Sehen Sie sich die Rekonstruktion des TH04 an" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Von der Originalanleitung zur geprüften Quelle" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * Original-Spiel{ph1}{ph2}WICHTIGSTEN.EXE{ph3}{ph4}Die ausführbare " +"Datei PC-98 und ihr Aufzählungswinkel-Helfer.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * Inspektion mit REA {ph1}{ph2}Anleitungen + " +"Referenzen{ph3}{ph4}Überprüfen Sie den geladenen DOS-Code und lesen Sie die " +"Winkelberechnung aus der ausführbaren Datei.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * Lesen Sie die C ++{ph1}{ph2}Leertaste → Zielen → " +"Drehen{ph3}{ph4}Verbinden Sie jede Operation mit der gepflegten " +"Rekonstruktion.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * Überprüfen Sie die Quelle{ph1}{ph2}2.139 übereinstimmende " +"Bytes{ph3}{ph4}Aufgezeichnete Compilerprüfungen decken den Code zur " +"Aufzählungszeichengenerierung ab, der diesen Helfer enthält.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA gibt den Originalcode und seine Analysebeweise zurück. Das Projekt TH04 " +"liefert die gepflegten Quell- und Compilerprüfungen." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "In dieser Fallstudie" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}Der Kugelring{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}Was REA zurückgibt{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Assemblierung nach C ++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Überprüfen der Quelle{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Das vollständige Projekt{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Wie ein Ring auf den Spieler zielt" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"Ellys Angriff fordert einen gezielten Ring mit einer anfänglichen Anzahl von" +" 16 an. Ein Helfer berechnet die Richtung jeder Kugel. Derselbe Ring kann in" +" eine feste Richtung zeigen oder sich dem Spieler zuwenden." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ihr Codierungsagent" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Kopieren" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um herauszufinden, wie TH04 einen " +"Kugelring erstellt und auf den Spieler richtet. Erklären Sie die Berechnung " +"und zeigen Sie den Code.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Eine Beispiel-Eingabeaufforderung, bei der die ursprüngliche ausführbare " +"Datei und der Rekonstruktions-Checkout lokal verfügbar sind." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 speichert eine volle Drehung im Uhrzeigersinn in 256 Winkeleinheiten. " +"Bei 16 Aufzählungszeichen addiert jeder Index 16 Einheiten: {ph0}. Das " +"Hinzufügen der Richtung des Spielers dreht diese Positionen zusammen." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Eine Illustration der wiederhergestellten Winkelmathematik für Zählung 16, " +"Spielerrichtung 40 und Schablonendrehung 0. {ph0}Offene Figur{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Die Zündvorlage in der wiederhergestellten Quelle" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Ellys Ringangriff * Quellenauszug" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Diese Linien wählen das Muster vor der Schwierigkeits- und " +"Leistungsabstimmung aus. {ph0}Lesen Sie die Quelle des Angriffs{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "Was REA zurückgibt" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Wir prüfen {ph0}, die Funktion, die die Geschwindigkeit und den Winkel jedes" +" Geschosses festlegt. REA gibt seine Anweisungen, Pseudocode und Referenzen" +" zurück. Drei Teile dieses Ergebnisses erklären das Muster." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Überprüfen Sie das DOS-Image, bevor Sie den Code lesen" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"Die Prüfung bindet den geladenen Code und die Umzugsdatensätze an die " +"gelieferte ausführbare Datei. Der obige Pfad ist für die Anzeige verkürzt." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Lesen Sie die Multiplikation und Division des Rings" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} enthält den Aufzählungszeichenindex. Die Verschiebung multipliziert es" +" mit 256, dann verwendet die Division die gelesene Zählung {ph1}. Die " +"gepflegte Quelle benennt dieses Feld {ph2}. Die vollständige Sequenz " +"erscheint unten." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Finde heraus, wo sich das Muster dem Spieler zuwendet" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Die Anweisungsoperanden legen zwei Koordinatendifferenzen und einen " +"Richtungshelfer offen. Sein Rückgabewert wird zum relativen Ringwinkel " +"addiert. Quellennamen machen diese Adressen lesbar; Mit REA kann der Agent " +"die ursprünglichen Vorgänge dahinter überprüfen." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Von Assembly zu lesbarem C ++" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Wählen Sie einen Schritt aus, um die ursprünglichen Anweisungen mit der " +"Winkelberechnung abzugleichen. Diese Zusammenfassung folgt dem Zielringpfad;" +" Die vollständige Quelle behandelt auch Spreads, Stapel und Zufallsmuster." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Index" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Raum" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Ziel" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Drehen" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Speichern" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * originale 16-Bit-Anleitung" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Lesbare C ++ * zielgerichtete Ring-Zusammenfassung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * Lesen Sie den Aufzählungszeichenindex.{ph1} Das Stapelargument " +"wird geladen in {ph2}. In einem 16-Punkte-Ring verläuft dieser " +"Mitgliederindex von 0 bis 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Platziere die Richtungen um eine volle Umdrehung.{ph1} {ph2} " +"multipliziert mit 256. Die Zählung ist Null-erweitert zu einem Wort, dann " +"{ph3} dividiert das Produkt durch diese Anzahl. Für Zählung 16 rückt jeder " +"Index 16 Winkeleinheiten vor." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * Fügen Sie die Spielerrichtung hinzu.{ph1} Die beiden Subtraktionen" +" bilden Spieler-minus-Ursprungskoordinaten. Der Richtungshelfer gibt einen " +"Winkel in zurück {ph2}; das Hinzufügen dreht den ganzen Ring in Richtung des" +" Spielers." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * Fügen Sie die Drehung des Musters hinzu.{ph1} {ph2} fügt den " +"Schablonenwinkel hinzu. Ellys anfängliche Vorlage setzt es auf Null; Andere " +"Muster können denselben Helfer mit einer Drehung verwenden." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Halten Sie den endgültigen Winkel in einem Byte.{ph1} Der Laden " +"schreibt {ph2} zum Spawnwinkelfeld. Werte werden nach 255 umgebrochen, genau" +" wie bei der Umwandlung ohne Vorzeichen. Die umgebende Quelle wandelt diesen" +" Winkel und diese Geschwindigkeit ebenfalls in Geschwindigkeit um." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"Die Baugruppe wählt den Zielringzweig, die Zielberechnung und den " +"Endspeicher aus. Das obige C ++ ist eine lesbare Zusammenfassung. Die " +"folgenden Compiler-Prüfungen gelten für die gepflegte Quelle im verknüpften " +"Projekt." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Lesen Sie die gepflegte Ring- und Zielquelle" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Ringmakro{ph1} · {ph2}Ziel- und Geschwindigkeitsquelle{ph3} · " +"{ph4}Winkeldarstellung{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Überprüfen der gepflegten Quelle" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"Die aufgezeichneten Überprüfungen des TH04-Projekts kompilieren den Code zur" +" Bullet-Generierung, einschließlich dieses Helpers, mit seiner angehefteten " +"Turbo C ++ 4.0J-Toolchain." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2.139 übereinstimmende Bytes" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Der kompilierte Code zur Aufzählungszeichengenerierung entspricht einem " +"2.139 Byte großen Abschnitt der ursprünglichen ausführbaren Datei." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Zwei saubere Builds" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Zwei separate Builds erzeugen dieselben übereinstimmenden Bytes. Die " +"aufgezeichneten Eingabe-Hashes stimmen mit der hier gezeigten gepflegten " +"Quelle überein." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Aufgenommen am 3. Oktober 2026. {ph0}Lesen Sie die Compiler-Prüfungen{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Zielidentität und Analyseumfang" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Ursprüngliches Ziel" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156.258 bytes, ZWEI MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Hilfseintrag" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} im geladenen Bild von REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Versatz der ursprünglichen Datei" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, zurückgegeben von {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Inspektion aufgezeichneter Codes" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 · 7. Oktober 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Compiler-Prüfungen decken den gesamten Abschnitt zum Hinzufügen von Code mit" +" Aufzählungszeichen ab, einschließlich dieses Hilfsprogramms. Sie " +"vergleichen auch den Kartenbeitrag und die überlappende Verlagerung." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA hat das statische DOS-Ladebild am Ladesegment überprüft {ph0}. Seine " +"Adressen beschreiben dieses Analysebild. Das Funktionsergebnis meldet 503 " +"Körperbytes in zwei Bereichen über einen Zeitraum von 517 Byte; Die oben " +"ausgewählten Anweisungen liegen in diesen gemeldeten Bereichen." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Die Quellnamen und Compilerprüfungen stammen vom Prüfpunkt TH04 {ph0}. " +"Frühere Rekonstruktionsbeobachtungen verwendeten die projekteigenen " +"Analyseskripte; Diese Seite fügt eine neue REA-Inspektion desselben " +"ursprünglichen Ziels hinzu. Die Identität des gelieferten Spiels wird durch " +"sein Repository-Manifest festgelegt, wobei die unabhängige Herkunft des " +"unberührten Dumps noch offen ist." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"Die Abbildung veranschaulicht die Winkelberechnung. Steuerung des " +"vollständigen Spiels, Timing und Verhalten der PC-98-Hardware haben separate" +" Laufzeitprüfungen im Rekonstruktionsprojekt." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "Die vollständige TH04-Rekonstruktion" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Das Projekt erstellt die vier DOS-Produkte des Spiels aus gepflegtem C ++ " +"und Assembly. Über die Aufzählungszeichenerzeugung hinaus umfasst die Quelle" +" Stufen, Bosse, Rendering, Eingabe, Menüs, Endungen und Partiturbehandlung." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Erkunden Sie das TH04-Repository{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Quelle zur Erzeugung von Kugeln{ph1}{ph2}Der komplette Helfer, andere " +"Mustertypen und Template-Tuning.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}DOS-Anleitung zum Erstellen und Ausführen{ph1}{ph2}Erstellen Sie die " +"Quelle und testen Sie sie im PC-98-Emulator-Workflow des Projekts.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Aktueller Projektstand{ph1}{ph2}DOS-Verifizierung und den separaten " +"nativen x64-Port.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 Rückentwicklung: DOS-Bullet-Muster - REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Überprüfen Sie den ursprünglichen 16-Bit-DOS-Code von TH04 mit REA. Folgen " +"Sie der Assembly und dem wiederhergestellten C ++, um zu sehen, wie ein " +"Kugelring beabstandet und auf den Spieler gerichtet ist." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "Auf dieser Seite" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04 bullet-Muster Fallstudie" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Beispiel-Eingabeaufforderung TH04 kopieren" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 feste und zielgerichtete Geschossringe; auf kleineren Bildschirmen " +"horizontal scrollen" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Zwei Diagramme eines 16-Kugeln-Rings. Der feste Ring beginnt bei Winkel " +"Null. Wenn Sie eine Spielerrichtung von 40 hinzufügen, wird jede Richtung um" +" den gleichen Betrag gedreht. Der hervorgehobene erste Punkt zeigt auf den " +"Spieler. Beide halten einen Abstand von 16 Winkeleinheiten oder 22,5 Grad " +"ein." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Kopieren Sie die TH04-Zündschablone" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Befolgen Sie die TH04 Zielringberechnung" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Auszug aus der TH04-Baugruppe kopieren" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Kopierlesbare Zielringberechnung" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Nach oben" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Kopieren" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Kopieren" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Ausgew" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Code in die Zwischenablage kopiert." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Code ausgewählt. Verwenden Sie Ihre Tastatur, um es zu kopieren." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA auf GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Abstand {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Schlag einen Kaktus. Versuchen Sie eine andere Geschwindigkeit." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Leertaste oder Sprung ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Noch einmal spielen" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Spielen" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Pause" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Drücke Play und springe dann über den Kaktus." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Schlag einen Kaktus. Drücken Sie erneut auf Wiedergabe oder ändern Sie die " +"Geschwindigkeit und starten Sie neu." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Laufen. Leertaste oder Sprung löscht einen Kaktus." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Pausieren. Drücken Sie Play, um fortzufahren." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "" +"Feste Geschwindigkeit: {speed}. Leertaste oder Sprung löscht einen Kaktus." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Feste Geschwindigkeit: {speed}. Drücke Play, um es zu versuchen." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "" +"Wiederhergestellte Regel: Beginnen Sie bei 6 und erhöhen Sie sich dann in " +"Richtung 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Feste Geschwindigkeit: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Wiederholte die wiederhergestellte Regel. Alle vier Werte stimmen mit der " +"kontrollierten Originalspielprüfung überein, wenn sie auf drei " +"Dezimalstellen gerundet werden." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"Die Wiedergabe weicht von den aufgezeichneten Originalspielwerten ab. " +"Vergleichen Sie die Geschwindigkeitsregel und die obigen Einstellungen." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} Sekundenschnelle" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} sekunden, zeitblock {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Interaktive Berechnungen sind in diesem Browser nicht verfügbar. Das " +"Beispiel zeigt den Code bei 59 Sekunden." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Überprüfung…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} prüfungen bestanden (sechs Referenzfälle, sechs- und " +"achtstellig)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "" +"Die Referenzprüfungen konnten nicht ausgeführt werden. Versuch es noch " +"einmal." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Ein Analytiker, der an einem Computer denkt" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Ein Häkchen zeigt einen Charakter" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"Die siebte Maske wählt nur die Position 21 im sechs mal sechs großen " +"Eingaberaster aus. Sein Zeichencode muss gleich 55 sein, also ist das " +"Zeichen 7. Die anderen Masken wählen andere Positionen aus und geben weitere" +" Gleichungen an." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" +"Der siebte Check. Zellenbeschriftungen sind Eingabepositionen, die bei 0 " +"beginnen." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Kodierte Maske: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "" +"Überspringen Sie 21 Zellen. Wählen Sie 1. Überspringen 14. Stoppen Sie bei " +"0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Nur eine Zelle trägt zu dieser Summe bei" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "Position 21 in der Flagge muss 7 enthalten." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Ausgewählt: eine Zelle" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 Masken ergeben 26 Gleichungen." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Löse sie zusammen, um die Flagge zu finden." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball Schallschwenkuntersuchung" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA liefert den Befehls-, Aufrufer- und Byte-Lese-Nachweis für eine DX-Ball-" +"Funktion. Eine Stapeleingabe wird mit 1,5625 multipliziert, mit 500 " +"versetzt, skaliert und in eine Ganzzahl konvertiert. Gepflegtes C wird in " +"3.205 Original-x86-Fällen und einer separaten 63-Byte-Compiler-Wiedergabe " +"überprüft." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Stack" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "Input x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "int" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "Return" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Rekonstruierte Funktion" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "Neuer C-Code" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Treffer-Aufruf" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Originalcode" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "Vergleich" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3.205 Tests" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "VC4.0-Build" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 gleiche Bytes" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA Untersuchungsablauf" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Stellen Sie eine Frage zu einem lokalen Ziel. REA prüft und verfolgt lokale" +" Analyseadapter, gibt Beweise zurück und unterstützt Folgefragen, während " +"Ihr Agent erklärt, implementiert und testet." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Fragen" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Agent + lokale Datei" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "App / Datei / Browser" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Prüfen und folgen" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Belege lesen" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Code / Verweise /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "Unbekanntes" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Anwenden" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Ihr Agent" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Erklären / bauen / testen" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Analysewerkzeuge" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Lokale Analyseadapter" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Weitere Frage" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: Abstand und Zielen eines Kugelrings" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Eine volle Drehung im Uhrzeigersinn hat 256 Winkeleinheiten. Sechzehn Kugeln" +" beginnen in den Winkeln Null, sechzehn, zweiunddreißig bis 240. Wenn Sie " +"eine Beispielspielerrichtung von vierzig hinzufügen, werden alle sechzehn " +"Richtungen zusammen gedreht. Die erste Kugel zeigt auf den Spieler. Die " +"Drehung der Vorlage ist Null." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Fester Ring" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Erste Kugel: Winkel 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Gezielter Ring" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Erste Kugel: Spielerrichtung" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Mitte" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Spieler" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Gleicher Abstand: 256 ÷ 16 = 16 Winkeleinheiten = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Fallstudien" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Erste Schritte" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Anleitungen" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Quellcode" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "MIT-Lizenz" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Zur Community" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Auf X folgen" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * ausgewählte Skriptquelle" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Quellcode" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Erwartete Formatierungsausgabe" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Anweisung" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Anrufer" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Konstant" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "C-Funktion" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Schaltfläche" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "API vorladen" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "Dateiendung.CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Ihr Klick" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Erfasste Anfrage" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Skript exportieren" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA Ergebnis * Zusammenfassung.ipc Auszug" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA Auszug aus der Anleitung · 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA Anruferauszug · 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "REA Byte-Ergebnisse * interpretiert als Little-Endian-Doubles" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Wiederhergestellter C · -Auszug" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "So funktioniert REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Einrichtungsanleitung" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Präsentieren →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Ausgewählte Einstellungen aus dem überprüften Skript" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Lesbare Zusammenfassung des % -Handlers" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * ausgewählte Originalanleitung" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "Betreiber-IDs * Quelle von Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Folge @reatools auf X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Vertreter → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → Agent * ausgewählte Ergebnisse" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → agent * Methoden und Anrufer" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * ausgewähltes dekompiliertes Java" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Lesbare Zusammenfassung * Interpretation des Agenten" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP, kompletter Körper" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Laden Sie Aegis APK herunter" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Android-Analyse-Anbieter herunterladen" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Vertreter → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → Agent * ausgewählte Ergebnisse" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → Agent * ausgewählte Anweisungen" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Agent → REA · Byte lesen" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → Agent * siebte Einträge" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Ursprüngliche ausführbare Datei * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Laden Sie die ursprüngliche Herausforderung herunter" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Löser herunterladen" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA Ergebnis * Pseudocode-Auszug" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Vertreter → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → Agent * Anweisungsauszug" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → Agent * Anrufer Auszug" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Vertreter → REA * zwei {ph0} Antr" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REA Byte-Ergebnisse * dekodiert als Doppel" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Beginnen Sie mit Ihrem eigenen Ziel" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "MODELL: APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Code generieren" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Wiederhergestellte Regel" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Einstellbare Uhr" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Binär" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Code überprüfen" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Gleichung" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Richtig!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Ausführbar" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA Ergebnisse" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Wiederhergestelltes C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Validierung" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Verpackte App" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "Exponierte API" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "IPC-Verpackungen" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Zwischenablage" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Ursprünglicher DOS-Code" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA Anleitung" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Winkelberechnung" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Kugelring" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "API für exponierte Seiten" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Renderer-IPC-Aufruf" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "An die Zwischenablage des Systems gesendet" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Lokal gespeichert von Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Markdown-Eingabe" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Strukturierte Parser-Ausgabe * Auszug" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Analysieren Sie Ihre eigene App" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Vertreter → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → Agent * ausgewählte Felder" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Vertreter → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → Agent * Anweisungsauszug" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Gleiches Funktionsergebnis * Zielauszug" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "Entsprechendes gepflegtes C ++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Ringmakro * TH04 Zweig, Auszug" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Winkel und Geschwindigkeit * Quellenauszug" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Drücke %, um zu sehen, was mit 10 passiert." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% von 200 sind 20. Drücken Sie =, um es hinzuzufügen." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "" +"Für die Multiplikation wird 10 zu 0,1. Drücken Sie =, um zu multiplizieren." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"Übersetzung wird aktualisiert. Lesen Sie diese Seite vorerst auf Englisch." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA zur Analyse {ph3} und erklären, wie es " +"Daten exportiert. Zeigen Sie die relevanten Code- und Quellspeicherorte " +"an.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installiere REA mit {ph3} und verbinde es mit diesem Coding-" +"Agent. Zeige mir zuerst die geplanten Änderungen und warte auf meine " +"Zustimmung. Prüfe anschließend die Installation.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}Herunterladen {ph3} in einen neuen Beispielordner und " +"entpacke ihn. Verwenden Sie REA, um herauszufinden, was passiert, wenn ich " +"auf Notizen exportieren klicke. Zeigen Sie, wo {ph4} geschrieben wird, " +"welche Felder es enthält und die relevanten Dateien und " +"Zeilen.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installiere REA mit {ph3} und verbinde es mit diesem Coding-" +"Agent. Zeige mir zuerst die geplanten Änderungen und warte auf meine " +"Zustimmung. Prüfe anschließend die Installation.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installiere REA mit {ph3} und verbinde es mit diesem Coding-" +"Agent. Zeige mir zuerst die geplanten Änderungen und warte auf meine " +"Zustimmung. Prüfe anschließend die Installation.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA zum Überprüfen {ph3}. Klonen Sie diese " +"Website für mich.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Wiederaufbau · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"Wenn {ph0} und npm verfügbar sind, führen Sie Setup aus, wählen Sie Ihren " +"Codierungsagenten aus und überprüfen Sie die vorgeschlagenen Änderungen." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Ein mitgeliefertes Beispiel * {ph0} und npm · Ihr Codierungsagent" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Verwenden Sie ein Codierungsmittel wie Claude Code, Codex oder Cursor. Du " +"brauchst {ph0} und npm; der {ph1}setup Guide listet unterstützte Versionen " +"auf{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Seite · {ph1}{ph2}{ph3}Notizen exportieren{ph4}{ph5}Nennen {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Brücke · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sendet eine benannte Nachricht " +"an den Hauptprozess.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Handler · {ph1}{ph2}{ph3}Schreiben {ph4}{ph5}{ph6}Ruft den Formatierer " +"auf {ph7} und schreibt die Datei.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * linien 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Sagen Sie den CSV für eine Notiz mit ID 1 und Titel voraus " +"{ph3}. Führen Sie dann die Beispiele aus {ph4} formatierer mit {ph5} um es " +"zu überprüfen. Zeigen Sie die Vorhersage und die tatsächliche Ausgabe " +"an.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Der Titel bleibt in einem Anführungszeichen; Jedes Anführungszeichen wird " +"verdoppelt. Dies überprüft den Formatierer direkt mit {ph0} ." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} * CSV Formatierer" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Du brauchst {ph0} 22 (22.19+), 24 (24.11+) oder 26+. npm kommt mit {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "Sie haben {ph0} nicht oder sind sich nicht sicher?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Wenn {ph0} druckt v22.19+, v24.11+ oder v26+, Sie sind bereit. Wenn eine " +"ältere Version oder \"nicht erkannt\" / \"Befehl nicht gefunden\" ausgegeben" +" wird, installieren Sie {ph1} 24 LITER:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * beispiel Quellenauszug" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Öffnen Sie das Beispiel{ph1} · {ph2}Herunterladen {ph3}{ph4} · " +"{ph5}Herunterladen {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * beispielquelle" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Laden Sie das Beispiel herunter und entpacken Sie es. Das Archiv enthält die" +" komplette {ph0} Ordner. Analysieren Sie es mit {ph1} und npm; Electron wird" +" für dieses Beispiel nicht benötigt." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Zum ersten Mal oder vermisst {ph0} oder ein Kodierungsagent? {ph1}Befolgen " +"Sie die Schritt-für-Schritt-Anleitung zur Einrichtung →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "Zum Beispiel: {ph0}Warum ergibt {ph1} im Rechner 220?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden REA inspizieren Windows Rechner. Warum ergibt " +"{ph3} 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * geladen {ph0} * ausgewählte Linien" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Wir haben gesehen warum {ph0}{ph1} ergibt 220.{ph2} Lassen Sie uns nun die " +"Regeln für + und × wiederherstellen und ausprobieren." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 * REA liest {ph1}{ph2}{ph3}Es startet die Taschenrechner-" +"App{ph4}{ph5}Der Code öffnet sich {ph6}. Der Agent wählt dann die Bibliothek" +" der installierten App aus.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Verwenden Sie REA, um aegis-v3.4 zu überprüfen.{ph3}. Finden" +" Sie heraus, wie der sechsstellige Anmeldecode generiert wird, erklären Sie," +" warum er sich alle 30 Sekunden ändert, und erstellen Sie eine kleine Demo " +"neu, in der ich die Uhrzeit ändern kann.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_ansicht/{ph0} * API-Mitglied" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_ansicht/{ph0} * IPC-Helfer" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "Haupt{ph0} * Handler-Helfer" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "Haupt{ph0} * Zwischenablage-Empfänger" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Wiederaufbau * Dino-Geschwindigkeit.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Wenn Node.js und npm verfügbar sind, führen Sie Setup aus, wählen Sie Ihren " +#~ "Codierungsagenten aus und überprüfen Sie die vorgeschlagenen Änderungen." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Ein mitgeliefertes Beispiel * Node.js und npm · Ihr Codierungsagent" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Verwenden Sie ein Codierungsmittel wie Claude Code, Codex oder Cursor. Du " +#~ "brauchst Node.js und npm; der {ph0}setup Guide listet unterstützte Versionen" +#~ " auf{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Seite * Renderer.js{ph1}{ph2}Notizen exportieren{ph3}{ph4}Nennen " +#~ "{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Brücke * Vorspannung.js{ph1}{ph2}{ph3}{ph4}{ph5}Sendet eine benannte " +#~ "Nachricht an den Hauptprozess.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Handler · Haupt.js{ph1}{ph2}Notizen schreiben.csv{ph3}{ph4}Ruft den " +#~ "Formatierer auf {ph5} und schreibt die Datei.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Vorhersage der CSV für eine Notiz mit ID 1 und Titel Hallo, " +#~ "\"REA\". Führen Sie dann den toCsv Formatierer des Beispiels mit aus Node.js" +#~ " um es zu überprüfen. Zeigen Sie die Vorhersage und die tatsächliche Ausgabe" +#~ " an.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Der Titel bleibt in einem Anführungszeichen; Jedes Anführungszeichen wird " +#~ "verdoppelt. Dies überprüft den Formatierer direkt mit Node.js ." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js * CSV Formatierer" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Sie benötigen Node.js 22 (22.19+), 24 (24.11+) oder 26+. npm wird mit " +#~ "Node.js geliefert." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "Sie haben Node.js nicht oder sind sich nicht sicher?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Wenn {ph0} druckt v22.19+, v24.11+ oder v26+, Sie sind bereit. Wenn eine " +#~ "ältere Version oder \"nicht erkannt\" / \"Befehl nicht gefunden\" ausgegeben" +#~ " wird, installieren Sie Node.js 24 LITER:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Öffnen Sie das Beispiel{ph1} · {ph2}Herunterladen exportieren.js{ph3} ·" +#~ " {ph4}Notizen herunterladen.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Laden Sie das Beispiel herunter und entpacken Sie es. Das Archiv enthält die" +#~ " komplette {ph0} Ordner. Analysieren Sie es mit Node.js und npm; Electron " +#~ "wird für dieses Beispiel nicht benötigt." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Zum ersten Mal oder vermisst Node.js oder ein Kodierungsagent? {ph0}Befolgen" +#~ " Sie die Schritt-für-Schritt-Anleitung zur Einrichtung →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "Zum Beispiel: {ph0}Warum ergibt 200 + 10% im Rechner 220?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Verwenden REA inspizieren Windows Rechner. Warum ergibt 200 " +#~ "+ 10% 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Wir haben gesehen warum {ph0}200 + 10% ergibt 220.{ph1} Lassen Sie uns nun " +#~ "die Regeln für + und × wiederherstellen und ausprobieren." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA liest berechnet.exe{ph1}{ph2}Es startet die Taschenrechner-" +#~ "App{ph3}{ph4}Der Code öffnet sich {ph5}. Der Agent wählt dann die Bibliothek" +#~ " der installierten App aus.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Verwenden REA um aegis-v3.4.3 zu inspizieren.herunterladen. " +#~ "Finden Sie heraus, wie der sechsstellige Anmeldecode generiert wird, " +#~ "erklären Sie, warum er sich alle 30 Sekunden ändert, und erstellen Sie eine " +#~ "kleine Demo neu, in der ich die Uhrzeit ändern kann.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view / Vorladen.js * API-Mitglied" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view / Vorladen.js * IPC-Helfer" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "Hauptindex.js * Handler-Helfer" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "Hauptindex.js * Zwischenablage-Empfänger" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "wichtigsten.js * Zeilen 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "Export.js * Beispielquellenauszug" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "CellRenderer.js * Beispielquelle" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "Vorspannung.js * Beispielquelle" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "wichtigsten.js * Beispielquelle" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA · geladener Index.js * ausgewählte Zeilen" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Verwenden REA um /absolute /path /to /app zu analysieren und" +#~ " zu erklären, wie Daten exportiert werden. Zeigen Sie die relevanten Code- " +#~ "und Quellspeicherorte an.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installieren REA und verbinden Sie es mit diesem " +#~ "Codierungsagenten mit npx rea-Agenten @ neueste Einrichtung. Zeigen Sie mir " +#~ "den Einrichtungsplan zur Genehmigung und überprüfen Sie dann die " +#~ "Installation.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Herunterladen https://rea.tools/examples/notes-example.zip " +#~ "in einen neuen Beispielordner und entpacke ihn. Verwenden REA um " +#~ "herauszufinden, was passiert, wenn ich auf Notizen exportieren klicke. " +#~ "Zeigen Sie, wo Notizen.csv wird geschrieben, welche Felder es enthält und " +#~ "die relevanten Dateien und Zeilen.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installieren REA und verbinden Sie es mit diesem " +#~ "Codierungsagenten mit npx rea-Agenten @ neueste Einrichtung. Zeigen Sie mir " +#~ "den Einrichtungsplan zur Genehmigung und überprüfen Sie dann die " +#~ "Installation.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installieren REA und verbinden Sie es mit diesem " +#~ "Codierungsagenten mit npx rea-Agenten @ neueste Einrichtung. Zeigen Sie mir " +#~ "den Einrichtungsplan zur Genehmigung und überprüfen Sie dann die " +#~ "Installation.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Verwenden REA inspizieren https://rea.tools/. Klonen Sie " +#~ "diese Website für mich.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "schlüssel [21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× skalieren" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0} REA{ph1}{ph2} Alles zurückentwickeln {ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/es/messages.po b/website/locales/es/messages.po new file mode 100644 index 000000000..3409808d6 --- /dev/null +++ b/website/locales/es/messages.po @@ -0,0 +1,13522 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Inicio{ph1} / Blog" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blog." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Reflexiones sobre ingeniería inversa." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Reconstrucción del juego{ph0}Ensayo" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "La revolución industrial en ingeniería inversa" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"Lo que la reconstrucción y reconstrucción manual de TH08, TH095 y TH04 me " +"enseñó sobre los agentes, la verificación y el conocimiento que componen los" +" proyectos." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Leer el artículo" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Por N0zoM1z0 * 10 octubre 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Arriba" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "Blog REA-Reflexiones sobre Ingeniería inversa" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Reflexiones sobre ingeniería inversa, aprovechando la experiencia práctica " +"con REA y agentes de IA." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA — Descubra cómo funciona el software. Ingeniería inversa con su agente " +"de codificación." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Inicio de REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Navegación principal" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA en GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Únete a REA en Discord" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Sigue a REA en X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Inicio{ph1} / {ph2}Blog{ph3} / Reconstrucción Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Ensayo * Reconstrucción de Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "La revolución industrial en ingeniería inversa." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Por N0zoM1z0 * 10 octubre 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Ideas clave" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Dar autonomía a los agentes sobre la investigación.{ph1} Establezca un " +"objetivo claro y criterios de aceptación, luego deje que el agente decida " +"qué probar a continuación." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Usa el repositorio y Git como memoria de trabajo.{ph1} Mantén el " +"razonamiento con el código. Los puntos de control de Git permiten que la " +"próxima sesión continúe después de que finalice la conversación." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Deje que la evidencia decida lo que reclama.{ph1} Una explicación " +"confiable aún necesita ser probada. \"Desconocido\" es una respuesta válida " +"cuando la evidencia está incompleta." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Pruebe también la referencia de verificación (oracle).{ph1} Pruebe los " +"casos que debería rechazar. Si pasa por alto un error, revise los resultados" +" anteriores que dependían de él." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Estamos en los primeros días de la revolución industrial de ER.{ph1} " +"Los métodos aún están tomando forma. Queda mucho por explorar." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Cómo se compone la experiencia" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Dirección humana{ph1} * Objetivo y criterios de aceptación" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Autonomía" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Agente" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Elige un experimento.{ph0}Propón una hipótesis." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Verificación" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Referencia de validación" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Prueba contra a{ph0}referencia concreta." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Repositorio" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Memoria de trabajo" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Código, evidencia,{ph0}cheques y lecciones." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Desajuste{ph0}{ph1}Revisar la hipótesis{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Una mejor{ph0}{ph1}punto de partida{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Reutilización" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Pase{ph1} * Conservar el resultado y su evidencia" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Cada proyecto deja al siguiente con un mejor punto de partida. Eso incluye " +"arreglar los cheques cuando descubrimos una brecha." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "En este artículo" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Agosto de 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08: la continuación{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Dos enfoques{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095: composición{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: entre arquitecturas{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}De exacto a legible{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}El cambio industrial{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Lo que se hace posible{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Qué cambió en agosto de 2026" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Antes de este trabajo, había hecho mucha ingeniería inversa manual. " +"Inspeccionaba una función hasta que tenía una explicación, luego probaba esa" +" explicación con el programa. Llegar más lejos significaba dedicar más " +"tiempo a la siguiente función. También significaba mantener una imagen cada " +"vez más grande en mi cabeza." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"La mayor parte de mi trabajo de RE es en juegos. Los reconstruyo para que su" +" comportamiento pueda entenderse y eventualmente llevarse a un puerto de " +"software o un mod. Esa es la experiencia detrás de este artículo. El método " +"puede ser útil en otros lugares, pero cada campo necesita establecer qué " +"puede verificar con una referencia confiable." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"En agosto de 2026, comencé a explorar seriamente la realidad aumentada " +"impulsada por agentes. Quería ver hasta dónde podía llegar un agente con " +"acceso al programa y las herramientas de desarrollo ordinarias. La " +"reconstrucción de Touhou me dio un proyecto sustancial en el que " +"averiguarlo." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"El progreso inicial fue sorprendente. Una investigación podría seguir " +"avanzando sin que yo eligiera cada paso individual. Una comparación fallida " +"podría enviar al agente a otra persona que llama. Podría escribir un pequeño" +" diagnóstico y usar el resultado para decidir qué probar a continuación. " +"Darle esa libertad marcó la diferencia: pude dedicar más atención a la " +"dirección del proyecto y a si sus controles eran confiables." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"El ritmo llamó mi atención primero. Entonces comencé a preguntarme qué " +"sobreviviría más allá del proyecto actual. ¿Se beneficiaría el próximo juego" +" de todo lo que acabábamos de aprender?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: construyendo sobre el trabajo humano" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08 {ph1}, Noche Imperecedera, comenzó como una continuación de {ph2}" +" Reconstrucción de GensokyoClub{ph3}. Su fuente pública me dio una base " +"sustancial. Vino con el conocimiento de la construcción y una historia de " +"contribuciones que conservé en la continuación." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"El historial importado finaliza en el punto de control público del 10 de " +"agosto. Mi continuación independiente comenzó el 13 de agosto. Para el 19 de" +" agosto, el libro mayor registró la fuente de las 1.107 funciones de juego " +"identificadas." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Un puerto de reconstrucción Linux jugable se comprometió el 24 de agosto, " +"aproximadamente once días después de que comenzara la continuación. Siguió " +"una edición web. La versión nativa Linux de 64 bits llegó el 30 de agosto." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Lo que me llamó la atención fue que el trabajo había llegado a un programa " +"que la gente podía ejecutar. Llegar allí requería seguir problemas más allá " +"de una función individual. Incluso cuando dos funciones parecían correctas " +"de forma aislada, accidentalmente podían usar copias separadas de estado que" +" deberían haberse compartido." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Esto hizo que las verificaciones de referencias fueran fundamentales para el" +" trabajo. Yo los llamo {ph0}referencias de verificación (oráculos){ph1}. Una" +" comparación de código puede decirnos si una función reconstruida reproduce " +"las instrucciones originales. Una verificación en tiempo de ejecución puede " +"indicarnos si una ruta ejercitada alcanza el estado esperado. El agente " +"propone una explicación y la prueba; un desajuste le da algo específico para" +" investigar." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Una coincidencia exacta con la constante incorrecta" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Una referencia de verificación (oracle)es un software que alguien escribió." +" TH08 me dio un claro recordatorio de cuánto puede depender de ese " +"software." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"En septiembre, un error reportado por un puerto de conmutador descendente " +"condujo de nuevo a la recopilación automática de elementos. La fuente " +"reconstruida verificó la potencia del jugador contra {ph0}. El original " +"usado {ph1}, el umbral de potencia máxima." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"La potencia normal no es negativa, por lo que la comprobación de potencia " +"reconstruida siempre se cumplió de manera efectiva. Por encima de la línea " +"de recolección, el juego podría atraer elementos sin requerir la máxima " +"potencia. Las otras excepciones en la condición eran correctas. Esta " +"constante cambió el comportamiento." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "" +"{ph0}Sin embargo, la función ya había pasado la comparación exacta.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Una reconstrucción puede colocar una constante en una dirección diferente. " +"La herramienta de comparación explicó eso ajustando las direcciones en las " +"instrucciones compiladas antes de compararlas con las originales. Pero nunca" +" verificó el valor de coma flotante almacenado en la dirección a la que se " +"hace referencia." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Eso dejó un agujero en el cheque. Podría apuntar la instrucción reconstruida" +" a la del original {ph0} mientras que la fuente todavía dijo {ph1}. Los " +"bytes de instrucción coincidieron. La fuente significaba algo diferente." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"El {ph0}Corrección del 2 de septiembre{ph1} corrigió la fuente e hizo que la" +" comparación verificara los bytes reales de la constante referenciada. A " +"{ph2}auditoría más amplia{ph3} luego examinó 1.548 referencias constantes de" +" coma flotante. Encontró otras doce referencias incorrectas en cinco " +"funciones aceptadas." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"La comparación ahora verifica cada una de esas constantes de coma flotante. " +"Sus pruebas incluyen valores deliberadamente incorrectos para asegurarse de " +"que sean rechazados. También tuvimos que revisar los resultados que habían " +"pasado la verificación más débil." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}La referencia de verificación (oracle) también necesitaba " +"reconstrucción.{ph1} Repararlo era parte de reparar el juego." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Eso importa cuando el equipo es principalmente una persona que trabaja con " +"agentes. No puedo inspeccionar personalmente cada línea que producen, por lo" +" que gran parte de mi confianza se basa en sus controles. El punto ciego de " +"una referencia de verificación compartida (oracle) puede afectar muchas " +"investigaciones antes de que me dé cuenta. Tengo que entender qué verifica " +"realmente el verificador y probarlo con los casos que deberían fallar." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"A medida que continuaba el trabajo, esas comprobaciones pasaron a formar " +"parte del repositorio. También lo hicieron los motivos de los cambios de " +"origen y las notas que permitían que una sesión posterior retomara donde se " +"detuvo una anterior. {ph0}El repositorio de código fuente se estaba " +"convirtiendo en la memoria de trabajo del proyecto.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Un lote exitoso nos dio tanto el código recuperado como un mejor " +"entorno para el siguiente lote.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Dos ideas diferentes de reconstrucción" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub ' s {ph0}LÉAME público{ph1} explicita su desacuerdo con este " +"tipo de trabajo. El aviso anuncia que se realizarán desarrollos adicionales " +"de forma privada hasta su finalización. Un pasaje dice:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"El aumento de estafadores (descompilaciones y puertos de IA) en este espacio" +" que se aleja de nuestro trabajo pinta una mala imagen para futuros " +"esfuerzos de descompilación…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"El aviso también describe el costo psicológico para los mantenedores. Su " +"política de contribución excluye las solicitudes de extracción producidas " +"principalmente con IA. Han dedicado su tiempo libre a un trabajo difícil, y " +"ese trabajo ayudó a que mi continuación fuera posible. Respeto el esfuerzo " +"que hay detrás. El desacuerdo que quiero discutir es sobre cómo debe " +"proceder la reconstrucción y cómo debe juzgarse una contribución." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"En el flujo de trabajo manual que conocía, desarrollar una comprensión de " +"una función y reconstruirla generalmente recaía en la misma persona. Un " +"proyecto dependía en gran medida de la experiencia de esa persona. La " +"confianza en el colaborador importaba porque gran parte del razonamiento " +"ocurría mientras trabajaban." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Los proyectos existentes ya preservan el conocimiento en su fuente y crean " +"herramientas. Lo que cambió para mí fue que un agente podía usar ese " +"conocimiento para llevar a cabo la próxima investigación por su cuenta." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"En mi continuación, decido el objetivo y el estándar para aceptar un " +"resultado. El agente tiene amplia libertad para investigar. Su " +"reconstrucción propuesta tiene que sobrevivir a los controles pertinentes. " +"Quiero que otra persona pueda examinar por qué elegimos una implementación, " +"incluso si un agente hizo la mayor parte del trabajo." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Esta puede ser una transición difícil. Años de trabajo cuidadoso pueden " +"convertirse en la base para una continuación que avanza mucho más rápido. " +"Eso plantea preguntas reales sobre el crédito. También cambia lo que los " +"mantenedores necesitan saber antes de aceptar una contribución." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"La analogía industrial me ayuda a pensar en esto. En un oficio, gran parte " +"del proceso depende de la habilidad de la persona que lo lleva a cabo. La " +"maquinaria cambia donde se necesita esa habilidad. Alguien todavía tiene que" +" diseñar el proceso y reconocer cuándo su resultado es incorrecto. " +"Diferentes comunidades pueden elegir cuánto de ese cambio quieren asumir." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Mi elección es continuar abiertamente, con el trabajo heredado acreditado y " +"su historia preservada. Quiero que el nuevo trabajo sea revisable. Eso nos " +"da una forma de preguntarnos hasta dónde puede llegar este enfoque y de " +"aprender de lo que sale mal en el camino." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Fuente: GensokyoClub ' s {ph0}Aviso léame{ph1}, revisado el 10 de octubre de" +" 2026, y su {ph2}política de contribuciones{ph3}. La cita es un extracto " +"abreviado. TH08 ' s {ph4}créditos y procedencia{ph5} registre el límite de " +"continuación." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: la experiencia comienza a agravarse" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095 {ph1}, Dispara la bala, hizo que el valor de esa experiencia " +"fuera mucho más fácil de ver. Su repositorio comenzó el 29 de agosto con " +"cero funciones de juego confirmadas en el libro mayor. Todavía teníamos que " +"aprender el juego. Pero ya sabíamos mucho más sobre cómo comenzar una " +"reconstrucción y cómo mantenerla en marcha." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"Para el 7 de septiembre, las 697 funciones de juego identificadas tenían " +"fuente. Para el 8 de septiembre, 696 habían sido aceptadas como " +"comparaciones exactas. Todo el programa enlazado el 9 de septiembre. La " +"reconstrucción del Windows i386 se marcó como jugable el 10 de septiembre, " +"aproximadamente doce días después de la inicialización." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Encontré esto más emocionante que la velocidad del primer proyecto. Un " +"objetivo nuevo podría beneficiarse del trabajo realizado en otro juego. La " +"experiencia ya estaba presente en las herramientas y en la forma en que se " +"organizó el proyecto." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Por ejemplo, TH08 nos había enseñado a prestar atención al programa " +"ensamblado temprano. Si varias funciones recuperadas dependen del mismo " +"estado, sus comparaciones aisladas dejan abierta una pregunta importante. " +"Necesitamos verlos trabajar juntos. Esa lección ayudó a dar forma a la forma" +" en que abordamos la compilación de todo el programa de TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Una lección que se queda en mi cabeza es útil mientras estoy allí. Una vez " +"que se convierte en una verificación de que se puede ejecutar otra sesión, " +"puede seguir ayudándome después de que haya seguido adelante. El siguiente " +"agente puede usar el resultado sin repetir la investigación que lo condujo." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"El error constante de coma flotante también pertenece a esa memoria. Explica" +" por qué verificar una referencia también requiere verificar los datos " +"detrás de ella. Mantener esa corrección con el código ayuda a que los " +"proyectos posteriores eviten heredar el punto ciego del cheque anterior." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}El método se convierte en parte del material de partida para el próximo" +" juego.{ph1} Podemos dedicar más esfuerzo del próximo proyecto a lo que " +"realmente es nuevo sobre su objetivo." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"El mismo beneficio está disponible para las personas que se unan más tarde. " +"Pueden inspeccionar una decisión y volver a ejecutar su verificación antes " +"de continuar con el trabajo. No tienen que reconstruir todo el historial del" +" proyecto para descubrir por qué la fuente se ve de la manera en que lo " +"hace." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: el flujo de trabajo sobrevive a una arquitectura diferente" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04 {ph1}, Lotus Land Story, llevó este trabajo a la era PC-98 DOS. " +"El objetivo ahora era un entorno de 16 bits con cuatro programas " +"cooperantes. Comprender su comportamiento de hardware requirió evidencia " +"diferente de los juegos Windows. Existentes {ph2}Trabajo ReC98{ph3} también " +"nos dio valiosos conocimientos y material de origen aquí." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"La reconstrucción de DOS ahora está funcionando. En mis pruebas manuales, " +"jugué rutas normales completas a través de sus finales y verifiqué las " +"salvaciones. El trabajo actual es un puerto nativo de 64 bits. Establecer " +"una versión de DOS que funcione primero le da a ese puerto una referencia." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"La arquitectura cambió lo que necesitábamos investigar. También cambió el " +"compilador y el tiempo de ejecución con los que verificamos nuestro trabajo." +" Pero el agente aún podría seguir una pregunta hasta un resultado y dejar " +"que ese resultado guíe el próximo experimento." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Considere la transición del juego a un final. Necesitamos saber qué estado " +"cruza esa frontera y qué programa es responsable de ello. Eso es algo que " +"podemos investigar contra el producto DOS. Una vez que las pruebas y los " +"controles estén disponibles, un agente puede resolver la pregunta de la " +"misma manera que lo hizo con un título Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"Es por eso que TH04 es importante para el argumento. Un cambio sustancial en" +" la plataforma no nos obligó a empezar de nuevo con una nueva forma de " +"trabajar. La arquitectura definió el problema; el flujo de trabajo aún nos " +"dio una forma de resolverlo." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Para el puerto de 64 bits, ahora podemos examinar la nueva implementación " +"con el comportamiento ya recuperado en DOS. El conocimiento de la " +"reconstrucción le da al puerto algo sobre lo que construir." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Estado del proyecto al 10 de octubre de 2026: {ph0}Reconstrucción de DOS y " +"pruebas manuales{ph1} · {ph2}puerto de 64 bits{ph3}. El puerto permanece en " +"desarrollo." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Del código exacto al código legible" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Una vez que una reconstrucción funciona, quiero que alguien más pueda " +"entenderla." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Para mí, el ensamblaje y las compensaciones brutas pueden parecer viejos " +"amigos. Me doy cuenta de que esta es una definición un poco inusual de " +"\"legible.\"La mayoría de la gente preferiría seguir la lógica del juego sin" +" tener en mente el diseño de la memoria del ejecutable." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"Ahí es donde {ph0}reconstrucción semántica{ph1} entra. Un campo recuperado " +"aún puede conocerse principalmente por su desplazamiento. Seguimos cómo lo " +"usa el juego hasta que podamos explicar su función. Entonces podemos darle " +"un nombre significativo y un tipo que se ajuste a la evidencia. Mantenemos " +"el razonamiento con la fuente para que la siguiente persona pueda ver de " +"dónde vino esa interpretación." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Esto se vuelve especialmente importante para un puerto de software. Una " +"dirección absoluta me dice dónde vivía algo en el antiguo ejecutable. Le da " +"a una implementación de 64 bits poca ayuda para decidir qué objeto debería " +"poseer ese estado. Para mover el comportamiento de manera segura, " +"necesitamos recuperar la relación detrás del antiguo acceso a la memoria." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "El orden que uso ahora es:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Recupere una línea de base exacta.{ph1} Compila las piezas " +"reconstruidas con el compilador histórico. Compare el código y los datos " +"relevantes con el ejecutable original. Registre las diferencias no resueltas" +" para que la siguiente fase tenga un punto de partida claro." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Compílalo y reprodúcelo en la plataforma original.{ph1} Vincule esas " +"piezas al programa real utilizando la arquitectura y el compilador " +"originales. Ejercita rutas de juego importantes. Aquí es donde podemos " +"encontrar problemas con el estado compartido o la inicialización que una " +"comparación de funciones aisladas pasó por alto." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Reconstruye la semántica contra ambas referencias.{ph1} Tome una parte " +"coherente del juego a la vez y establezca qué significa su fuente " +"recuperada. Mejore su representación al tiempo que conserva las " +"comparaciones exactas y la construcción histórica jugable." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Haz el puerto moderno.{ph1} Mueva el comportamiento establecido al " +"nuevo entorno, como una compilación nativa de 64 bits. El juego de " +"plataformas original reconstruido sigue siendo una referencia para comparar " +"cómo se comporta el puerto." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"La construcción jugable de la segunda etapa se convierte en un {ph0}segunda " +"referencia de verificación (oracle){ph1} durante la tercera. La primera " +"referencia de verificación (oracle) verifica si nuestra fuente modificada " +"aún reproduce el código y los datos originales relevantes. El segundo " +"verifica que el programa reconstruido aún se construya y se comporte " +"correctamente a lo largo de las rutas que ejercitamos." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Detectan diferentes errores. Un cambio de tipo puede alterar las " +"instrucciones generadas. Un cambio de propietario puede dejar dos partes del" +" juego usando diferentes copias de estado. Mantener ambos controles " +"disponibles le da al agente una falla concreta para investigar antes de " +"llevar a cabo una refactorización adicional." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Un nombre necesita evidencia propia. Una comparación exacta no puede " +"decirnos si un campo realmente significa \"tiempo de " +"invulnerabilidad\".\"Tenemos que establecer eso a partir de cómo el juego lo" +" escribe y lo usa. Si el significado sigue siendo incierto, un nombre " +"neutral es más útil para el próximo lector que una suposición segura." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Aprendimos este orden a través de los proyectos. TH08 ya tenía puertos " +"reproducibles antes de algunas de sus auditorías históricas posteriores de " +"la plataforma. Eso hizo que ciertos defectos fueran más difíciles de ver. El" +" {ph0}Flujo de trabajo actual de la fábrica{ph1} coloca la compilación de la" +" plataforma original en primer lugar, de modo que el trabajo semántico pueda" +" usarla como referencia antes de que comience la migración." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}La reconstrucción exacta nos da una referencia. La reconstrucción " +"semántica hace utilizable el conocimiento recuperado.{ph1} Entonces, un " +"puerto puede basarse en ambos." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Qué hace que esto sea un cambio industrial" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Estos proyectos cambiaron donde dediqué mi atención. Una vez que los agentes" +" pudieron llevar adelante gran parte de una investigación, mejorar su " +"entorno de trabajo se convirtió en una de las cosas más útiles que pude " +"hacer. Una herramienta mejor podría ayudar con cada función posterior que la" +" necesitara." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"La autonomía importa aquí. El siguiente paso útil a menudo se aclara solo " +"después de un experimento fallido. Un agente necesita suficiente libertad " +"para seguir ese resultado en algún lugar inesperado. Si tiene que esperar a " +"que prescriba cada paso, gran parte del trabajo permanece atado a mi " +"atención." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Espero que el agente haga hipótesis equivocadas. Lo que importa es si " +"podemos probarlos y aprender del resultado. Una verificación fallida debería" +" ayudarlo a comprender el error lo suficientemente bien como para intentarlo" +" de nuevo. Todavía tengo que decidir si la evidencia acumulada respalda un " +"hito del proyecto." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA le da al agente acceso a herramientas de análisis. Una pregunta sobre la" +" persona que llama a una función puede llevar directamente a inspeccionar a " +"esa persona que llama. El proyecto de reconstrucción proporciona el " +"compilador y sus propias comprobaciones de referencia. El agente puede " +"usarlos para probar la fuente que propone y ver dónde se sostiene su " +"explicación." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"El error TH08 muestra por qué esas comprobaciones merecen su propia atención" +" de ingeniería. Cuando se usa la misma comparación en cientos de funciones, " +"una brecha en ella puede extenderse mucho más allá de un error en una " +"implementación. Probar el verificador mejora la retroalimentación disponible" +" para todo ese trabajo posterior." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"La analogía industrial tiene un ejemplo histórico útil aquí. Boulton y Watt " +"introdujeron un {ph0}indicador de máquina de vapor en 1796{ph1} para ayudar " +"a ajustar las válvulas del motor. Una versión de registro trazó la presión a" +" través de la carrera del pistón. Hizo que el comportamiento interno del " +"motor estuviera disponible para su inspección. Nuestras herramientas de " +"comparación tienen un propósito similar: nos permiten examinar qué está " +"haciendo la maquinaria mientras la mejoramos." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Estamos en las primeras etapas de este cambio industrial.{ph1} Gran " +"parte de la infraestructura aún es inmadura. Los agentes pueden moverse más " +"rápido de lo que nuestras verificaciones fueron diseñadas para soportar, por" +" lo que el proceso debe desarrollarse junto con ellos. Cuando encontramos un" +" defecto en una herramienta compartida, tenemos que repararlo y revisar los " +"resultados afectados. El próximo proyecto puede heredar una herramienta más " +"sólida." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"También hay un límite práctico para cualquier conversación. Terminará antes " +"de que se termine una gran reconstrucción. El repositorio de código fuente " +"tiene que hacer posible que continúe otra sesión sin perder el motivo de la " +"última decisión." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"El {ph0}Fábrica de Reconstrucción de Touhou{ph1} surgió de esa necesidad. " +"Brinda a los proyectos una forma compartida de llevar adelante sus controles" +" y lecciones. Trabajar en un juego puede mejorar las condiciones iniciales " +"de otro." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"Eso es lo que hace que la analogía industrial tenga sentido para mí. La " +"experiencia comienza a formar parte de herramientas que otros pueden usar. " +"Mejorar esas herramientas cambia cuánto puede hacer la próxima persona, o el" +" próximo agente." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Los proyectos que ahora podemos considerar" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"El ritmo importa porque cambia la decisión de comenzar. Un juego podría ser " +"fascinante para la ingeniería inversa y aún así exigir más de mi propia " +"atención de la que podría prestarle de manera realista. Muchos proyectos se " +"quedarían en ideas." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Ahora puedo ver una manera de mantener ese proyecto en marcha a través de " +"repetidas investigaciones. Obtener una reconstrucción funcional hace que un " +"puerto de software sea más práctico. Recuperar semántica legible hace que " +"sea más fácil para otra persona explorar un mod. El esfuerzo realizado para " +"comprender el juego puede seguir dando sus frutos después de que se ejecute " +"la primera versión." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Ahora miro un programa desconocido y pregunto: {ph0}¿qué acceso, " +"retroalimentación y conocimiento acumulado le permitirían a un agente " +"trabajar en esto de manera confiable?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Esa pregunta me hace considerar proyectos que antes habría dejado solos. " +"Cada uno puede mejorar la forma en que nos acercamos al siguiente. Quiero " +"seguir explorando hasta dónde nos puede llevar eso." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Hitos y fuentes del proyecto" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Las fechas describen los puntos de control registrados del proyecto, " +"cotejados con el historial público de GitHub el 10 de octubre de 2026. El " +"tiempo transcurrido es el tiempo del calendario entre confirmaciones. La " +"presencia de la fuente, las comparaciones exactas, una compilación y un " +"resultado en tiempo de ejecución nombran cada uno un hito diferente." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08 :{ph1} {ph2}Continuación del 13 de agosto{ph3}, {ph4}Libro mayor " +"de fuentes del 19 de agosto{ph5}, {ph6}24 de agosto Puerto Linux{ph7}, " +"{ph8}Edición web del 26 de agosto{ph9}, y {ph10}Lanzamiento de Linux de 64 " +"bits el 30 de agosto{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} {ph2}Libro mayor inicial del 29 de agosto{ph3}, " +"{ph4}Libro mayor de fuentes del 7 de septiembre{ph5}, {ph6}Comparaciones del" +" 8 de septiembre{ph7}, {ph8}Vinculación del 9 de septiembre{ph9}, y {ph10}10" +" de septiembre jugable-registro de compilación{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}Traspaso del 10 de octubre{ph3} registra la " +"reconstrucción de DOS en funcionamiento, la prueba completa de ruta normal " +"del mantenedor y la fase actual de 64 bits." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} Corrección de referencia de verificación TH08 (oracle) :{ph1} {ph2}el " +"error de recopilación automática reportado{ph3}, {ph4}la corrección de " +"origen y comparación{ph5}, y {ph6}la auditoría constante completa de coma " +"flotante{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Reconstrucción semántica:{ph1} {ph2} Libro de jugadas de legibilidad de" +" TH08{ph3} y {ph4}orden de fase de la fábrica y dos rutas de " +"validación{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Historia industrial:{ph1} {ph2}registro de indicadores de motores de " +"vapor del Grupo de Museos de Ciencias{ph3} describe la introducción de 1796 " +"y el mecanismo de registro de presión." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Método:{ph1} la Fábrica {ph2}autonomía del agente{ph3} y " +"{ph4}conocimiento entre juegos{ph5} los documentos conservan los principios " +"de trabajo y las lecciones." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "" +"{ph0}Más artículos{ph1} · {ph2}Explore una investigación sobre TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Revolución Industrial de la Ingeniería Inversa-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 reflexiona sobre la ingeniería inversa manual, la reconstrucción de" +" Touhou con agentes de IA y cómo el conocimiento se compone en TH08 , TH095 " +"y PC-98 TH04 ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Experiencia transmitida entre proyectos" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Ensayo de reconstrucción de Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Inicio{ph1}{ph2}/{ph3}Laboratorio de velocidad de dinosaurios" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Inspeccionar → reconstruir → cambiar" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Reconstruye la regla de velocidad del dinosaurio." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Para recrear la aceleración del juego, primero encuentra la regla que " +"controla su velocidad. {ph0} REA devolvió el script en ejecución;{ph1} " +"usamos su regla para construir este minijuego con {ph2}velocidad " +"ajustable.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "En esta página" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Juega y cambia la velocidad{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Lea la regla recuperada{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Compruebe la reconstrucción{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Pruebe el análisis{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Juega y cambia la velocidad" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Presiona Play, luego salta sobre el cactus. Mueva el control deslizante de " +"velocidad para probar un juego más lento o más rápido; cambia a una " +"velocidad fija. Seleccione la regla recuperada para comenzar en 6 y acelerar" +" gradualmente nuevamente." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Juega a la reconstrucción" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Jugar" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Saltar ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Reiniciar" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Velocidad" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Utilice la regla de aceleración recuperada" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Regla original: comience en 6, luego aumente hacia 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Mueva el control deslizante para establecer su propia velocidad. Espaciar o " +"saltar despeja un cactus." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Habilite JavaScript para reproducir la reconstrucción. El código y la " +"explicación anteriores siguen siendo legibles." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Lea el script REA devuelto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Inspeccionamos {ph0}edición de navegador derivada de Chromium de wayou{ph1} " +"con REA . Devolvió lo cargado {ph2}, incluyendo esta rama en la función de " +"actualización del juego:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Los ajustes son {ph0}, {ph1} y {ph2}. El juego ejecuta esta rama en una " +"actualización sin colisión." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Usa la misma regla en el nuevo juego" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Copiar" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"El minijuego utiliza esta función para la aceleración automática. Mover el " +"control deslizante proporciona una velocidad fija en su lugar. El dibujo, la" +" física de salto y las comprobaciones de colisión de rectángulos son un " +"nuevo código para este juego de enseñanza; su simulación avanza a 60 " +"actualizaciones por segundo." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "" +"{ph0}Descargar la regla de velocidad{ph1} · {ph2}Leer el código del " +"juego{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Compruebe la reconstrucción" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Llamamos desactivada la función de actualización del juego original con " +"obstáculos y programación automática. Compare esas velocidades registradas " +"con una repetición de la regla recuperada." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Actualizaciones" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Juego original" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Regla reconstruida" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Ejecute la verificación de velocidad" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Valores redondeados a tres decimales. La rama verifica antes de agregar, por" +" lo que el incremento final puede tomar una velocidad justo por encima de " +"13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Pruebe el análisis usted mismo" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Configurar REA {ph1} con su agente de codificación." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Siga el {ph0}pasos de conexión del navegador{ph1}, usando {ph2} como la URL " +"de la página." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Proporcione a su agente la URL de la página y el punto final de depuración " +"local, luego copie este mensaje." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilice REA para inspeccionar este juego de dinosaurios. " +"¿Por qué se vuelve más rápido? Muestre la regla de velocidad, luego cree una" +" versión pequeña con una velocidad ajustable.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Solicite un seguimiento: {ph0}\"¿Dónde se calcula la altura del salto? " +"Agregue un control de altura de salto a la nueva versión.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Fuente: {ph0}código de velocidad inspeccionado{ph1}, Autores Chromium. " +"{ph2}Derechos de autor y licencia BSD{ph3}. REA 4.1.0 inspeccionó la " +"edición HTTP en ejecución en Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Juego de Dinosaurios Chrome: Reconstruye su Regla de Velocidad-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Lee la regla de velocidad del juego de dinosaurios con REA, reconstrúyela, " +"luego cambia la velocidad y juega." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Reconstrucción de la velocidad de los dinosaurios" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Minijuego de dinosaurios. Usa el botón de salto o presiona la barra " +"espaciadora mientras el juego está enfocado." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Copiar regla de velocidad reconstruida" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Copie el mensaje de análisis de dinosaurios" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Inicio{ph1} / Preguntas frecuentes" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA PREGUNTAS frecuentes." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Configuración, actualizaciones, análisis y solución de problemas." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Temas" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Configuración y actualizaciones{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Análisis{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Solución de Problemas{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Datos e intercambio{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Configuración y actualizaciones" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "¿Cómo instalo REA ?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Terminal * configuración del agente" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Copiar" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"La configuración registra la conexión MCP de REA e instala la skill de " +"investigación correspondiente. Al terminar, reinicia tu agente y dale la " +"ruta del archivo y una pregunta. La {ph0}guía de configuración{ph1} explica " +"los requisitos y los pasos de tu primer análisis." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "¿Qué agentes de codificación pueden usar REA ?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Cualquier agente que admita servidores MCP locales. La configuración incluye" +" escritorio Claude Code , Claude, Codex , Cursor , Gemini CLI , Windsurf , " +"Devin , OpenCode , Antigravity , GitHub Copilot CLI , Command Code , Grok " +"Build , OMP y VS Code . El conector de Grok Bot se agrega desde su chat." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Conecte a su agente de codificación{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "¿Cómo actualizo REA ?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA se publica con frecuencia, incluidas correcciones de errores. Si instaló" +" el CLI con npm :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Terminal * instalado CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Siga el comando de actualización de configuración que imprime la " +"actualización. Si configura su agente a través de {ph0}, corre:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Terminal * actualizar la configuración del agente" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Revisa los cambios y reinicia tu agente. Su conexión a REA usa una versión " +"fija del paquete, así que debes volver a ejecutar la configuración para usar" +" la nueva versión. Para un comando puntual de CLI, añade el comando después " +"de {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Está instalando la habilidad desde skills.sh ¿suficiente?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"La habilidad le da instrucciones de investigación a su agente. Corre {ph0} " +"Configuración de REA{ph1} para conectar el servidor MCP e instalar la " +"habilidad correspondiente, reinicie su agente para que pueda llamar a las " +"herramientas." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Análisis" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "¿Qué puedo analizar con REA ?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Comience con el tipo de software que tiene:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Bibliotecas y ejecutables nativos{ph1}: funciones, ensamblado, " +"pseudocódigo y referencias." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Aplicaciones JavaScript y Electron{ph1}: módulos, importaciones, IPC y" +" ubicaciones de origen." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Páginas del navegador{ph1}: scripts, solicitudes y observaciones en " +"tiempo de ejecución." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA también tiene flujos de trabajo para ensamblados administrados, APK de " +"Android, firmware y recursos empaquetados. {ph0}Ver los estudios de " +"caso{ph1} para investigaciones trabajadas." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "¿Necesito Hopper, Ghidra o IDA ?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"El análisis profundo de programas de código máquina utiliza uno de ellos. La" +" inspección estática JavaScript y. NET funciona con los archivos " +"suministrados y no necesita un motor de análisis de programas de código " +"máquina." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Conecte su instalación existente de Ghidra o IDA, o deje que el programa de " +"instalación detecte Hopper y proponga una instalación. Su anfitrión y " +"destino determinan qué proveedor se puede utilizar. {ph0}Configurar el " +"análisis de programas de código máquina{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "¿Puedo usar REA sin un agente de codificación?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Sí. El CLI utiliza los mismos flujos de trabajo de análisis. Para una " +"aplicación JavaScript o Electron local:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Terminal * análisis estático de aplicaciones" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Reemplace la ruta con una carpeta de aplicación extraída o un archivo ASAR. " +"{ph0}Utilice el CLI {ph1} para opciones de instalación." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "¿Qué código devuelve REA?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"El análisis nativo devuelve ensamblador y pseudocódigo, junto con llamadas a" +" funciones, referencias y constantes relevantes. El análisis de JavaScript " +"devuelve módulos, sus relaciones y las ubicaciones en el código fuente." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Su agente usa estos hallazgos para explicar el comportamiento o escribir y " +"probar una implementación. El {ph0} Cálculo de DX-Ball{ph1} y " +"{ph2}Comprobador de banderas CTF{ph3} muestre cómo funciona ese proceso." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "¿Qué le pregunto a mi agente?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Asígnele un objetivo local y un comportamiento para investigar. Para una " +"aplicación JavaScript o Electron:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Reemplaza el camino con tu objetivo. El {ph0}guías{ph1} proporcione " +"indicaciones para ejemplos nativos, Electron y del navegador." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Solución de Problemas" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "¿Por qué mi agente no puede ver las herramientas REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Reinicie o vuelva a conectar su agente después de la configuración. " +"Verifique su registro REA con {ph0}; para Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Terminal * compruebe un cliente" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Reemplazar {ph0} con su ID de cliente, como {ph1} o {ph2}. Si el informe " +"muestra un registro faltante o obsoleto, ejecute el programa de instalación " +"para ese cliente:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Terminal * reparar la configuración de un cliente" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Revise su plan y reinicie el cliente. Si el registro es correcto pero faltan" +" herramientas, verifique el error de conexión MCP del cliente. {ph0}Más " +"diagnósticos de configuración{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "¿Necesito iniciar Hopper primero?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA inicia Hopper cuando una operación lo necesita. En macOS , complete la " +"opción de primera ejecución de modo de demostración o activación de licencia" +" antes del análisis desatendido. {ph0}Consulte configuración de proveedor " +"nativo{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "¿Qué hago si encuentro un error?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Actualización REA {ph1}, reinicie su agente y vuelva a intentar la " +"misma tarea. Es posible que una versión reciente ya solucione el problema." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Si persiste, {ph0}abrir una incidencia{ph1} con su versión REA, sistema " +"operativo, tipo de destino, pasos para reproducir y salida de error. Incluya" +" el nombre del proveedor cuando el problema implique el análisis de " +"programas de código máquina." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Datos e intercambio" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "¿REA carga mi aplicación?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA analiza los objetivos en su máquina. Su agente recibe los resultados y " +"la política de datos de su proveedor de modelos se aplica a esos resultados." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "¿Cómo puedo compartir un ejemplo o contribuir?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"¿Tiene un ejemplo útil de REA? Nos encantaría verlo. Comparta el objetivo, " +"su pregunta, los hallazgos y cómo los verificó en un {ph0}cuestión{ph1} o " +"{ph2}solicitud de extracción{ph3}. Extractos de códigos cortos y figuras " +"ayudan a otros a seguir la investigación." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Los informes de errores, solicitudes de funciones, documentación y mejoras " +"de código también son bienvenidos. También puede analizar un ejemplo en el " +"{ph0}comunidad{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "" +"Preguntas frecuentes sobre REA: Configuración, Actualizaciones y Solución de" +" problemas" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Respuestas a preguntas comunes sobre REA: instalación, actualizaciones, " +"herramientas de análisis, agentes de codificación, solución de problemas y " +"ejemplos para compartir." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Preguntas frecuentes sobre REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Copie el comando de configuración REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Copie el comando de actualización REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Comando de actualización de la configuración del agente de copia" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Copie el comando de análisis REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Copie el mensaje de análisis de ejemplo" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Copie el comando de diagnóstico del cliente" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Copiar comando de configuración de ámbito" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Inicio{ph1} / Tu primera investigación" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Averigüe dónde{ph0}las notas exportadas van." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Use REA para inspeccionar una aplicación pequeña, siga su botón Exportar " +"notas y verifique un detalle usted mismo." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "En este ejercicio" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Configurar{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Pregunte sobre exportación{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Sigue la respuesta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Comprobar una predicción{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Haz otra pregunta{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Conecte a su agente a REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Copiar" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "O ejecute este comando en su terminal:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Revise el plan, apruebe la configuración y luego reinicie su agente. ¿Ya " +"estás conectado? Continúe abajo." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Pregunte dónde está escrito el CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"El ejemplo es una aplicación Electron de seis archivos con un {ph0}Notas de " +"exportación{ph1} botón. Su agente puede inspeccionar su código sin instalar " +"ni iniciar Electron ." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Su agente descarga los archivos y entrega la carpeta desempaquetada a REA " +"para su inspección." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Descargar ZIP de ejemplo{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Si su agente no puede descargar archivos, descomprímalo usted mismo. Dale el" +" camino al {ph0} carpeta y la misma pregunta de exportación." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Siga la respuesta de regreso al código" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Busque una breve explicación con referencias de archivos y líneas:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"El botón envía un {ph0} mensaje. El proceso principal formatea las notas " +"como CSV y escribe {ph1} en la carpeta de descargas del usuario. Las " +"columnas son {ph2} y {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Del botón al escritor de archivos" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"El análisis estático de REA empareja el mensaje con su controlador. El " +"destino se lee del código." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"La ruta del archivo, el formateador y la llamada de escritura están juntos " +"en este controlador. Pídale a su agente que muestre estas líneas si su " +"respuesta las omite." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" +"{ph0}Vea el rastreo completo del código y el resultado registrado de " +"REA{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Comprobar una predicción" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Una coma separa las columnas CSV. ¿Qué sucede cuando el título de una nota " +"contiene una coma o comillas?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Ejecute el cheque usted mismo" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Abra una terminal en el desempaquetado {ph0} carpeta:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Este comando usa un shell compatible con here-document, como Bash o Zsh. Su " +"agente puede ejecutar el mismo JavaScript en el shell de su plataforma." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Haz otra pregunta" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Prueba un seguimiento en la misma conversación:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"¿Qué sucede si el archivo no se puede escribir? Siga el error de regreso a " +"la página." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"O dale a tu agente una aplicación propia y pregúntale sobre un botón, " +"archivo o comportamiento." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Cómo Notion copia texto y HTML{ph1}{ph2}Siga una función del " +"portapapeles en una aplicación Electron empaquetada.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Cómo calcula el DX-Ball el posicionamiento del sonido " +"estéreo{ph1}{ph2}Lea las instrucciones originales y las revisiones de la " +"reconstrucción.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Solucionar problemas de configuración o análisis{ph1}{ph2}Actualice REA" +" y verifique la conexión si se atasca.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Su Primera Investigación de Ingeniería Inversa-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Pruebe REA en una pequeña aplicación de notas. Configure su agente, pregunte" +" a dónde van las notas exportadas y verifique el formateador CSV con un " +"título de muestra." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "Su primera investigación sobre REA" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Copie el mensaje de instalación de REA" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Comando Copiar configuración" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Aviso de investigación de Copy Notes" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Copie el mensaje de verificación CSV" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Comando Copiar comprobación del formateador" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Inicio{ph1} / Empezar" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Configure REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Conecte REA a su agente de codificación o inspeccione una aplicación local " +"desde su terminal." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Abra una terminal y verifique:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Terminal" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows Carcasa de energía" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Escriba Y si se le pide que acepte los términos. Cierre PowerShell, ábralo " +"nuevamente y luego ejecute {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Si PowerShell dice más tarde {ph0}\"la ejecución de scripts está " +"deshabilitada en este sistema\"{ph1} cuando corres {ph2}, ejecute esto una " +"vez e inténtelo de nuevo:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Si usa Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "De lo contrario:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Cierre la terminal, ábrala de nuevo y luego:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"El instalador necesita {ph0} y {ph1} (en Debian / Ubuntu: {ph2}). Cierre la " +"terminal, ábrala de nuevo y luego:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Tu propia distribución {ph0} el paquete suele ser anterior a 22.19, así que " +"verifique {ph1} si lo usas en su lugar." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"¿Prefiere un instalador regular? Descargue la versión LTS desde " +"{ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Opciones de configuración" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Conecte a su agente de codificación{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Utilice el CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Configurar el análisis de programas de código máquina{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Cómo obtener ayuda{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Conecte a su agente de codificación" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Ejecute el programa de instalación para conectar REA a su agente de " +"codificación. Las opciones de cliente incluyen Claude Code, Codex, Cursor, " +"Gemini CLI, Windsurf, Grok Build y otros clientes MCP compatibles. El " +"conector de Grok Bot se agrega desde su chat." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "¿Eres nuevo en los agentes de codificación?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Un agente de codificación es un asistente de IA que funciona en su " +"computadora en lugar de en una pestaña del navegador. Puede leer archivos y " +"ejecutar comandos, y pregunta antes de realizar cambios. REA le brinda " +"herramientas de ingeniería inversa." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Si aún no tiene uno, elija uno, siga su página de instalación e inicie " +"sesión:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code {ph2}{ph3} por Anthropic . Necesita un plan Claude de" +" pago." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex {ph2}{ph3} por OpenAI . Inicie sesión con su cuenta de " +"ChatGPT." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode {ph2}{ph3}, código abierto. Conecte al proveedor de " +"modelos de su elección." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Luego ábralo y copie el mensaje a continuación en él. El agente ejecuta la " +"configuración de REA y le muestra el plan antes de cambiar nada." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "O ejecute la configuración usted mismo" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "¿Cómo abro una terminal?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} abra el menú Inicio, escriba {ph2}Potencia Shell{ph3} y" +" presione Entrar." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} prensa {ph2} {ph3}, tipo {ph4}Terminal{ph5} y presione " +"Entrar." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0} Linux :{ph1} prensa {ph2} {ph3} {ph4} en la mayoría de los " +"escritorios." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Pegue un comando con {ph0} {ph1} ( macOS : {ph2} {ph3}; Terminales Linux: " +"{ph4} {ph5} {ph6}), luego presione Entrar." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Elija su cliente y revise el plan de configuración. REA agrega su conexión " +"MCP y la habilidad de investigación correspondiente, manteniendo una copia " +"de seguridad de la configuración existente. Pregunta antes de aplicar los " +"cambios." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Reinicie su cliente cuando finalice la configuración." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "¿Cómo reinicio mi cliente?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Aplicaciones de escritorio{ph1} (Escritorio Claude, Cursor , Windsurf ," +" VS Code): salga de la aplicación por completo y luego ábrala nuevamente. " +"Cerrar la ventana no es suficiente. En prensa macOS {ph2} {ph3}; en Windows," +" también salga del icono de la bandeja, si lo hay." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Agentes terminales{ph1} ( Claude Code, Codex, Gemini CLI ): salga de la" +" sesión y vuelva a iniciarla." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Dale a tu agente una ruta objetivo y una pregunta específica. Para una " +"aplicación JavaScript o Electron, puede comenzar con:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Mira {ph0} y descubra cómo exporta datos. Muestre los puntos de entrada, las" +" llamadas y las dependencias involucradas, con las ubicaciones de origen de " +"sus hallazgos." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Reemplace la ruta con su objetivo local." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "¿Cómo obtengo la ruta completa de una carpeta?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} en el Explorador de archivos, haga clic con el botón " +"derecho en la carpeta y elija {ph2}Copiar como ruta{ph3}. En Windows 10, " +"mantenga presionada la tecla Mayús mientras hace clic con el botón derecho." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} en Finder, haga clic con el botón derecho en la carpeta, " +"mantenga presionada la opción y elija {ph2}Copie \"\"\" como nombre de " +"ruta{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Cualquier sistema:{ph1} arrastre la carpeta a una ventana de terminal y" +" aparecerá su ruta." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" +"En una terminal, coloque comillas alrededor de una ruta que contenga " +"espacios." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Utilice el CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Analice una carpeta de aplicación JavaScript o Electron o un archivo ASAR " +"sin ejecutar la aplicación:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Análisis estático de aplicaciones" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Reemplace la ruta con el directorio de la aplicación extraída o {ph0} " +"archivo. En Windows, una ruta como {ph1} trabaja aquí." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "¿Dónde encuentro una aplicación?¿archivo asar?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "" +"Las aplicaciones Electron generalmente lo mantienen en un {ph0} carpeta:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (haga clic con el botón derecho en la aplicación y " +"elija {ph3}Mostrar Contenido del Paquete{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} a menudo {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Algunas aplicaciones se instalan en otro lugar. Busque en la carpeta de la " +"aplicación {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"El resultado identifica la aplicación, muestra las conexiones entre los " +"módulos y proporciona sus ubicaciones de origen. Las conexiones REA que no " +"se pueden resolver están marcadas en el resultado." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Si desea un permanente {ph0} comando en tu shell:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Instale el CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Continúe con la guía de aplicación del JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Configurar el análisis de programas de código máquina" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Los programas de código máquina necesitan una herramienta de análisis local." +" Elija y configure uno a continuación, luego proporcione a REA su ejecutable" +" o biblioteca." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Elija una herramienta: Ghidra, Hopper o IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Utilice un Ghidra 12.1 existente.instalación x y un JDK 21 de 64 bits o " +"posterior en Linux o macOS, en x64 o arm64. Su instalación de Ghidra " +"necesita un descompilador nativo para su arquitectura de host. Establezca " +"las rutas antes de ejecutar la configuración:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Conecte su instalación de Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Conexión Ghidra * macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Reemplace ambas rutas con sus instalaciones existentes. El programa de " +"instalación los verifica y registra la configuración válida para el cliente " +"seleccionado. En Linux arm64, es posible que deba compilar el descompilador " +"nativo de Ghidra por separado." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Conecte Ghidra en Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 tiene soporte experimental de solo lectura para aplicaciones x86" +" y x64 PE nativas y DLL en unidades NTFS locales fijas. Utilice un Ghidra " +"12.1 existente.instalación de x y un JDK 21 de 64 bits o más reciente:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Conexión Ghidra · Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Reemplace las dos rutas con sus instalaciones, luego revise el plan de " +"configuración." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Conecte Hopper en macOS o Linux . Ejecute el comando de instalación " +"anterior; detecta una instalación existente u ofrece un plan de instalación " +"para su aprobación." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"En macOS , complete la opción de primera ejecución de Hopper de modo de " +"demostración o activación de licencia antes de un análisis desatendido." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"Las configuraciones verificadas de IDA usan Windows, con un registro MCP " +"existente para una GUI adjunta o una base de datos sin cabecera. El " +"análisis sin cabeza Linux y macOS permanece sin verificar." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Conecte un registro IDA MCP existente" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Mantenga el servidor ascendente funcionando {ph0}, {ph1} y opcional {ph2} en" +" un archivo JSON. Un existente {ph3} objeto con un {ph4} también se acepta " +"la entrada. Apunte REA a ese archivo antes de la configuración:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "Conexión IDA · Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"El perfil adjunto utiliza herramientas legacy 1.4.0 ascendentes con el " +"binario original ya abierto en IDA . El perfil sin cabeza utiliza la API de " +"supervisor de base de datos ascendente y un registro con {ph0}; la " +"verificación real cubre un supervisor IDA 9.3 Windows x64. El médico " +"verifica el registro sin iniciar IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Asigne a REA la ruta ejecutable original, con {ph0} en una consulta CLI. " +"Para un agente, incluya {ph1} en el entorno del registro REA y seleccione " +"IDA al abrir el binario." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "Para una configuración Ghidra existente, inspeccione una función con:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Análisis de funciones" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "" +"Reemplazar {ph0} con el nombre de la función o la dirección que desea " +"inspeccionar." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "" +"Cómo funcionan las sesiones de análisis de programas de código máquina" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Cada comando CLI importa y analiza el binario, luego cierra su sesión. Las " +"consultas MCP de su agente reutilizan el binario importado mientras esa " +"sesión está abierta." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Siga un ejemplo de análisis de programas de código máquina{ph1} para " +"ver cómo el resultado de la función conduce a un cálculo recuperado." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Cómo obtener ayuda" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Si su agente no ve REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Reinicie o vuelva a conectar el cliente después de la configuración. " +"Compruebe su conexión REA con {ph0}; para Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Compruebe un cliente" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Si un proveedor necesita atención" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Verifique el proveedor que está usando. Para Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Consulte a un proveedor" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" +"El informe proporciona la verificación fallida y un siguiente paso sugerido." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} Preguntas FRECUENTES SOBRE REA{ph1}{ph2}Respuestas rápidas sobre " +"actualizaciones, agentes y análisis.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Elija una guía de investigación{ph1}{ph2}Ejemplos trabajados para un " +"binario, una aplicación Electron y un navegador.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Problemas de GitHub{ph1}{ph2}Informe de un problema con el comando y " +"los diagnósticos.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} Comunidad REA{ph1}{ph2}Preguntas, investigaciones y trabajo en " +"progreso.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Instale REA y Configure Su Agente de Codificación" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Conecte REA a su agente de codificación o inspeccione una aplicación " +"JavaScript o Electron local desde la terminal. Configuración, primeras " +"preguntas y guías nativas para proveedores." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Copiar comprobación de la versión Node.js" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Copie el comando de instalación de Node.js para Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Copie el comando de política de ejecución de PowerShell" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Copie el comando de instalación Homebrew Node.js" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Copie el comando de instalación fnm para macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Copie los 24 comandos Node.js para macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Copie el comando de instalación fnm para Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Copie los 24 comandos Node.js para Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "Guía de introducción al REA" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Copie el mensaje de instalación de REA" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Comando Copiar configuración del agente" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Copie el comando de análisis JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Copie el comando de instalación de CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Copie la conexión ghidra * macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Copie la conexión Ghidra para Windows PowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Copie la conexión IDA para Windows PowerShell" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Copiar comando de análisis de funciones nativas" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Copie el comando de diagnóstico del cliente" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Copie el comando de diagnóstico del proveedor" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Inicio{ph1} / {ph2}Guías{ph3} / Observación del navegador" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Vea lo que sucede{ph0}cuando haces clic." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Use una pequeña aplicación de navegador para conectar una acción, su " +"solicitud de red y el JavaScript que genera una descarga." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "En esta guía" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}El ejemplo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Abra el navegador{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Pregúntele a su agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Captura desde CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Lea la solicitud y el script{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "¿Qué sucede cuando haces clic en Exportar?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"El {ph0}Ejemplo de navegador de notas{ph1} tiene un {ph2}Notas de " +"exportación{ph3} botón. Al hacer clic en él, se carga {ph4}, formatea las " +"dos notas como CSV e inicia una descarga ." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Del clic a la descarga de CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * Tú{ph1}{ph2}Haga clic en Exportar notas{ph3}{ph4}Realice la acción" +" en su navegador mientras se ejecuta la captura.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA {ph1}{ph2}Registre la solicitud{ph3}{ph4}Capture la URL de la " +"solicitud, el estado de la respuesta y la estructura JSON de la página " +"seleccionada.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * Su agente{ph1}{ph2}Lea el código de exportación{ph3}{ph4}Conecte " +"la solicitud observada a {ph5} en {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Inicie la captura antes de hacer clic en Exportar notas." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Abra Chrome con depuración remota" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Abra el ejemplo de Hosted Notes con un perfil de navegador independiente y " +"un puerto de depuración local. En Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Inicie el navegador de ejemplo" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Copiar" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Utilice la ruta ejecutable de su navegador instalado en macOS o Windows . " +"Puede reemplazar la URL de la página con otra página que desee inspeccionar." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA se conecta a este navegador existente. Usted mantiene el control de la " +"página, realiza la acción y cierra el navegador cuando termina." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Pídale a su agente que vea una acción" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para inspeccionar esta página mientras hago clic en " +"Exportar notas. ¿Qué solicitud hace y cómo se construye el " +"CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Mensaje de ejemplo. Proporcione a su agente el punto final de depuración, " +"{ph0}, y la URL de la página. Deje que inicie la captura antes de hacer " +"clic." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Su agente descubre el destino de la página, abre una ventana de observación " +"y lee la evidencia resultante. Luego puede inspeccionar el script detrás de " +"la exportación." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "O captura desde la terminal" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Encontrar el ID de destino de la página:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Encuentra la página" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Elija el destino con la URL de ejemplo de Notes. Reemplazar {ph0} abajo con " +"su ID, luego ejecute:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Captura los siguientes diez segundos" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Deje que el comando se conecte durante unos segundos y luego haga clic en " +"{ph0}Notas de exportación{ph1} en ese navegador. El resultado llega después " +"de que finaliza la ventana de observación." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"El resultado capturado incluye la página seleccionada, la actividad de la " +"red durante esa ventana y la forma de la respuesta JSON. Las solicitudes " +"anteriores están fuera de esta captura." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Leer el script de solicitud y exportación" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Grabado con REA 4.1.0 en el ejemplo de notas locales" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Hecho capturado" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Valor" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Solicitud" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Respuesta" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Iniciador de la solicitud" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * guión" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Estructura de respuesta" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} con {ph1} y {ph2} campos" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Leer los scripts cargados" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"La solicitud identifica el origen de datos y los registros REA {ph0} como su" +" iniciador. Lea la fuente de script capturada para ver cómo se utilizan los " +"datos:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"La descarga se construye en la página utilizando la respuesta JSON. El paso " +"de formateo CSV proviene del script; la captura de red establece que se " +"solicitó este clic {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Busque el script que solicita {ph0}. ¿Cómo se escapa de los títulos que " +"contienen comas o comillas?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Para una aplicación JavaScript o Electron instalada, continúe con la " +"{ph0}flujo de trabajo de la aplicación{ph1} para seguir los límites de " +"archivos y procesos." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Análisis de Navegadores y Redes-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Observe una exportación de notas con REA: seleccione una página del " +"navegador, capture un clic, inspeccione la solicitud y siga el script de " +"exportación." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Observación del navegador" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Copie inicie el navegador de ejemplo" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Copie el mensaje de ejemplo" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Copiar buscar la página" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Copia captura los siguientes diez segundos" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Copiar leer los scripts cargados" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Inicio{ph1} / Guías" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "Guías REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Analice una función nativa, una exportación Electron o una solicitud del " +"navegador. Cada guía incluye un mensaje, código y resultados." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Primera investigación" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Configurar REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Conecte su agente de codificación o use REA desde la terminal." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Comience con REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Programas de código máquina" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Recuperar un cálculo de la posición del sonido izquierda/derecha" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Comience con un ejecutable de juego Windows. Inspeccione las instrucciones, " +"siga a la persona que llama, lea las constantes numéricas y verifique la C " +"recuperada." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Guía de análisis de programas de código máquina" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript y Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Siga una exportación de CSV" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Una pequeña aplicación de notas distribuye una función en el renderizador, " +"la precarga y el proceso principal. Utilice REA para conectar la API, el " +"canal IPC y el escritor de archivos." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "Guía JavaScript y Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Para obtener una aplicación empaquetada más grande, siga {ph0} Puente del " +"portapapeles de Notion{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Comportamiento del navegador" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Observar un clic" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Abra un ejemplo de notas de trabajo, capture una solicitud de exportación y " +"busque el código que convierte su respuesta en una descarga." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Guía de observación del navegador" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Guías de Ingeniería Inversa-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Aprenda REA a través de breves ejemplos trabajados: un cálculo nativo, una " +"exportación Electron CSV y una solicitud del navegador." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}Inicio{ph1} / {ph2}Guías{ph3} / JavaScript y Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Rastrear un Electron {ph0} Exportación CSV." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Haga clic en un botón desde la API de la página, a través de Electron IPC, " +"hasta el escritor de archivos CSV." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "En esta guía" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}El ejemplo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Pregúntele a su agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Rastrear el código de exportación{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Prueba el ejemplo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Inspeccione la grabadora CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "¿A dónde van las \"Notas de exportación\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Esta guía utiliza una pequeña aplicación Electron. Haciendo clic {ph0}Notas " +"de exportación{ph1} llama a una API en la página, cruza al proceso principal" +" y escribe un CSV . El comportamiento se distribuye en varios archivos." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "La exportación CSV a través de procesos Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Renderizador → precarga{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} llama a la API " +"expuesta por {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Entre procesos{ph1}{ph2}{ph3}{ph4}{ph5}La precarga invoca un canal IPC:" +" un mensaje con nombre para el proceso principal.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Proceso principal{ph1}{ph2}Un manipulador de " +"exportaciones{ph3}{ph4}{ph5} maneja ese canal y llama al escritor CSV.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} formatea las notas → {ph1} escribe {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA hace coincidir la llamada IPC literal con su controlador e identifica la" +" API expuesta. La ruta se infiere del código; una captura en tiempo de " +"ejecución puede verificar qué se ejecuta." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Pregunte por la exportación CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Conecte a su agente a REA {ph1} y asígnele el directorio de la " +"aplicación o el archivo ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para averiguar qué sucede cuando exporto notas en " +"esta aplicación. ¿Dónde se crea el CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "" +"Mensaje de ejemplo. Incluya la ruta absoluta a la carpeta de la aplicación o" +" {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA lee los archivos de la aplicación y crea un mapa de puntos de entrada, " +"módulos y límites de procesos. Su agente usa ese mapa para limitar la " +"investigación a la función de exportación." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Rastrear el código de exportación" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "La página llama a una pequeña API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"La página conoce el nombre del método. La implementación vive en la " +"precarga, que la expone al renderizador." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"Registros REA {ph0} y el canal literal {ph1}. Empareja esa invocación con el" +" único controlador coincidente en el proceso principal." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"Leer el controlador responde a la pregunta original: {ph0} formatea las " +"notas y el proceso principal escribe {ph1} en la carpeta de descargas del " +"usuario." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Grabado por REA 4.1.0 en el ejemplo descargable a continuación. Las " +"ubicaciones de origen acompañan a los hallazgos de la API, el canal y el " +"controlador." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Analice el ejemplo usted mismo" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Descargar ZIP de ejemplo{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Explore los seis archivos fuente" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Análisis estático de aplicaciones" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Reemplace la ruta con la carpeta que descomprimió. Debería encontrar un " +"canal IPC y un controlador coincidente en {ph0}. Las ubicaciones de origen " +"están en {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Para su propia aplicación, use el mismo comando con su directorio o ruta " +"ASAR. Un agente puede seguir una cadena literal, un nombre de API o un canal" +" IPC con las herramientas de rastreo de funciones de REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Inspeccione la grabadora CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Sigue {ph0} a su manejador. ¿Qué entradas llegan al escritor CSV y qué " +"sucede si falla la escritura del archivo?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Utilice las ubicaciones de origen para inspeccionar esos detalles. Los " +"nombres de canal calculados y los controladores ambiguos pueden permanecer " +"sin resolver; las observaciones en tiempo de ejecución le brindan otra forma" +" de investigarlos." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Siga el puente del portapapeles de Notion{ph1} {ph2}Aplique el mismo " +"enfoque a una aplicación Electron empaquetada.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Observar una exportación del navegador{ph1}{ph2}Capture un clic real y " +"vea qué solicitud realiza.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Sigue una función nativa{ph1}{ph2}Continúe en binario cuando una " +"característica dependa del código nativo.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "Análisis de JavaScript y Electron-REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Rastree una exportación de Notes CSV a través de una API de renderizador, " +"precarga y controlador IPC con REA . Incluye archivos de ejemplo " +"descargables y un resultado de análisis verificado." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript y Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Copie el mensaje de ejemplo" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Copiar análisis de aplicaciones estáticas" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Inicio{ph1} / {ph2}Guías{ph3} / Análisis de programas de código máquina" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "" +"Recuperar DX-Ball 's{ph0}cálculo de la posición del sonido izquierda / " +"derecha." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Inspeccione las instrucciones originales, identifique la entrada y las " +"constantes, luego verifique la C recuperada." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "En esta guía" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}El ejemplo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Pregúntele a su agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Lea los resultados del REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Recuperar y comprobar{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Usa tu propio binario{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Calcular el posicionamiento del sonido estéreo izquierdo/derecho" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"En DX-Ball, un golpe de ladrillo proporciona una posición horizontal de la " +"pantalla. El código de sonido lo convierte en un valor de panorámica " +"izquierda / derecha." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"La función de inicio, {ph0}, tiene un resultado corto del descompilador: una" +" llamada a {ph1}. REA también devuelve sus instrucciones y llamadas, que le" +" dan al agente una forma de investigar la aritmética faltante." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "¿Eres nuevo en estos términos?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Instrucciones:{ph1} los pasos que ejecuta el procesador, que se " +"muestran en forma legible, como {ph2} o {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Resultado del descompilador / pseudocódigo:{ph1} el intento de una " +"herramienta de análisis de volver a convertir las instrucciones en código " +"tipo C. Puede perder partes, como en este ejemplo." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Llamador:{ph1} una función que llama a esta. Muestra qué valores se " +"pasan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Dirección:{ph1} una ubicación en el programa, escrita en hexadecimal, " +"como {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Constantes:{ph1} números fijos almacenados en el programa, leídos como " +"bytes sin procesar y decodificados." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Tres pruebas, un cálculo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * Instrucciones{ph1}{ph2}Una entrada entera{ph3}{ph4}Una lectura de " +"pila proporciona el valor utilizado por las instrucciones de coma " +"flotante.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * Llamador{ph1}{ph2}Una coordenada de pantalla{ph3}{ph4}El llamador " +"golpeado por un ladrillo pasa {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * Bytes de datos{ph1}{ph2}Las constantes " +"numéricas{ph3}{ph4}Decodificación de bytes referenciados a {ph5}, {ph6} y un" +" valor de escala.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA proporciona las instrucciones, la relación función-llamada y los bytes. " +"El agente los interpreta juntos." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Pregunte sobre el comportamiento" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Después {ph0}conectando REA a su agente{ph1} y {ph2}configuración de una " +"herramienta de análisis de programas de código máquina{ph3}, proporcione el " +"ejecutable local y una pregunta:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "¿Qué herramienta de análisis debo usar?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA necesita uno de estos para leer programas nativos:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} ( macOS o Linux): La configuración de REA lo detecta u " +"ofrece instalarlo. En macOS , abra Hopper una vez y elija el modo de " +"demostración o active una licencia antes de su primer análisis." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} ( macOS o Linux; experimental en Windows): gratis, pero " +"necesita un Ghidra 12.1 existente.x instalación y un JDK 21 de 64 bits o más" +" reciente." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA {ph1} ( Windows ): para una configuración IDA existente con un " +"registro MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Véase {ph0}Configurar el análisis de programas de código máquina{ph1} para " +"los pasos." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para averiguar cómo DX-Ball calcula el " +"posicionamiento del sonido estéreo. Explique el cálculo y muestre el " +"código.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Mensaje de ejemplo. Proporcione a su agente la ruta al ejecutable local de " +"DX-Ball 1.07. REA no incluye DX-Ball, así que use su propia copia o haga el" +" mismo tipo de pregunta sobre otro pequeño programa Windows que tenga." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "¿Cómo obtengo la ruta completa de un archivo?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} en el Explorador de archivos, haga clic con el botón " +"derecho en el archivo y elija {ph2}Copiar como ruta{ph3}. En Windows 10, " +"mantenga presionada la tecla Mayús mientras hace clic con el botón derecho." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} en Finder, haga clic con el botón derecho en el archivo, " +"mantenga presionada la opción y elija {ph2}Copie \"\"\" como nombre de " +"ruta{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Cualquier sistema:{ph1} arrastre el archivo a una ventana de terminal y" +" aparecerá su ruta." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Lea los resultados del REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Lea la entrada" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Las instrucciones cargan un argumento entero y lo convierten para aritmética" +" de coma flotante. Esta es la entrada ausente en la primera vista de " +"pseudocódigo." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Siga a la persona que llama" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA identifica a la persona que llama al golpe de ladrillo. Sus " +"instrucciones anteriores multiplican la coordenada del mosaico por 30; " +"sumando {ph0} (20) da la posición de la pantalla del ladrillo." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Lee las constantes a las que se hace referencia" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"La aritmética hace referencia a estas direcciones. La lectura de los bytes " +"proporciona los valores reales; el orden de instrucción le dice al agente " +"cómo se usan." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Escriba y verifique la función recuperada" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"Con una escala de 1.0, las posiciones de pantalla 0, 320 y 640 se asignan a " +"-500, 0 y 500 antes de la conversión de enteros. El cálculo coloca el centro" +" de la pantalla en el centro del campo estéreo." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"El agente utilizó los hallazgos de REA para escribir el C. Comprobaciones " +"separadas compararon 3205 entradas con la función x86 original y " +"reprodujeron los 63 bytes compilados de la función completa." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "" +"{ph0}Vea la investigación completa y la comparación de assembly-to-C{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Pruébalo con tu propio binario" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Conecte un proveedor de análisis de programas de código máquina{ph1}, " +"luego proporcione a su agente un ejecutable o biblioteca local y una función" +" para investigar . Las preguntas iniciales útiles incluyen \"¿ Cómo se " +"analiza este archivo?\"o\" ¿Qué función maneja esta acción de menú?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Si ya conoce el nombre o la dirección de una función, puede consultarla " +"desde el terminal. Para una instalación Ghidra configurada:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Análisis de funciones" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Reemplace la ruta de destino y {ph0} con su propio nombre de función o " +"dirección. Cada invocación CLI importa y analiza el binario, luego cierra su" +" sesión. Las consultas MCP de su agente reutilizan el binario importado " +"mientras esa sesión está abierta." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Lea el pseudocódigo junto con las instrucciones y referencias. Cuando un " +"resultado deja una llamada o un valor sin resolver, use esa ubicación como " +"la siguiente pregunta." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Análisis Binario Nativo-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Recupere un cálculo nativo con REA: inspeccione instrucciones, siga a una " +"persona que llama, lea constantes y verifique C reconstruido." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Análisis de programas de código máquina" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Copie el mensaje de ejemplo" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Análisis de la función de copia" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Configurar REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Configurar REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}¿Qué es RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Cómo ayuda REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Juego de dinosaurios{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Calculadora{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Prueba REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Profundiza{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Ayuda y comentarios{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Comunidad{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Ingeniería inversa, con su agente de codificación" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Descubre cómo{ph0}funciona el software." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA le da a tu agente de programación las herramientas para examinar un " +"programa y explicar qué hace." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "¿Ya conoces RE? {ph0}Saltar a guías de análisis →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "¿Quieres profundizar? {ph0}Leer el Blog →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Copia este prompt en tu agente de programación:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Copiar" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "O ejecuta esto en la terminal:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "Revisa y aprueba los cambios propuestos. Después, reinicia tu agente." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "¿Qué es la ingeniería inversa?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Entender cómo funciona el software {ph0}examinando el propio programa.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"El objetivo: comprender una característica lo suficientemente bien como para" +" {ph0}explícalo{ph1}, {ph2}cámbialo{ph3} o {ph4}reconstrúyelo.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "Antes de REA · Lo investigas {ph0}por tu cuenta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Decodificar ramas" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Rastrear llamadas" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Recuperar la regla" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Original x64 * instrucciones seleccionadas{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * ¿Qué sucursal?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}¿0x5b? ¿0x5c?{ph1} Dos saltos al mismo lugar. ¿Qué operadores son " +"estos?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Busque los ID de comando y luego etiquete la rama." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Divide ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Multiplicar ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · ¿Qué hacen las funciones llamadas?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 está claro. Las llamadas son solo direcciones. {ph0}¿Cuál divide? ¿Qué" +" valor entra?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "" +"Inspeccione las funciones auxiliares y rastree los valores almacenados." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Divide" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * ¿Cuál es la regla?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Esta ruta se multiplica por la otra entrada. Entonces {ph0}10% significa " +"10% de 200{ph1} después de +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "" +"Asigne un nombre a los operandos y verifique ambas rutas de operadores." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Razonamiento experto ilustrativo" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Decodifica las instrucciones, sigue las llamadas a funciones y " +"reconstruye el cálculo.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "Con REA · Le preguntas a {ph0}tu agente{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Un solo prompt." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Pregúntale a tu agente {ph0}con palabras normales.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ejemplo de indicador * Calculadora" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Respuesta de ejemplo * basada en los hallazgos" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "" +"Después de +, el botón % toma {ph0}un porcentaje del primer número.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA proporciona" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Instrucciones del manejador, código descompilado y llamadas." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Tu agente explica" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "Qué rama se aplica, qué calcula y cómo reconstruirla." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Ensamblado seleccionado de la DLL de la calculadora instalada. Los " +"pensamientos y la respuesta ilustran los hallazgos. {ph0}Continúe con el " +"ejemplo de la Calculadora ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Probemos con dos ejemplos.{ph1} Cambia la velocidad de un juego, luego " +"regresa a la Calculadora y reconstruye su botón%." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Ejemplo 01 * Juego de dinosaurios de Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "¿Por qué el dinosaurio va cada vez más rápido?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Objetivo" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Reconstruye el juego con {ph0}velocidad ajustable.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "¿Por qué realizar ingeniería inversa?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Para reproducir su aceleración, necesitamos {ph0}la regla en el juego " +"terrestre{ph1}: qué tan rápido comienza, cuánto aumenta y cuándo se detiene." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Juega a la reconstrucción" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Jugar" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Saltar ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Reiniciar" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Velocidad" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Utilice la regla de aceleración recuperada" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Regla original: comience en 6, luego aumente hacia 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Mueva el control deslizante para establecer su propia velocidad. Espaciar o " +"saltar despeja un cactus." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Habilite JavaScript para reproducir la reconstrucción. El código y la " +"explicación anteriores siguen siendo legibles." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA devolvió" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}El script que realmente se ejecuta en la página.{ph1} El agente lee su " +"función de actualización y la configuración de velocidad, luego usa esa " +"regla en un nuevo juego." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ejemplo rápido * Juego de " +"dinosaurios" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilice REA para inspeccionar este juego de dinosaurios. " +"¿Por qué se vuelve más rápido? Muestre la regla de velocidad, luego cree una" +" versión pequeña con una velocidad ajustable.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Objetivo inspeccionado: {ph0}edición de navegador derivada de Chromium de " +"wayou{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Comience a las 6.{ph1} Añadir {ph2}0.001{ph3} cada actualización sin " +"colisión, mientras que la velocidad es inferior {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Abra el laboratorio de velocidad →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Qué hace cada parte" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 * REA {ph1}{ph2}Lee el guión del juego de carrera{ph3}{ph4}Devuelva " +"su código y configuración reales al agente.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * Su agente{ph1}{ph2}Vuelva a generar la regla, agregue un " +"control{ph3}{ph4}Usa la aceleración recuperada en un juego pequeño con un " +"control deslizante de velocidad.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * Tú{ph1}{ph2}Cambia la velocidad y juega{ph3}{ph4}Prueba la " +"aceleración original y luego elige tu propio ritmo.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Vea el script, las comprobaciones y cómo probar el análisis" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA inspeccionó la edición del navegador HTTP a través de una conexión de " +"depuración local y devolvió el archivo cargado {ph0}, incluyendo su fuente y" +" resumen." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Llamamos a la función de actualización del juego original en una " +"verificación controlada del navegador, con obstáculos y programación " +"automática deshabilitados. Después de 4.000 actualizaciones, la velocidad " +"era de 10,0; después de 10.000, era de 13,0, redondeado a un decimal." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"El nuevo minijuego mantiene esa regla de velocidad. Su código de dibujo, " +"salto y colisión es una pequeña implementación de enseñanza. {ph0}Abra el " +"laboratorio{ph1} para ver el nuevo código y ejecutar la misma comprobación " +"de velocidad." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Para inspeccionar el objetivo usted mismo, siga las instrucciones {ph0}pasos" +" de conexión del navegador{ph1} usando {ph2}la página del dinosaurio{ph3}. " +"Proporcione a su agente la URL de esa página y su punto final de depuración " +"local, luego copie el mensaje anterior." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Código de velocidad inspeccionado{ph1} · {ph2} Chromium Autores * " +"Licencia BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Ejemplo 02 * Calculadora Windows" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Recrea el botón % de la calculadora." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"Construye una pequeña calculadora que maneje {ph0}tanto + como × " +"correctamente.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"El mismo botón usa {ph0}reglas diferentes después de + y ×.{ph1} " +"Inspeccionamos la aplicación instalada para encontrar a qué número se aplica" +" el porcentaje." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Prueba el cálculo" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Restablecer" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% de 200 = 20. Entonces 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Ilustración interactiva de la regla de porcentaje inspeccionado." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Una rama se divide por 100. El otro también se multiplica por el primer" +" número.{ph1} El agente usa ambos para recrear el botón%." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Para este ejemplo, {ph0} y {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Solicitud de ejemplo * Reconstruir " +"el botón %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para inspeccionar el botón % de la calculadora " +"Windows. Recupere las reglas después de + y×, luego construya una pequeña " +"calculadora que use ambas.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Con +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Toma el 10% del primer número.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Con ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Convierta el 10% en 0.1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Desde la aplicación instalada hasta un botón % que funciona" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA lee la biblioteca{ph1}{ph2}Devuelve el código del controlador " +"% {ph3}{ph4}La función verifica el operador y usa la constante {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * Su agente lo interpreta{ph1}{ph2}Explicar y reproducir las " +"reglas{ph3}{ph4}Verifique la sucursal con la fuente de Microsoft, luego " +"intente + y × arriba.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Vea el código real y cómo se verificó la respuesta" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Inspeccionado con REA 4.1.0: Calculadora Windows 11.2508.4.0, x64. El " +"resumen legible usa nombres de la fuente pública de Microsoft para explicar " +"la rama recuperada." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Porcentaje de implementación{ph1} · {ph2}Casos de prueba de " +"Microsoft{ph3} · {ph4}Guía de configuración nativa{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Su primera investigación" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Pruebe REA en una aplicación pequeña." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Descargue nuestro ejemplo de Notes, rastree su exportación CSV y verifique " +"una entrada modificada." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Pruebe el ejemplo guiado" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "¿Quieres profundizar?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Dígale a su agente lo que quiere entender o construir. Con REA, pueden " +"trabajar juntos en cualquier cosa, desde {ph0}clonando este sitio web{ph1} " +"para {ph2}reconstruyendo un juego a partir de su ejecutable.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ejemplo de solicitud * Sitio web" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Sí, esta." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Mensaje de ejemplo * Reconstrucción " +"del juego" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Usa REA para reconstruir este juego a partir de su " +"ejecutable. Recupera la lógica de juego en C y pruébala con la " +"original.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Vea el estudio de caso de DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "Para los pasos de configuración y análisis, elija su objetivo:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Programas de código máquina" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Inspeccione funciones, cadenas, referencias y relaciones función-llamada en " +"ejecutables y bibliotecas." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Guía de análisis de programas de código máquina" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript y Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Asigne módulos, rutas, IPC y dependencias nativas desde una carpeta de " +"aplicaciones o un archivo ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Flujos de trabajo de aplicaciones" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Actividad del navegador y del tiempo de ejecución" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Capture la actividad seleccionada del navegador o del proceso y, a " +"continuación, compare los resultados entre ejecuciones." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Guía de observación del navegador" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "¿Tienes preguntas?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Lea las Preguntas frecuentes{ph1}, {ph2}chatee con nosotros en Discord " +"{ph3}, o {ph4}abrir un problema de GitHub{ph5} para errores y solicitudes de" +" funciones." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Únete a la comunidad" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Comparta investigaciones y obtenga ayuda de otros usuarios de REA en Discord" +" . Siga a REA en X para obtener actualizaciones del proyecto." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-Ingeniería Inversa para su Agente de Codificación" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Realice ingeniería inversa de aplicaciones, archivos binarios y " +"comportamiento del navegador con su agente de codificación. Siga guías " +"claras y pruebe ejemplos interactivos con REA ." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Copie el mensaje de instalación de REA" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Comando Copiar configuración" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Siga el análisis manual de la calculadora" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Copiar pregunta de porcentaje de la calculadora" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Minijuego de dinosaurios. Usa el botón de salto o presiona la barra " +"espaciadora mientras el juego está enfocado." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Copie el mensaje de análisis de dinosaurios" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Elija el cálculo" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Copie el mensaje de análisis de la calculadora" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Copie el mensaje del proyecto del sitio web" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Copiar mensaje de reconstrucción del juego" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Inicio{ph1} / {ph2}Vitrinas{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Caso práctico * Autenticador Aegis" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "" +"Cómo funciona un autenticador{ph0}¿generar un código de inicio de sesión?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Un código de seis dígitos cambia cada 30 segundos. Usa REA para encontrar el" +" cálculo en un APK de Android y luego reconstrúyelo con un reloj que puedas " +"controlar." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * Versión oficial APK * 6.9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Ver Aegis en GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "Desde un APK hasta un código que puedes reproducir" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * Localice la función{ph1}{ph2}3.077 clases → generación de " +"métodos{ph3}{ph4} REA busca en el paquete y rastrea el código utilizado por " +"las acciones de visualización y copia.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * Leer el cálculo{ph1}{ph2}Hora + clave de cuenta → seis " +"dígitos{ph3}{ph4} REA devuelve los métodos y valores predeterminados. El " +"agente explica cómo encajan.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * Reconstruir y comprobar{ph1}{ph2}Cambia el reloj. Mira el " +"código.{ph3}{ph4}Una nueva demostración del navegador reproduce la regla y " +"la compara con casos de referencia pública.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "En este estudio de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Pregúntele a su agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Pruebe el generador de código{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Encuentra el código con REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Lea el cálculo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Compruebe la reconstrucción{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Inspeccione el APK usted mismo{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Pregúntele a su agente" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"La aplicación muestra un código de inicio de sesión cambiante. Queremos " +"encontrar {ph0}qué lo hace cambiar{ph1} y reproduce ese comportamiento." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Un mensaje de ejemplo para el APK descargado, con el análisis de Android de " +"REA configurado. {ph0}Obtenga el APK y la configuración de análisis ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Pruebe el generador de código" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"La aplicación agrupa el tiempo en {ph0}bloques de 30 segundos.{ph1} Combina " +"el número de bloque con la clave de cuenta para generar un código. La misma " +"clave y bloque producen el mismo código." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Mueve el reloj 60 segundos" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Tiempo" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "segundos" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Nuestro reloj de ejemplo ajustable" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "bloque de 30 segundos" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Bloque" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 segundos{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Código generado" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Clave de cuenta + bloque → seis dígitos" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Tiempo de ejemplo, en segundos" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 segundos" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 segundos" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"A los 59 segundos: {ph0}287082.{ph1} A los 60 segundos: {ph2}359152.{ph3} " +"Moverse dentro de un bloque deja el código sin cambios." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"La clave es fija, pública {ph0}Datos de prueba RFC 6238{ph1}. La " +"demostración implementa el cálculo recuperado del APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"El diagrama muestra el resultado a los 59 segundos. Habilite JavaScript para" +" cambiar el reloj." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Encuentra el código con REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Reduzca el APK a tres clases" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} es el candidato de cálculo; los otros dos se refieren a la barra de " +"progreso y las cuentas importadas. TOTP significa una contraseña de un solo" +" uso basada en el tiempo." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Conecte el generador a la pantalla de la aplicación" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA identifica la sobrecarga de la marca de tiempo y encuentra a los " +"llamantes del método base. Inspección {ph0} luego muestra la pantalla " +"llamando {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Las solicitudes muestran una ruta de entrada acortada. Los nombres de clase " +"de resultado omiten lo común {ph0} prefijo." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Lea el cálculo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA devoluciones {ph0}la conversión del reloj, la configuración " +"predeterminada y los métodos de generación.{ph1} Los constructores " +"establecen un intervalo de 30 segundos y seis dígitos; el método de marca de" +" tiempo convierte los segundos en un número de bloque." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Bloque de tiempo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Tecla + bloque" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Seis dígitos" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}El tiempo elige el bloque.{ph1} Los segundos 30 a 59 dan todos el " +"bloque 1. A los 60 segundos, el bloque se convierte en 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}La clave también importa.{ph1} El generador combina la clave de cuenta " +"con el bloque. Una cuenta con una clave diferente puede mostrar un código " +"diferente al mismo tiempo." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Mantén seis dígitos.{ph1} El resto después de la división por 1.000.000" +" se rellena con ceros cuando es necesario, por lo que un código puede " +"comenzar con 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Extractos de varios métodos inspeccionados, con envoltura de línea para " +"mostrar. El panel de la derecha es un resumen explicativo. {ph0} El código " +"Aegis es GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Dentro del generador" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"El APK lanzado pone {ph0} en {ph1}. REA sigue la llamada de {ph2} y " +"devuelve este cuerpo; la fuente original llama al ayudante {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"El último byte hash selecciona una posición. Cuatro bytes en esa posición " +"proporcionan un número positivo de 31 bits; el formateo lo reduce al número " +"solicitado de dígitos. El último argumento del constructor selecciona la " +"rama de formato de código introducida por compilación." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Compare con la fuente de publicación correspondiente{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Compruebe la reconstrucción" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Ensamblamos los métodos Java devueltos por REA seleccionados en un pequeño " +"programa de prueba. Su producción coincidió con una reconstrucción " +"independiente en {ph0}133 casos de prueba{ph1}, incluidos los límites de los" +" bloques de tiempo y los códigos que comienzan con cero." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Tiempo de ejemplo" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Código de seis dígitos" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 segundos" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 segundos" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"El generador también coincide con los seis casos de referencia SHA-1 " +"publicados en {ph0}RFC 6238 (en inglés){ph1}. Compare la implementación del " +"navegador con ellos:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Ejecutar comprobaciones de referencia" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Lea el cálculo de la demostración" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"Los casos de referencia usan ocho dígitos. La verificación también verifica " +"sus resultados de seis dígitos." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"La verificación ejecuta métodos Java extraídos y la nueva demostración. El " +"Android APK fue inspeccionado estáticamente." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Inspeccione el APK usted mismo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Configurar REA {ph1} en macOS o Linux , descargue estos dos archivos en" +" la misma carpeta. En Windows, use un entorno Linux como WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"El análisis de Android necesita un JDK 17 completo o posterior. Selecciónelo" +" con {ph0} o {ph1}. Este caso usó JDK 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Apunte REA al archivo del proveedor e inspeccione el APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Su agente puede continuar a través del REA de CLI utilizando el mensaje " +"anterior. Para MCP , agregue {ph0} al entorno del servidor REA y vuelva a " +"conectarlo." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Una pregunta siguiente: {ph0}¿qué sucede cuando una cuenta usa ocho dígitos " +"o un intervalo de tiempo diferente?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Fuentes" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Lanzamiento oficial de Aegis 3.4.3{ph1} · {ph2}Confirmación de fuente " +"coincidente{ph3} · {ph4}Licencia GPL - 3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" +"{ph0}Casos de referencia RFC 6238{ph1} · {ph2}Datos de prueba de " +"demostración{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Inspeccionado con REA 6.1.0 el 9 de octubre de 2026. Los extractos " +"descompilados se acreditan a Aegis; el diagrama, el resumen legible y la " +"reconstrucción del navegador son nuevo material didáctico." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK Ingeniería inversa: Códigos de inicio de sesión-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Inspeccione el Aegis Android APK con REA, recupere su cálculo de código de " +"inicio de sesión de seis dígitos e intente una reconstrucción con un reloj " +"ajustable." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Estudio de caso Aegis APK" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Copie el indicador de ejemplo Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Siga el cálculo del código de inicio de sesión" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Copie el comando de inspección APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Inicio{ph1} / {ph2}Vitrinas{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Estudio de caso · DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Encuentra la bandera en{ph0}un binario CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Use REA para inspeccionar un pequeño verificador de indicadores, convertir " +"sus reglas en ecuaciones y encontrar una entrada que haga que se imprima el " +"programa original {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "" +"comprobador de banderas de cuadrados enmascarados * Fácil * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Ver el desafío original" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "De una respuesta binaria a una respuesta marcada" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * Encuentra el cheque{ph1}{ph2}Cadenas → funciones de " +"comprobación{ph3}{ph4} REA encuentra el indicador, sus referencias y el " +"código que acepta o rechaza una entrada.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * Extraer las reglas{ph1}{ph2}36 caracteres · 26 sumas{ph3}{ph4} REA" +" devuelve las instrucciones y los datos detrás de cada comprobación. El " +"agente los convierte en ecuaciones.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * Resuelve y corre{ph1}{ph2}Bandera recuperada → " +"¡Correcto!{ph3}{ph4}Un script de Python resuelve las ecuaciones. REA " +"captura el programa original aceptando el resultado.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"El desafío es de joseph, publicado en el repositorio oficial de " +"DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "En este estudio de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Encuentra el código de verificación{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Leer una máscara{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Ensamblado a código legible{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Resuelve las ecuaciones{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Revisa la respuesta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Pruébalo tú mismo{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Encuentra el código de verificación" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"El folleto es un ejecutable de 15 KB. Pide una bandera, luego imprime {ph0} " +"o {ph1}. Comience con una simple solicitud a su agente." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para analizar ms_flag_checker y encontrar el " +"indicador. Explique cómo funcionan las comprobaciones y luego verifique la " +"respuesta con el programa original.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Un mensaje de ejemplo, con el desafío descargado disponible localmente y un " +"análisis del proveedor de programas de código máquina conectado." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Siga el indicador de entrada a su función" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"La referencia le da al agente un lugar para investigar, aunque se hayan " +"eliminado los nombres de funciones originales del ejecutable." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Lea el corrector y sus dos ayudantes" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"El primer bucle copia códigos de 36 caracteres. El bucle de comprobación " +"decodifica una máscara, suma los códigos seleccionados y compara el " +"resultado con un número almacenado. Su {ph0}- pasos de bytes a través {ph1} " +"los bytes dan 26 máscaras." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Estos son resultados seleccionados de un análisis REA reciente. La ruta de " +"destino local se acorta para su visualización; las direcciones se refieren a" +" la imagen importada de REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Un cheque revela un carácter" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"El verificador organiza la entrada en una cuadrícula de 6×6. Una máscara " +"elige qué celdas contribuyen a una suma. Su codificación compacta utiliza " +"números negativos para omitir celdas y números positivos para " +"seleccionarlos." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" +"La séptima comprobación selecciona solo una posición. {ph0}Figura " +"abierta{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Lea la máscara y su objetivo desde el binario" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"La instrucción {ph0} lee bytes de máscara como valores firmados. Esta es la " +"razón {ph1} significa -21. El objetivo es un entero little-endian. Juntos, " +"estos bytes le dicen al agente que {ph2}, entonces ese personaje es {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "De las instrucciones a un cheque legible" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Seleccione un paso para conectar el ayudante de suma y su interlocutor a la " +"misma regla en C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Inicio" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Seleccione" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Añadir" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Avance" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Comparar" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * instrucciones originales seleccionadas" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Resumen legible de C * one-check" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * Comience en cero.{ph1} {ph2} contiene la suma corriente." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * Compruebe la celda de la máscara.{ph1} Un valor cero omite el " +"carácter; un valor distinto de cero lo incluye." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * Agregue un código de carácter.{ph1} El entero de la entrada en el " +"mismo desplazamiento se agrega a la suma." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * Pasar a la siguiente celda.{ph1} El bucle original avanza cuatro " +"bytes por entero y visita seis filas de seis celdas." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * Comparar con el objetivo almacenado.{ph1} La persona que llama " +"recibe la suma en {ph2}. Un desajuste salta a {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Las instrucciones provienen del ayudante de suma y de su persona que llama. " +"La C es un resumen explicativo con nombres descriptivos y un bucle aplanado " +"de 36 celdas." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Resuelve las 26 ecuaciones" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"La mayoría de las máscaras seleccionan varias celdas. Por ejemplo, la " +"primera verificación agrega códigos de 16 caracteres y requiere un total de " +"1441. Las selecciones superpuestas dan ecuaciones que un pequeño script de " +"Python puede resolver juntas." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Extracto de Python * solver" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 es un solucionador que encuentra valores que satisfacen estas ecuaciones." +" Este extracto usa los cheques extraídos y asume un {ph0} bandera con " +"letras, dígitos, guiones bajos y llaves. La descarga completa incluye las 26" +" máscaras y objetivos." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Descargue el solucionador completo" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Verifique la respuesta con el programa original" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"La captura de procesos de REA registra el ejecutable original aceptando el " +"indicador resuelto. Cambiar un carácter seleccionado de {ph0} para {ph1} " +"hace la primera suma 1440 en lugar de 1441, y el programa la rechaza." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Entrada" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Salida observada" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Código de salida" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Bandera del solucionador" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Un personaje cambió" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Mostrar el indicador recuperado y la salida capturada" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * salida del programa original" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Bandera de copia" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"El valor recuperado también coincide con la bandera en los metadatos de " +"desafío publicados por los organizadores, marcada después de resolver el " +"binario." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Detalles de origen, identidad de destino y análisis" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Análisis reciente y dos capturas de procesos el 8 de octubre de 2026, " +"utilizando REA 4.1.0 con Ghidra 12.1.4 en Linux x64. El binario es un ELF " +"x86-64 despojado, 15.248 bytes." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Las referencias de cadena, funciones y constantes se inspeccionaron antes de" +" leer la fuente o solución de los organizadores. El solucionador de Python y" +" el diagrama se construyeron a partir de esos resultados de REA." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Compare con la fuente de los organizadores{ph1} · {ph2}Metadatos de " +"desafío y bandera{ph3} · {ph4} Notas de evidencia REA{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Pruébalo tú mismo" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Descargue el desafío original y el solucionador en una carpeta. Utilice el " +"mensaje anterior para investigar con su agente o ejecute el script incluido." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Terminal * resuelve y ejecuta" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"El script imprime un indicador de candidato; péguelo en el indicador del " +"programa. Resolviendo necesidades Python y {ph0}. Ejecutar el ejecutable " +"original necesita Linux x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Configure REA con su agente de codificación" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "Ingeniería inversa CTF: Comprobador de banderas DownUnderCTF-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Use REA para resolver el verificador de banderas de cuadrados enmascarados " +"de DownUnderCTF. Encuentre las funciones de verificación, extraiga las " +"máscaras y compare un indicador recuperado con el programa original." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "Estudio de caso de CTF flag-checker" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Copie el mensaje de ejemplo de CTF" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "" +"Ecuación de máscara CTF; desplácese horizontalmente en pantallas más " +"pequeñas" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"La séptima máscara omite 21 celdas, selecciona la posición 21 y luego omite " +"14. Solo esa celda contribuye a la suma. Su código de carácter requerido es " +"55, lo que significa que el carácter es 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Siga la verificación CTF" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Copie la asamblea CTF" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Verificación CTF legible por copia" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Copiar extracto del solucionador CTF" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Copiar bandera recuperada" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Copiar comandos del solucionador CTF" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Inicio{ph1} / {ph2}Vitrinas{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Estudio de caso * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Reconstruyendo DX-Ball {ph0}desde su ejecutable." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"El objetivo es una versión C mantenible del juego Windows de 1996. REA " +"ayuda al agente a inspeccionar el original, una función a la vez." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 * C * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Una función, desde ejecutable hasta comprobada C. REA proporciona las " +"instrucciones, las personas que llaman y las lecturas de datos; el proyecto " +"de reconstrucción implementa y prueba el resultado. {ph0}Figura abierta{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "En este estudio de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}El proyecto{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Bandeja de sonido{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Comprobando el resultado{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Continuar el trabajo{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "funciones C mantenidas" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "comparaciones con el código original" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "funciones con bytes compilados coincidentes" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Punto de control del proyecto: 7 de octubre de 2026. {ph0}Libro de " +"progreso{ph1} · {ph2}Cobertura de la prueba{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "El proyecto hasta ahora" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"El código recuperado cubre el manejo de tableros y recursos, golpes de " +"ladrillos, animaciones, partículas y producción de bonificaciones. Las " +"compilaciones actuales proporcionan utilidades de inspección y una " +"biblioteca de análisis. El trabajo en el juego jugable continúa con la " +"física de la pelota y la paleta, el manejo del encendido y la integración " +"Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Encontrar el cálculo de la posición del sonido izquierda/derecha" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Cuando se golpea un ladrillo, su posición horizontal pasa al código de " +"sonido. La investigación necesaria para recuperar cómo esa coordenada de " +"pantalla se convierte en un valor de panorámica izquierda/derecha." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para averiguar cómo DX-Ball calcula el " +"posicionamiento del sonido estéreo. Explique el cálculo y muestre el " +"código.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Un mensaje de ejemplo para su agente de codificación, con el ejecutable " +"local disponible. La investigación a continuación muestra las consultas REA " +"y la evidencia detrás de la respuesta." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"El agente usó REA para inspeccionar la función, seguir a la persona que " +"llamó y leer las constantes del ejecutable. Esos resultados proporcionaron " +"la entrada y la aritmética necesarias para escribir la función C a " +"continuación." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"El resultado de la primera función para {ph0} declaración de pseudocódigo " +"incluida {ph1} y llamando {ph2}. Su vista de instrucciones mostraba una " +"entrada de pila y operaciones de coma flotante. Esa discrepancia le dio al " +"agente una razón concreta para seguir investigando." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "La primera vista del descompilador" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"La salida muestra una llamada de conversión. Al leer las instrucciones a " +"continuación, se revela la entrada y el cálculo que alimenta esa llamada." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Tres preguntas respondidas a través de REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Recuperar la entrada faltante" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"El resultado de la función incluye instrucciones junto con el pseudocódigo y" +" las personas que llaman. Aquí, {ph0} expone la entrada entera que falta en " +"la vista del descompilador." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Siga a la persona que llama para comprender la entrada" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA identificó a esta persona que llamó en el primer resultado. Su escala de" +" instrucciones anteriores {ph0} por 30; sumando 20 da la coordenada de la " +"pantalla del ladrillo, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Leer los valores detrás de las direcciones de memoria" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Los bytes devueltos establecen las dos constantes aritméticas y la escala " +"panorámica inicial. El agente ahora tiene los valores necesarios para la " +"expresión C." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "De los hallazgos de REA a C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Siga los cinco pasos a continuación. Cada selección resalta las " +"instrucciones originales y las líneas C que informaron." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Entrada" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Multiplicar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Restar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Escala" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Regreso" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Original x86 · extracto" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Reconstruido C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * Lea la entrada.{ph1} La vista de instrucciones en el resultado de " +"la función REA dice {ph2} y usos {ph3} para cargar el entero. Seguir a su " +"llamador a través de REA establece el significado de la coordenada de " +"pantalla del parámetro C {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * Multiplica por 1.5625.{ph1} {ph2} lee el doble en {ph3}. Los bytes" +" devueltos por REA {ph4} decodificar a {ph5}; la C usa la misma constante." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * Resta 500.0.{ph1} {ph2} lee el doble en {ph3}. El resultado de " +"bytes de REA se decodifica en {ph4}, cambiando el centro del cálculo a " +"coordenadas de pantalla {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * Aplique la báscula almacenada.{ph1} El segundo {ph2} lecturas " +"{ph3}. Ese global se llama {ph4} en la fuente mantenida. La lectura del " +"segundo byte de REA establece su valor inicial de {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * Devuelve un número entero.{ph1} La llamada al {ph2} alcances " +"{ph3}, identificado en los resultados de llamadas de REA. La C arroja el " +"resultado a {ph4}; original-las comparaciones x86 verifican el valor " +"devuelto." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"El extracto de la asamblea selecciona las instrucciones de entrada, " +"aritmética y retorno. La lista completa a continuación también incluye las " +"tiendas intermedias y la configuración y limpieza de funciones." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Montaje completo y pruebas de apoyo" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA resultado * 0x406400-0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Lo que suministra la persona que llama" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"La función de golpe de ladrillo en {ph0} escala su coordenada de mosaico en " +"30, agrega 20 y luego la empuja antes de la llamada:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Lo que establecen las lecturas de los datos" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "Lecturas de bytes REA, decodificadas como dobles little-endian" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Dirección" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Valor" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Utilizado para" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Primera multiplicación" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Resta" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} inicialmente" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Escala de pan almacenada" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Grabado con REA 4.1.0 para el objetivo DX-Ball 1.07 fijado con hash. Las " +"notas de investigación vinculadas conservan las identificaciones de las " +"pruebas." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Fuente mantenida{ph1} · {ph2}Notas de investigación y referencias de " +"evidencia{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Comprobando la función recuperada" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"La función recuperada pasa dos comprobaciones: sus valores de retorno " +"coinciden con el original y sus bytes compilados coinciden con el " +"ejecutable." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3.205 casos de conducta" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Las pruebas ejecutan la función x86 original y comparan su valor de retorno " +"con la C mantenida. Cubren cada posición entera de 0 a 640 en cinco escalas " +"panorámicas: 0, 0.5, 1, 20 y -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 bytes coincidentes" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"La función C se compila con la cadena de herramientas VC4.0 anclada. La " +"repetición del compilador coincide con la función completa después de " +"aplicar las reubicaciones revisadas y verificar las constantes a las que se " +"hace referencia." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"En una escala de 1, el cálculo recuperado devuelve -500 en el borde " +"izquierdo, 0 en el centro y 500 en el borde derecho. La siguiente parte del " +"trabajo de audio es integrar ese valor con el backend de sonido del juego." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Lea los detalles de la repetición del compilador{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Continuar la investigación" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"El mismo enfoque se está utilizando para las actualizaciones de partículas, " +"las colas de explosión y la generación de bonificaciones: inspeccione las " +"funciones relevantes, recupere su estado y dependencias, luego compare la " +"implementación con la original." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Para inspeccionar la función de panorámica de sonido usted mismo, siga las " +"instrucciones de configuración del proyecto DX-Ball y proporcione su " +"objetivo original correspondiente. Entonces corre:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "En la caja de DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} Repositorio DX-Ball{ph1}{ph2}Fuente actual, progreso y configuración " +"local.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} Flujo de trabajo de análisis REA{ph1}{ph2}Siga el cálculo, luego use " +"el mismo enfoque con su propio binario.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Partículas y producción de bonos{ph1}{ph2}Una investigación más amplia " +"sobre el estado, las colas y las escrituras de píxeles.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball Ingeniería inversa: Panorámica de sonido-REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Siga una reconstrucción DX-Ball desde el análisis binario hasta REA hasta C " +"mantenido, pruebas originales-x86 y bytes de funciones compiladas " +"coincidentes." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball investigación panorámica de sonido; desplácese horizontalmente en " +"pantallas más pequeñas" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.La función EXE 0x00406400 se inspecciona con REA . Una persona que " +"llama al golpe de ladrillo suministra 20 más 30 veces tile_x. Las " +"instrucciones cargan x, multiplican por 1.5625, restan 500.0, aplican " +"pan_scale y devuelven un número entero. El C mantenido se verifica de forma " +"independiente con el x86 original en 3205 casos y mediante la reproducción " +"del compilador VC4.0 que coincide con 63 bytes." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "Estudio de caso de reconstrucción DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Copie el mensaje de ejemplo" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Siga el cálculo de la posición del sonido izquierda/derecha" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Copiar extracto original de la asamblea" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Copiar función de panorámica de sonido" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Copie el ensamblaje completo de la bandeja de sonido" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Copie el comando de análisis DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Inicio{ph1} / Vitrinas" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "Estudios de caso de REA." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, juegos, Electron y un desafío CTF, con código, cifras y resultados " +"comprobados." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Análisis de Android * APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Cómo genera un autenticador un código de inicio de sesión" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Encuentre el cálculo del código de seis dígitos de Aegis en su APK " +"publicado. Rastree los métodos de generación con REA, luego mueva un reloj " +"de demostración para ver por qué el código cambia cada 30 segundos." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Lea el caso práctico de Android" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * Análisis de programas de código máquina" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Resolver un comprobador de banderas CTF" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Inspeccione un desafío fácil de DownUnderCTF con REA . Encuentre sus " +"funciones de verificación, convierta máscaras y sumas en ecuaciones, luego " +"verifique el indicador resuelto con el programa original." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Lea el estudio de caso de CTF" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Reconstrucción nativa ·" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "Cálculo de la posición del sonido izquierdo/derecho de DX-Ball" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Recupere un cálculo de la posición del sonido izquierdo/derecho de un juego " +"Windows de 1996. Las instrucciones de REA ,las referencias de las personas " +"que llaman y las constantes numéricas conducen a una pequeña función C, " +"comprobada con el comportamiento original y los 63 bytes compilados." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Lea el caso práctico de DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * Rastreo de funciones" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Cómo Notion copia texto y HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Rastree una API orientada a la página a través del Notion empaquetado de " +"JavaScript . Siga sus envoltorios IPC hasta el portapapeles del sistema, " +"luego vea cómo un pequeño marcador HTML mantiene los datos enriquecidos del " +"bloque conectados a una copia." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Lea el caso práctico de Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "Reconstrucción PC-98 DOS *" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Cómo TH04 apunta a un anillo de balas" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Inspeccione el ayudante de ángulo original de 16 bits con REA . Haga " +"coincidir sus operaciones de multiplicación, división y coordinación con C++" +" legible, luego vea cómo producen un anillo dirigido al jugador." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Lea el caso práctico de TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Guías paso a paso" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Las guías recorren un cálculo nativo, una exportación Electron y una " +"solicitud del navegador. Cada uno comienza con un mensaje y un objetivo " +"concreto." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Lea las guías" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Estudios de Caso de Ingeniería Inversa-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Siga las investigaciones de REA a través de código, figuras y " +"demostraciones: un autenticador de Android, DX-Ball, Notion, TH04 y un " +"comprobador de indicadores de DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Inicio{ph1} / {ph2}Vitrinas{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Estudio de caso * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Cómo copia Notion{ph0}texto y HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Rastree una llamada al portapapeles desde la API de la página de Notion, a " +"través de la precarga y el proceso principal, hasta el escritor del " +"portapapeles de Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Escritorio Notion 7.6.1 * JavaScript · REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "El puente dentro del paquete de escritorio de Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * API orientada a páginas{ph1} {ph2}{ph3}{ph4} {ph5}La precarga " +"expone un método invocable.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * Envoltura de precarga{ph1} {ph2}{ph3}{ph4} {ph5}El contenedor " +"envía el canal y los argumentos.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * Controlador de procesos principales{ph1} {ph2}{ph3}{ph4} {ph5}El " +"receptor verifica qué página lo envió.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * Portapapeles del sistema{ph1} {ph2}{ph3}{ph4} {ph5} Electron " +"escribe el texto y HTML suministrados.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Un canal une los dos lados: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"El código empaquetado usa el mismo canal en la precarga y el proceso " +"principal. Al resolver los contenedores, se revelan las llamadas Electron " +"detrás de esos nombres." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "En este estudio de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Sigue el puente del portapapeles{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Mantener la estructura de un bloque{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Más ejemplos y fuentes{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "¿A dónde va la operación de copia?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"La página ve un método llamado {ph0}. Su implementación en la precarga es un" +" wrapper. La pregunta útil es qué envía ese contenedor y qué código lo " +"recibe." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para rastrear cómo Notion copia texto y HTML en el " +"portapapeles del sistema. Muestre el código en cada paso.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Un mensaje de ejemplo con el paquete de aplicaciones locales de Notion " +"disponible para su agente de codificación." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA encuentra dónde comenzar a leer" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Al analizar la precarga de pestañas con REA, se localiza la API expuesta a " +"la página y la llamada que envía una solicitud IPC. Ambos hallazgos vienen " +"con rangos de origen en el paquete minimizado:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "Hallazgos REA → dos lugares para abrir" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Campos seleccionados de un nuevo {ph0} resultado en la precarga de la " +"pestaña Notion, grabada con REA 4.1.0. Las posiciones usan la línea y la " +"columna de base cero del paquete original." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"El agente abre esas ubicaciones, encuentra el miembro del portapapeles en la" +" API ensamblada y lee {ph0}. Suministros para el sitio Its call {ph1}. Ese " +"nombre le da al agente algo preciso que buscar en el paquete principal. Los " +"cuatro extractos a continuación muestran la ruta que conecta." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Cuatro piezas cortas de código" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Simplificado a partir del JavaScript empaquetado , con nombres de variables " +"legibles. Se omiten los miembros no relacionados." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Comience en la API expuesta en la página" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Este miembro proporciona el nombre del canal. La implementación de {ph0} nos" +" dice cómo la solicitud sale del proceso de la página." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Resolver el contenedor de la precarga" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"La función devuelta reenvía los argumentos a través del IPC de solicitud y " +"respuesta de Electron. Ahora podemos buscar {ph0} en el lado del proceso " +"principal." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Compruebe cómo está registrado el destinatario" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"El proceso principal usa otro envoltorio. Su {ph0} el método registra un " +"{ph1} receptor para ese canal." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Encuentre la escritura y su verificación de remitente" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Este es el destino. Después de verificar el remitente, el controlador pasa " +"los datos proporcionados a la API del portapapeles de Electron. El canal y " +"los dos envoltorios resueltos conectan el método expuesto a esta llamada." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "¿Cómo mantiene su estructura un bloque copiado?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"El editor web de Notion envía texto y HTML a través de {ph0}. Mantiene los " +"datos del bloque localmente y coloca una IDENTIFICACIÓN en el HTML copiado " +"para conectarlos." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "Enlaces HTML a los datos de bloque guardados" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Leer el ID HTML" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Encuentre la misma identificación local" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Restaurar datos de bloque Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Texto ilustrativo e ID. La prueba del módulo grabado restaura los datos del " +"bloque cuando los ID coinciden; una entrada obsoleta devuelve solo texto y " +"HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"Al pegar, Notion busca el ID HTML y lo compara con la copia guardada. Los ID" +" coincidentes restauran los datos del bloque." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Formato de portapapeles grabado a partir de activos web almacenados en caché" +" el 13 de julio de 2026." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Más ejemplos y fuentes" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Otro ejemplo: Tablas de rebajas" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion analiza Markdown en datos de bloque. Este ejemplo muestra cómo una " +"tabla se convierte en encabezado y filas de datos." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Una tabla a través del analizador de rebajas de Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Salida grabada de un analizador Markdown extraído. La tabla se convierte en " +"filas y celdas." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Otra ruta: la conexión SQLite sin conexión" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Solicitudes de renderizador de Notion {ph0} a través de IPC. El proceso " +"principal crea un canal de mensajes y le da un puerto al renderizador y el " +"otro a un proceso de utilidad SQLite. Los lotes de declaraciones posteriores" +" y los resultados viajan por ese puerto." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"A continuación, se explica dónde se ejecuta el trabajo de la base de datos y" +" por qué rastrear solo la solicitud inicial de IPC pierde la conversación " +"posterior." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Fuentes y cómo leer los extractos" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"El puente del portapapeles proviene de Notion Desktop 7.6.1 {ph0}: la " +"pestaña precarga y {ph1}. Los extractos expanden los nombres de variables " +"minimizados y omiten el código no relacionado; el ayudante de verificación " +"del remitente se muestra con su subyacente {ph2} llama." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Los ejemplos del portapapeles virtual y Markdown provienen de activos web " +"almacenados en caché el 13 de julio de 2026, incluidos los módulos {ph0}, " +"{ph1}, {ph2} y {ph3}. Esos activos tienen su propia versión. Las sondas " +"guardadas ejecutaron módulos extraídos y arneses pequeños; sus resultados " +"describen esas sondas en lugar de una sesión de IU de escritorio capturada." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"El resultado de REA que se muestra aquí es un análisis enfocado de la " +"precarga de pestañas guardada, registrada con el paquete REA 4.1.0 " +"publicado. Localiza la API y la operación de invocación. El miembro del " +"portapapeles y el receptor coincidente se conectan leyendo sus " +"implementaciones de envoltura en el paquete." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"El ejemplo de Markdown usa el módulo analizador {ph0}. Las pruebas de módulo" +" guardadas muestran que tanto los filtros de página como de chat conservan " +"esta tabla. Los analizadores pegar/importar, Markdown estructurado y AI/chat" +" tienen puntos de entrada separados y formatos intermedios." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} Guía de aplicación de JavaScript{ph1}{ph2}Siga la función de " +"exportación de una pequeña aplicación Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} Reconstrucción DX-Ball{ph1}{ph2}Siga las instrucciones nativas de una " +"función C marcada.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron Ingeniería inversa: Portapapeles-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Siga la API del portapapeles de Notion a través de la precarga de Electron, " +"los contenedores IPC y el proceso principal, con breves extractos de código " +"y un vistazo a su rico formato de portapapeles." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Estudio de caso Notion Electron" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Copie el indicador de análisis Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Copie el extracto de precarga de Notion" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Copiar extracto del contenedor de invocación Notion" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Copie el extracto del contenedor del controlador Notion" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Copiar extracto del receptor del portapapeles Notion" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Restauración de datos enriquecidos del portapapeles al pegar" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Saltar al contenido" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Inicio{ph1} / {ph2}Vitrinas{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Estudio de caso * Touhou 4: Historia de Lotus Land" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Reconstruyendo los TH04{ph0}patrones de bala." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Un anillo de balas comienza con un cálculo de ángulo corto. Use REA para " +"inspeccionar la función DOS original, luego siga sus instrucciones en C ++ " +"legible." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 · DOS de 16 bits * C++ y ensamblado" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Ver la reconstrucción del TH04" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "De las instrucciones originales a la fuente verificada" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * Juego original{ph1}{ph2}PRINCIPAL.EXE{ph3}{ph4}El ejecutable PC-98" +" y su ayudante de ángulo de bala.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * Inspeccionar con REA {ph1}{ph2}Instrucciones + " +"referencias{ph3}{ph4}Verifique el código DOS cargado y lea el cálculo del " +"ángulo del ejecutable.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * Leer el C++{ph1}{ph2}Espacio → apuntar → rotar{ph3}{ph4}Conecte " +"cada operación a la reconstrucción mantenida.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * Verifique la fuente{ph1}{ph2}2.139 bytes coincidentes{ph3}{ph4}Las" +" comprobaciones grabadas del compilador cubren el código de generación de " +"viñetas que contiene este ayudante.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA devuelve el código original y su evidencia de análisis. El proyecto TH04" +" proporciona las comprobaciones de código fuente y compilador mantenidas." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "En este estudio de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}El anillo de bala{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}Qué devuelve REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Ensamblado a C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Comprobando la fuente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}El proyecto completo{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Cómo apunta un anillo al jugador" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"El ataque de Elly solicita un anillo apuntado con un conteo inicial de 16. " +"Un ayudante calcula la dirección de cada bala. El mismo anillo puede mirar " +"en una dirección fija o girar hacia el jugador." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Su agente de codificación" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Usa REA para descubrir cómo TH04 crea un anillo de balas y " +"lo apunta al jugador. Explique el cálculo y muestre el " +"código.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Un indicador de ejemplo, con el ejecutable original y el pago de " +"reconstrucción disponibles localmente." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 almacena un giro completo en el sentido de las agujas del reloj en 256 " +"unidades de ángulo. Para 16 viñetas, cada índice agrega 16 unidades: {ph0}. " +"Al agregar la dirección del jugador, se rotan esas posiciones juntas." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Una ilustración de la matemática del ángulo recuperado para el conteo 16, la" +" dirección del jugador 40 y la rotación de la plantilla 0. {ph0}Figura " +"abierta{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "La plantilla de cocción en la fuente recuperada" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Ataque anular de Elly * extracto de la fuente" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Estas líneas seleccionan el patrón antes de la dificultad y el ajuste del " +"rendimiento. {ph0}Lea la fuente del ataque{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "Qué devuelve REA" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Inspeccionamos {ph0}, la función que establece la velocidad y el ángulo de " +"cada bala. REA devuelve sus instrucciones, pseudocódigo y referencias. Tres" +" partes de ese resultado explican el patrón." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Verifique la imagen de DOS antes de leer su código" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"La comprobación vincula el código cargado y los registros de reubicación al " +"ejecutable suministrado. La ruta anterior se acorta para su visualización." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Lee el anillo multiplica y divide" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} sostiene el índice de bala. El desplazamiento lo multiplica por 256, " +"luego la división usa el recuento leído de {ph1}. La fuente mantenida nombra" +" ese campo {ph2}. La secuencia completa aparece a continuación." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Encuentra dónde se dirige el patrón hacia el jugador" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Los operandos de instrucción exponen dos diferencias de coordenadas y un " +"ayudante de dirección. Su valor de retorno se suma al ángulo relativo del " +"anillo. Los nombres de origen hacen que esas direcciones sean legibles; REA " +"permite al agente verificar las operaciones originales detrás de ellas." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Del ensamblado al C ++ legible" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Seleccione un paso para que coincida con las instrucciones originales con el" +" cálculo del ángulo. Este resumen sigue la ruta del anillo objetivo; la " +"fuente completa también maneja spreads, pilas y patrones aleatorios." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Índice" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Espacio" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Objetivo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Rotar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Tienda" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * instrucciones originales de 16 bits" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Resumen de anillo dirigido legible por C++ ·" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * Lea el índice de viñetas.{ph1} El argumento de la pila se carga en" +" {ph2}. En un anillo de 16 balas, este índice de miembros va de 0 a 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Espacie las direcciones alrededor de una vuelta completa · {ph1} " +"{ph2} multiplica por 256. El conteo es cero, extendido a una palabra, luego " +"{ph3} divide el producto por ese conteo. Para el conteo 16, cada índice " +"avanza 16 unidades de ángulo." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * Agregue la dirección del jugador.{ph1} Las dos restas forman " +"coordenadas jugador-menos-origen. El ayudante de dirección devuelve un " +"ángulo en {ph2}; agregarlo gira todo el anillo hacia el jugador." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * Añadir la rotación del patrón.{ph1} {ph2} agrega el ángulo de la " +"plantilla. La plantilla inicial de Elly la establece en cero; otros patrones" +" pueden usar el mismo ayudante con una rotación." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Mantenga el ángulo final en un byte.{ph1} La tienda escribe {ph2} " +"al campo de ángulo de generación. Los valores se ajustan después de 255, tal" +" como lo hace la conversión de bytes sin signo. La fuente circundante " +"también convierte este ángulo y velocidad en velocidad." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"El conjunto selecciona la rama del anillo objetivo, el cálculo del objetivo " +"y el almacén final. El C++ anterior es un resumen legible. Las " +"comprobaciones del compilador a continuación se aplican a la fuente " +"mantenida en el proyecto vinculado." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Lea el anillo mantenido y apunte la fuente" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Macro de anillo{ph1} · {ph2}Objetivo y fuente de velocidad{ph3} · " +"{ph4}Representación de ángulos{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Comprobación de la fuente mantenida" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"Las comprobaciones grabadas del proyecto TH04 compilan el código de " +"generación de viñetas, incluido este ayudante, con su cadena de herramientas" +" Turbo C++ 4.0 J anclada." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2.139 bytes coincidentes" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"El código compilado de generación de viñetas coincide con una sección de " +"2139 bytes del ejecutable original." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Dos construcciones limpias" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Dos compilaciones separadas producen los mismos bytes coincidentes. Los " +"hashes de entrada grabados coinciden con la fuente mantenida que se muestra " +"aquí." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Grabado el 3 de octubre de 2026. {ph0}Leer las comprobaciones del " +"compilador{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Identidad del objetivo y alcance del análisis" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Objetivo original" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156,258 bytes, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Entrada auxiliar" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} en la imagen cargada de REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Desplazamiento del archivo original" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, devuelto por {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Inspección de código grabado" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 de octubre de 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Las comprobaciones del compilador cubren la sección completa de código de " +"adición de viñetas, incluido este ayudante. También comparan su contribución" +" al MAPA y la reubicación superpuesta." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA verificó la imagen de carga estática de DOS en el segmento de carga " +"{ph0}. Sus direcciones describen esa imagen de análisis. El resultado de la " +"función informa 503 bytes de cuerpo en dos rangos en un intervalo de 517 " +"bytes; las instrucciones seleccionadas anteriormente se encuentran en esos " +"rangos informados." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Los nombres de origen y las comprobaciones del compilador provienen del " +"punto de control TH04 {ph0}. Las observaciones de reconstrucción anteriores " +"utilizaron los propios scripts de análisis del proyecto; esta página agrega " +"una nueva inspección REA del mismo objetivo original. La identidad del juego" +" suministrado está anclada por su manifiesto de repositorio, con la " +"procedencia independiente de volcado prístino aún abierta." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"La figura ilustra el cálculo del ángulo. Los controles de juego completo, el" +" tiempo y el comportamiento del hardware PC-98 tienen comprobaciones de " +"tiempo de ejecución separadas en el proyecto de reconstrucción." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "La reconstrucción completa del TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"El proyecto construye los cuatro productos DOS del juego a partir de C++ y " +"ensamblado mantenidos. Más allá de la generación de viñetas, la fuente cubre" +" etapas, jefes, renderizado, entrada, menús, finales y manejo de partituras." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Explore el repositorio TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Fuente de generación de balas{ph1}{ph2}El ayudante completo, otros " +"tipos de patrones y ajuste de plantillas.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}Guía de compilación y ejecución de DOS{ph1}{ph2}Compile el código " +"fuente y pruébelo en el flujo de trabajo del emulador PC-98 del " +"proyecto.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Estado actual del proyecto{ph1}{ph2}Verificación DOS y el puerto x64 " +"nativo separado.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 Ingeniería inversa: Patrones de viñetas DOS-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Inspeccione el código DOS original de 16 bits de TH04 con REA . Siga el " +"ensamblado y el C ++ recuperado para ver cómo se separa un anillo de balas y" +" se apunta al jugador." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "En esta página" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "Estudio de caso del patrón de bala TH04" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Copie el indicador de ejemplo TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 anillos de bala fijos y apuntados; desplácese horizontalmente en " +"pantallas más pequeñas" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Dos diagramas de un anillo de 16 balas. El anillo fijo comienza en ángulo " +"cero. Agregar una dirección del jugador de 40 gira cada dirección en la " +"misma cantidad; la primera viñeta resaltada apunta hacia el jugador. Ambos " +"mantienen un espaciado de 16 unidades de ángulo, o 22.5 grados." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Copie la plantilla de cocción TH04" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Siga el cálculo del anillo apuntado TH04" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Copie el extracto de la asamblea TH04" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Cálculo de anillo apuntado legible por copia" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Volver arriba" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Copiar" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Copiado" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Seleccionados" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Código copiado al portapapeles." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Código seleccionado. Usa el teclado para copiarlo." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA en GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Distancia {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Golpea un cactus. Prueba con otra velocidad." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Espacio o Salto ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Juega de nuevo" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Jugar" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Pausa" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Presiona Play, luego salta sobre el cactus." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Golpea un cactus. Presione Reproducir nuevamente, o cambie la velocidad y " +"reinicie." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Corriendo. Espaciar o saltar despeja un cactus." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "En pausa. Presione Reproducir para continuar." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Velocidad fija: {speed}. Espaciar o saltar despeja un cactus." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Velocidad fija: {speed}. Presiona Play para probarlo." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Regla recuperada: comience en 6, luego aumente hacia 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Velocidad fija: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Reproducimos la regla recuperada. Los cuatro valores coinciden con la " +"verificación controlada del juego original cuando se redondean a tres " +"decimales." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"La repetición difiere de los valores grabados del juego original. Compare la" +" regla de velocidad y la configuración anteriores." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} segundos" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} segundos, bloque de tiempo {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"El cálculo interactivo no está disponible en este navegador. El ejemplo " +"muestra el código a los 59 segundos." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Comprobación…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} cheques aprobados (seis casos de referencia, de seis y " +"ocho dígitos)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "" +"No se pudieron ejecutar las comprobaciones de referencia. Inténtalo de " +"nuevo." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Un analista pensando en una computadora" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Un cheque revela un carácter" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"La séptima máscara selecciona solo la posición 21 en la cuadrícula de " +"entrada de seis por seis. Su código de carácter debe ser igual a 55, por lo " +"que el carácter es 7. Las otras máscaras seleccionan diferentes posiciones y" +" dan ecuaciones adicionales." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" +"El séptimo cheque. Las etiquetas de celda son posiciones de entrada, " +"comenzando en 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Máscara codificada: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Omita 21 celdas. Seleccione 1. Salto 14. Deténgase en 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Solo una celda contribuye a esta suma" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "La posición 21 en la bandera debe contener 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Seleccionado: una celda" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 máscaras dan 26 ecuaciones." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Resuélvalos juntos para encontrar la bandera." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "Investigación de paneo de sonido DX-Ball" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA proporciona la instrucción, la persona que llama y la evidencia de " +"lectura de bytes para una función DX-Ball. Una entrada de pila se multiplica" +" por 1,5625, se desplaza por 500, se escala y se convierte en un número " +"entero. Maintained C se verifica en 3205 casos originales-x86 y una " +"repetición separada del compilador de 63 bytes." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Pila" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "entrada x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "Entero" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "retorno" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Función reconstruida" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "C reconstruido" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Llamada al golpe" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Código original" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "comparación" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3.205 pruebas" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Build VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 bytes iguales" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "Flujo de investigación REA" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Haga una pregunta sobre un objetivo local. REA inspecciona y rastrea a " +"través de adaptadores de análisis locales, devuelve evidencia y admite " +"preguntas de seguimiento a medida que su agente explica, implementa y " +"prueba." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Preguntar" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Agente + archivo local" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "App / archivo / navegador" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Inspeccionar" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Leer las pruebas" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Código / referencias /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "incógnitas" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Aplicar" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Tu agente" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Explicar / crear / probar" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Herramientas RE" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Adaptadores locales" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Otra pregunta" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: espaciar y apuntar un anillo de balas" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Un giro completo en el sentido de las agujas del reloj tiene 256 unidades de" +" ángulo. Dieciséis balas comienzan en ángulos cero, dieciséis, treinta y " +"dos, hasta 240. Agregar una dirección de jugador de ejemplo de cuarenta gira" +" las dieciséis direcciones juntas; la primera viñeta apunta al jugador. La " +"rotación de la plantilla es cero." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Anillo fijo" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Primera viñeta: ángulo 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Anillo apuntado" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Primera viñeta: dirección del jugador" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Centro" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Jugador" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Mismo espaciado: 256 ÷ 16 = 16 unidades de ángulo = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Casos prácticos" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Primeros pasos" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Guías" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Código fuente" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Licencia MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Únete a la comunidad" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Síguenos en X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * fuente de script seleccionada" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Código fuente" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Salida esperada del formateador" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Instrucciones" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Llamador" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Constantes" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Función C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Botón" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "API de precarga" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "Archivo CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Su clic" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Solicitud capturada" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Script de exportación" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA resultado · resumen.extracto de ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "Extracto de instrucciones REA * 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "Extracto de la persona que llama REA * 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "Resultados de bytes REA * interpretados como dobles little-endian" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Extracto recuperado de C *" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Mira cómo funciona REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Guía de instalación" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Vitrinas →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Configuración seleccionada del script inspeccionado" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Resumen legible del controlador %" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * instrucciones originales seleccionadas" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "ID de operador * Fuente de Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Sigue a @ reatools en X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Agente → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → agente * resultados seleccionados" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → agente * métodos y llamadores" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * Java descompilado seleccionado" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Resumen legible * interpretación del agente" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP, cuerpo completo" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Descargar Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Descargar proveedor de análisis de Android" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Agente → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → agente * resultados seleccionados" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → agente * instrucciones seleccionadas" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Agente → REA * read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → agente * séptima entradas" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Ejecutable original * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Descarga el desafío original" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Descargar solver" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA resultado * extracto de pseudocódigo" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agente → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → extracto de instrucciones del agente ·" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → extracto del agente * llamante" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Agente → REA * dos {ph0} solicitudes" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "Resultados de bytes REA * decodificados como dobles" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Comience con su propio objetivo" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Generando código" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Regla recuperada" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Reloj ajustable" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Binario" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Comprobación del código" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Ecuaciones" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "¡Correcto!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Ejecutable" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "Hallazgos REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Recuperado C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Validación" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Aplicación empaquetada" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "API expuesta" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "Envoltorios IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Portapapeles" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Código DOS original" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "Instrucciones REA" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Cálculo de ángulos" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Anillo de bala" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "API de página expuesta" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Llamada IPC del renderizador" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Enviado al portapapeles del sistema" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Guardado localmente por Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Entrada de rebajas" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Salida estructurada del analizador · extracto" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Analiza tu propia app" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Agente → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → agente * campos seleccionados" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agente → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → extracto de instrucciones del agente ·" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Resultado de la misma función · extracto del objetivo" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "Correspondiente C ++ mantenido" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Macro de anillo * Rama TH04, extracto" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Ángulo y velocidad · extracto de la fuente" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Presione % para ver qué sucede con 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "el 10% de 200 es 20. Presione = para agregarlo." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "" +"Para la multiplicación, 10 se convierte en 0.1. Presione = para multiplicar." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"La traducción está siendo actualizada. Lea esta página en inglés por ahora." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilice REA para analizar {ph3} y explique cómo exporta " +"datos. Muestre el código relevante y las ubicaciones de " +"origen.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Instala REA y conéctalo a este agente de programación usando" +" {ph3}. Muéstrame los cambios propuestos y espera mi aprobación antes de " +"aplicarlos. Después, verifica la instalación.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}Descargar {ph3} en una nueva carpeta de ejemplo y " +"descomprímala. Use REA para averiguar qué sucede cuando hago clic en " +"Exportar notas. Mostrar dónde {ph4} está escrito, qué campos contiene y los " +"archivos y líneas relevantes.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Instala REA y conéctalo a este agente de programación usando" +" {ph3}. Muéstrame los cambios propuestos y espera mi aprobación antes de " +"aplicarlos. Después, verifica la instalación.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Instala REA y conéctalo a este agente de programación usando" +" {ph3}. Muéstrame los cambios propuestos y espera mi aprobación antes de " +"aplicarlos. Después, verifica la instalación.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilice REA para inspeccionar {ph3}. Clona este sitio web " +"por mí.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Reconstrucción * {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"Con {ph0} y npm disponible, ejecute el programa de instalación, elija su " +"agente de codificación y revise los cambios propuestos." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Un ejemplo proporcionado · {ph0} y npm * Su agente de codificación" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Use un agente de codificación como Claude Code, Codex o Cursor. Necesitarás " +"{ph0} y npm; el {ph1}la guía de configuración enumera las versiones " +"compatibles{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Página · {ph1}{ph2}{ph3}Notas de exportación{ph4}{ph5}Llamadas " +"{ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Puente · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Envía un mensaje con nombre al " +"proceso principal.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Manejador · {ph1}{ph2}{ph3}Escribir {ph4}{ph5}{ph6}Llama al formateador" +" en {ph7} y escribe el archivo.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * líneas 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Predecir el CSV para una nota con id 1 y título {ph3}. Luego" +" ejecute el ejemplo {ph4} formateador con {ph5} para comprobarlo. Muestra la" +" predicción y la salida real.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"El título permanece en un campo entrecomillado; cada comilla se duplica. " +"Esto verifica el formateador directamente con {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV formateador" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Necesitarás {ph0} 22 (22.19+), 24 (24.11+) o 26+. npm viene con {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "No tengo {ph0}, ¿ o no estás seguro?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Si {ph0} imprime v22. 19+, v24. 11+ o v26+, ya está listo. Si imprime una " +"versión anterior o \"no reconocido\" / \"comando no encontrado\", instale " +"{ph1} 24 LITROS:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * extracto de fuente de ejemplo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Abra el ejemplo{ph1} · {ph2}Descargar {ph3}{ph4} · {ph5}Descargar " +"{ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * fuente de ejemplo" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Descargue el ejemplo y descomprímalo. El archivo contiene la versión " +"completa {ph0} carpeta. Analícelo con {ph1} y npm; Electron no es necesario " +"para este ejemplo." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Primera vez, o falta {ph0} ¿o un agente de codificación? {ph1}Siga la guía " +"de configuración paso a paso →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "" +"Por ejemplo: {ph0}¿por qué la calculadora da 220 al calcular {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Uso REA para inspeccionar Windows Calculadora. ¿Por qué " +"{ph3} da 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * cargado {ph0} * líneas seleccionadas" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Vimos por qué {ph0}{ph1} da 220.{ph2} Ahora recuperemos las reglas para + y " +"× y probémoslas." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA lee {ph1}{ph2}{ph3}Lanza la aplicación Calculadora{ph4}{ph5}Se" +" abre el código {ph6}. A continuación, el agente selecciona la biblioteca de" +" la aplicación instalada.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Uso REA para inspeccionar aegis-v3.4.{ph3}. Descubra cómo " +"genera el código de inicio de sesión de seis dígitos, explique por qué " +"cambia cada 30 segundos y reconstruya una pequeña demostración en la que " +"pueda cambiar la hora.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} * Miembro API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} * Ayudante de IPC" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "principal/{ph0} * ayudante del manejador" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "principal/{ph0} * receptor del portapapeles" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Reconstrucción * dino-speed.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Con Node.js y npm disponible, ejecute el programa de instalación, elija su " +#~ "agente de codificación y revise los cambios propuestos." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Un ejemplo proporcionado · Node.js y npm * Su agente de codificación" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Use un agente de codificación como Claude Code, Codex o Cursor. Necesitarás " +#~ "Node.js y npm; el {ph0}la guía de configuración enumera las versiones " +#~ "compatibles{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Renderizador de página*.js{ph1}{ph2}Notas de " +#~ "exportación{ph3}{ph4}Llamadas {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Puente * precarga · js{ph1}{ph2}{ph3}{ph4}{ph5}Envía un mensaje con " +#~ "nombre al proceso principal.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Manejador * principal.js{ph1}{ph2}Escribe notas.csv{ph3}{ph4}Llama al " +#~ "formateador en {ph5} y escribe el archivo.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Predecir el CSV para una nota con id 1 y título Hola, " +#~ "\"REA\". Luego ejecute el formateador toCsv del ejemplo con Node.js para " +#~ "comprobarlo. Muestra la predicción y la salida real.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "El título permanece en un campo entrecomillado; cada comilla se duplica. " +#~ "Esto verifica el formateador directamente con Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV formateador" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Necesitarás Node.js 22 (22.19+), 24 (24.11+) o 26+. npm viene con Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "No tengo Node.js, ¿ o no estás seguro?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Si {ph0} imprime v22. 19+, v24. 11+ o v26+, ya está listo. Si imprime una " +#~ "versión anterior o \"no reconocido\" / \"comando no encontrado\", instale " +#~ "Node.js 24 LITROS:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Abra el ejemplo{ph1} · {ph2}Descargar exportación.js{ph3} · " +#~ "{ph4}Descargar notas.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Descargue el ejemplo y descomprímalo. El archivo contiene la versión " +#~ "completa {ph0} carpeta. Analícelo con Node.js y npm; Electron no es " +#~ "necesario para este ejemplo." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Primera vez, o falta Node.js ¿o un agente de codificación? {ph0}Siga la guía" +#~ " de configuración paso a paso →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "" +#~ "Por ejemplo: {ph0}¿por qué la calculadora da 220 al calcular 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Uso REA para inspeccionar Windows Calculadora. ¿Por qué 200 " +#~ "+ 10% da 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Vimos por qué {ph0}200 + 10% da 220.{ph1} Ahora recuperemos las reglas para " +#~ "+ y × y probémoslas." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA lee calc.exe{ph1}{ph2}Lanza la aplicación " +#~ "Calculadora{ph3}{ph4}Se abre el código {ph5}. A continuación, el agente " +#~ "selecciona la biblioteca de la aplicación instalada.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Uso REA para inspeccionar aegis-v3.4.3.apk. Descubra cómo " +#~ "genera el código de inicio de sesión de seis dígitos, explique por qué " +#~ "cambia cada 30 segundos y reconstruya una pequeña demostración en la que " +#~ "pueda cambiar la hora.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/precarga.js * Miembro API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/precarga.ayudante js * IPC" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "principal / índice.ayudante de manejador js * " + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "principal / índice.js * receptor del portapapeles" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "principal.js * líneas 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "exportación.js * extracto de fuente de ejemplo" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "renderizador.js * fuente de ejemplo" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "precarga.js * fuente de ejemplo" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "principal.js * fuente de ejemplo" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * índice cargado.js * líneas seleccionadas" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Uso REA para analizar / absolute / path / to / app y " +#~ "explicar cómo exporta datos. Muestre el código relevante y las ubicaciones " +#~ "de origen.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instalar REA y conéctelo a este agente de codificación " +#~ "usando npx rea-agents @ última configuración. Muéstrame el plan de " +#~ "configuración para su aprobación y luego verifica la " +#~ "instalación.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Descargar https://rea.tools/examples/notes-example.zip en " +#~ "una nueva carpeta de ejemplo y descomprímala. Uso REA para saber qué sucede " +#~ "cuando hago clic en Exportar notas. Mostrar dónde notas.se escribe csv, qué " +#~ "campos contiene y los archivos y líneas relevantes.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instalar REA y conéctelo a este agente de codificación " +#~ "usando npx rea-agents @ última configuración. Muéstrame el plan de " +#~ "configuración para su aprobación y luego verifica la " +#~ "instalación.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instalar REA y conéctelo a este agente de codificación " +#~ "usando npx rea-agents @ última configuración. Muéstrame el plan de " +#~ "configuración para su aprobación y luego verifica la " +#~ "instalación.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Uso REA para inspeccionar https://rea.tools/. Clona este " +#~ "sitio web por mí.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "código[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× escala panorámica" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}Ingeniería Inversa de Cualquier Cosa{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/fa/messages.po b/website/locales/fa/messages.po new file mode 100644 index 000000000..de76f4e1f --- /dev/null +++ b/website/locales/fa/messages.po @@ -0,0 +1,13227 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: fa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}خانه{ph1} / وبلاگ" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "وبلاگ." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "افکار در مهندسی معکوس." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "بازسازی بازی{ph0}مقاله" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "انقلاب صنعتی در مهندسی معکوس" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"چه دستی دوباره و بازسازی TH08, TH095 و TH04 به من آموخت در مورد عوامل, تأیید" +" و دانش است که ترکیبات در سراسر پروژه." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "مقاله را بخوانید" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "توسط N0zoM1z0 * 10 اکتبر 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} بالا" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "وبلاگ REA-افکار در مهندسی معکوس" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"افکار در مهندسی معکوس ، با استفاده از تجربه عملی با REA و عوامل هوش مصنوعی." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-پیدا کردن چگونه نرم افزار کار می کند. مهندسی معکوس با عامل برنامه نویسی " +"شما." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "صفحهٔ اصلی REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "ناوبری اصلی" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA در GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "به REA در Discord بپیوندید" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "REA را در X دنبال کنید" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}خانه{ph1} / {ph2}وبلاگ{ph3} / بازسازی توهو" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "مقاله * بازسازی توهو" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "انقلاب صنعتی در مهندسی معکوس" + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "توسط N0zoM1z0 * 10 اکتبر 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "نکات اصلی" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}به ماموران در مورد تحقيقات خودمختاري بده{ph1} یک هدف مشخص و معیارهای " +"پذیرش را تعیین کنید ، سپس اجازه دهید نماینده تصمیم بگیرد که چه چیزی را " +"امتحان کند." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}از مخزن و گیت به عنوان حافظه کاری استفاده کنید.{ph1} استدلال را با کد " +"نگه دارید. نقاط بازرسی گیت اجازه دهید جلسه بعدی پس از پایان مکالمه ادامه " +"یابد." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}بگذارید شواهد تصمیم بگیرند که شما چه ادعایی دارید.{ph1} یک توضیح مطمئن " +"هنوز نیاز به آزمایش دارد. \"نامعلوم\" پاسخ معتبر است وقتی شواهد ناقص است." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}مرجع تأیید (اوراکل) را نیز آزمایش کنید.{ph1} مواردی را امتحان کنید که " +"باید رد شود. اگر یک اشکال را از دست داد ، نتایج قبلی را که به آن بستگی داشت " +"، دوباره بررسی کنید." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}ما در روزهای اولیه انقلاب صنعتی RE هستیم.{ph1} روش ها هنوز در حال شکل " +"گرفتن هستند. هنوز چيزاي زيادي براي کشف کردن باقي مونده" + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "چگونه ترکیبات تجربه" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}جهت گیری انسان{ph1} * هدف و معیارهای پذیرش" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "استقلال عمل" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "دستیار" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "یک آزمایش را انتخاب کنید.{ph0}یک فرضیه را پیشنهاد کنید." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "اعتبارسنجی" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "مرجع اعتبارسنجی" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "تست در برابر یک{ph0}مرجع بتن." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "مخزن کد" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "حافظهٔ کاری" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "کد ، شواهد,{ph0}چک ها و درس ها" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "عدم تطابق{ph0}{ph1}فرضیه را بازنگری کنید{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "بهتر{ph0}{ph1}نقطه شروع{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "استفادهٔ دوباره" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}گذرنامه{ph1} * نتیجه و شواهد آن را حفظ کنید" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"هر پروژه با نقطه شروع بهتر از پروژه بعدی باقی می ماند. که شامل اصلاح چک ها " +"هم ميشه وقتي که ما يه شکاف پيدا مي کنيم" + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "در این مقاله" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}آگوست 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08: ادامه{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}دو رویکرد{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095: ترکیب{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: در سراسر معماری{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}از دقیق تا قابل خواندن{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}شیفت صنعتی{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}آنچه ممکن می شود{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "آنچه در آگوست 2026 تغییر کرد" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"قبل از این کار ، من مهندسی معکوس دستی زیادی انجام داده بودم. من یک تابع را " +"بررسی می کردم تا زمانی که یک توضیح داشتم ، سپس آن توضیح را در برابر برنامه " +"تست می کردم. ادامه دادن به این معنی بود که بیشتر وقت خودم را صرف کار بعدی می" +" کردم. همچنین به این معنی بود که یک تصویر بزرگ در ذهنم نگه دارم." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"بسیاری از دوباره کار من در بازی است. من آنها را بازسازی می کنم تا رفتارشان " +"درک شود و در نهایت به یک پورت نرم افزار یا یک مود منتقل شود. این تجربه پشت " +"این مقاله است. این روش می تواند در جای دیگر مفید باشد ، اما هر فیلد باید " +"مشخص کند که چه چیزی را می تواند با یک مرجع قابل اعتماد بررسی کند." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"در اوت 2026, من شروع به کاوش دوباره عامل محور جدی. ميخواستم ببينم که يه " +"مامور چقدر ميتونه با دسترسي به برنامه و ابزار توسعه معمولي به اينجا برسه " +"بازسازی توهو به من یک پروژه قابل توجهی داد که در آن می توانستم بفهمم." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"پیشرفت اولیه شگفت انگیز بود. يه تحقيق ميتونه بدون اينکه من هر قدم رو انتخاب " +"کنم ادامه پيدا کنه يه مقايسه شکست خورده ممکنه مامور رو به يه تماس گيرنده " +"ديگه بفرسته می تواند یک تشخیص کوچک بنویسد و از نتیجه استفاده کند تا تصمیم " +"بگیرد که چه چیزی را امتحان کند. دادن این آزادی به آن تفاوت ایجاد کرد: من می " +"توانم توجه بیشتری به جهت پروژه و اینکه آیا چک های آن قابل اعتماد است ، صرف " +"کنم." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"سرعت اول توجه من رو جلب کرد بعد شروع کردم به فکر کردن که چه چیزی فراتر از " +"پروژه فعلی زنده می ماند. آیا بازی بعدی از هر چیزی که تازه یاد گرفته بودیم " +"سود می برد ؟" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: ساخت بر روی کار انسانی" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08 {ph1}، شب فاسد نشدنی ، به عنوان ادامه {ph2} بازسازی " +"GensokyoClub{ph3}. منبع عمومی آنها به من یک پایه قابل توجهی داد. با دانش " +"ساخت و ساز و سابقه کمک هایی که در ادامه حفظ کردم ، همراه بود." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"تاریخ وارداتی در بازرسی عمومی 10 آگوست به پایان می رسد. ادامه مستقل من در 13" +" آگوست آغاز شد. تا 19 آگوست ، دفتر کل منبع ثبت شده برای تمام 1107 عملکرد " +"بازی شناسایی شده بود." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"یک پورت بازسازی Linux قابل بازی در 24 اوت ، تقریبا یازده روز پس از شروع " +"ادامه ، انجام شد. یک نسخه وب به دنبال آن بود. نسخه بومی Linux 64 بیتی در 30 " +"اوت وارد شد." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"چیزی که مرا تحت تاثیر قرار داد این بود که کار به برنامه ای رسیده بود که مردم" +" می توانستند اجرا کنند. رسیدن به آنجا نیاز به دنبال مشکلات فراتر از یک " +"عملکرد فردی دارد. حتی وقتی دو تابع به صورت جداگانه درست به نظر می رسیدند ، " +"می توانستند به طور تصادفی از نسخه های جداگانه ای از حالت استفاده کنند که " +"باید به اشتراک گذاشته می شد." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"این باعث شد که چک های مرجع در مرکز کار قرار بگیرند. من بهشون ميگم {ph0}مراجع" +" تأیید (اوراکل){ph1}. یک مقایسه کد می تواند به ما بگوید که آیا یک تابع " +"بازسازی شده دستورالعمل های اصلی را بازتولید می کند. یک بررسی زمان اجرا می " +"تواند به ما بگوید که آیا یک مسیر تمرین شده به حالت مورد انتظار می رسد. مامور" +" توضیح می دهد و آن را آزمایش می کند ؛ عدم تطابق چیزی خاص برای تحقیق به آن می" +" دهد." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "مطابقت دقیق با ثابت اشتباه" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"یک مرجع تأیید (اوراکل) نرم افزاری است که کسی نوشته است. TH08 به من یادآوری " +"روشنی داد که چقدر می تواند به این نرم افزار بستگی داشته باشد." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"در ماه سپتامبر ، یک اشکال گزارش شده توسط یک پورت سوئیچ پایین جریان منجر به " +"جمع آوری خودکار آیتم شد. منبع بازسازی شده قدرت بازیکن را در برابر {ph0}. اصل" +" مورد استفاده {ph1}، حد حداکثر قدرت" + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"قدرت طبیعی منفی نیست ، بنابراین بررسی قدرت بازسازی شده به طور موثر همیشه " +"راضی بود. بالاتر از خط جمع آوری ، بازی می تواند بدون نیاز به حداکثر قدرت ، " +"آیتم ها را جذب کند. استثناهای دیگر در این شرایط درست بود. این یکی ثابت رفتار" +" را تغییر داد." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}با این حال تابع قبلا مقایسه دقیق را پشت سر گذاشته بود.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"بازسازی می تواند ثابت را در آدرس دیگری قرار دهد. ابزار مقایسه این را با " +"تنظیم آدرس ها در دستورالعمل های کامپایل شده قبل از مقایسه آنها با اصل توضیح " +"می دهد. اما هرگز ارزش نقطه شناور ذخیره شده در آدرس مرجع را بررسی نکرد." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"که يه سوراخ توي چک جا گذاشت ممکنه دستورالعمل بازسازی شده رو به سمت اصل نشون " +"بده {ph0} در حالی که منبع هنوز گفت {ph1}. بایت های دستورالعمل با هم مطابقت " +"داشتند. منبع به معنی چیز دیگری بود." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"این {ph0}2 سپتامبر ثابت{ph1} منبع را اصلاح کرد و مقایسه را انجام داد بایت " +"های واقعی ثابت مرجع را بررسی کنید. A {ph2}حسابرسی گسترده تر{ph3} سپس 1548 " +"مرجع ثابت نقطه شناور را بررسی کرد. این دوازده مرجع نادرست دیگر را در پنج " +"تابع پذیرفته شده پیدا کرد." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"این مقایسه اکنون هر ثابت نقطه شناور را بررسی می کند. تست های آن شامل مقادیر " +"عمدا اشتباه برای اطمینان از رد شدن آنها است. ما همچنین مجبور بودیم نتایج را " +"که از چک ضعیف تر عبور کرده بود ، دوباره بررسی کنیم." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}مرجع تأیید (اوراکل) نیز نیاز به بازسازی داشت.{ph1} تعمیر آن بخشی از " +"تعمیر بازی بود." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"این مهم است وقتی که تیم بیشتر یک نفر است که با ماموران کار می کند. من شخصا " +"نمی توانم هر خطی را که تولید می کنند بازرسی کنم ، بنابراین اعتماد به نفس من " +"بر روی چک های آنها استوار است. نقطه کور یک مرجع تایید مشترک (اوراکل) می " +"تواند بسیاری از تحقیقات را قبل از اینکه متوجه آن شوم ، تحت تاثیر قرار دهد. " +"باید بفهمم که چک کننده واقعا چه چیزی را تایید می کند و آن را در برابر مواردی" +" که باید شکست بخورند تست می کند." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"با ادامه کار ، این چک ها بخشی از مخزن شدند. همچنین دلایل تغییر منبع و " +"یادداشت هایی که اجازه می داد جلسه بعدی از جایی که جلسه قبلی متوقف شده بود ، " +"شروع شود. {ph0}مخزن کد منبع به حافظه کاری پروژه تبدیل شده بود.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}یک دسته موفق به ما کد بازیابی شده و یک محیط بهتر برای دسته بعدی را " +"داد.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "دو ایده متفاوت از بازسازی" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub {ph0}عمومی README{ph1} مخالفتش با این نوع کار را صریح می کند. " +"این اطلاعیه اعلام می کند که توسعه بیشتر به صورت خصوصی تا زمان تکمیل اتفاق " +"خواهد افتاد. در یکی از این بخش ها آمده است:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"ظهور grifters (تجزیه هوش مصنوعی و پورت ها) در این فضا گرفتن از کار ما یک " +"تصویر بد برای تلاش های تجزیه آینده را نقاشی می کند…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"این اطلاعیه همچنین تلفات روانی را بر روی نگهدارنده ها توصیف می کند. سیاست " +"مشارکت آنها درخواست های pull را که عمدتا با هوش مصنوعی تولید شده است ، حذف " +"می کند. آنها وقت آزادشان را به کار سختی اختصاص داده اند ، و این کار به ادامه" +" من کمک کرد. من به تلاش پشتش احترام ميذارم اختلاف نظر که می خواهم در مورد آن" +" بحث کنم این است که بازسازی چگونه باید ادامه یابد و چگونه باید یک سهم را " +"قضاوت کرد." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"در جریان کاری دستی که می شناختم ، توسعه درک یک تابع و بازسازی آن معمولا به " +"همان شخص می رسید. یک پروژه به شدت به تخصص آن شخص متکی بود. اعتماد به کمک " +"کننده مهم بود چون خیلی از استدلال ها در حالی که کار می کردند اتفاق می افتاد." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"پروژه های موجود در حال حاضر دانش را در منبع خود حفظ می کنند و ابزار می " +"سازند. چیزی که برای من تغییر کرد این بود که یک مامور می توانست از این دانش " +"برای پیگیری تحقیقات بعدی به تنهایی استفاده کند." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"در ادامه ، من هدف و استاندارد پذیرش نتیجه را تعیین می کنم. مامور آزادی " +"گسترده ای برای تحقیق داره بازسازی پیشنهادی آن باید از چک های مربوطه جان سالم" +" به در ببرد. من می خواهم شخص دیگری بتواند بررسی کند که چرا ما یک پیاده سازی " +"را انتخاب کردیم ، حتی اگر یک نماینده بیشتر کار را انجام دهد." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"این می تواند یک انتقال دشوار باشد. سالها کار دقیق ممکن است پایه ای برای " +"ادامه ای باشد که بسیار سریعتر حرکت می کند. این سوال های واقعی در مورد اعتبار" +" را مطرح می کند. همچنین آنچه را که نگهدارندگان باید قبل از پذیرش سهم بدانند " +"تغییر می دهد." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"تشبیه صنعتی به من کمک می کند تا در مورد این فکر کنم. در یک کاردستی ، بیشتر " +"فرآیند به مهارت فرد انجام دهنده آن بستگی دارد. ماشین آلات در جایی که این " +"مهارت مورد نیاز است تغییر می کند. کسی هنوز باید فرآیند را طراحی کند و تشخیص " +"دهد که خروجی آن اشتباه است. جوامع مختلف می توانند انتخاب کنند که چه مقدار از" +" این تغییر را می خواهند انجام دهند." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"انتخاب من اينه که به طور علني ادامه بدم ، با کار ارثي که اعتبار داده شده و " +"تاريخش حفظ شده. ميخوام کار جديد قابل بازنگري باشه این به ما راهی می دهد تا " +"بپرسیم این رویکرد تا چه حد می تواند پیش برود و از آنچه در طول مسیر اشتباه " +"است یاد بگیریم." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"منبع: GensokyoClub {ph0}اطلاعیه README{ph1}، در 10 اکتبر 2026 بررسی شد و " +"{ph2}سیاست مشارکت{ph3}. نقل قول یک گزیده کوتاه است. TH08 {ph4}اعتبارات و " +"منشأ{ph5} مرز ادامه را ثبت کنید." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: تجربه شروع به ترکیب می کند" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095 {ph1}، گلوله رو شلیک کن ، ارزش اون تجربه رو خیلی راحت تر دید. " +"مخزن آن در 29 اوت با صفر عملکرد بازی تایید شده در دفتر کل آغاز شد. ما هنوز " +"باید بازی را یاد می گرفتیم. اما ما قبلا خیلی بیشتر در مورد چگونگی شروع " +"بازسازی و چگونگی حرکت آن می دانستیم." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"تا 7 سپتامبر ، تمام 697 تابع بازی شناسایی شده منبع داشتند. تا 8 سپتامبر ، " +"696 مورد به عنوان مقایسه دقیق پذیرفته شده بود. کل برنامه در 9 سپتامبر به هم " +"متصل شد. بازسازی Windows i386 در 10 سپتامبر ، حدود دوازده روز پس از شروع ، " +"قابل بازی بود." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"من این را هیجان انگیزتر از سرعت پروژه اول یافتم. یک هدف تازه می تواند از کار" +" انجام شده در یک بازی دیگر بهره مند شود. این تجربه قبلا در ابزارها و نحوه " +"سازماندهی پروژه وجود داشت." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"به عنوان مثال ، TH08 به ما آموخته بود که زودتر به برنامه مونتاژ شده توجه " +"کنیم. اگر چندین تابع بازیابی شده به همان حالت بستگی داشته باشند ، مقایسه های" +" جداگانه آنها یک سوال مهم را باز می گذارد. ما باید ببینیم که اونا با هم کار " +"می کنن این درس به شکل گیری نحوه ی نزدیک شدن ما به ساخت کل برنامه ی TH095 کمک" +" کرد." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"درسی که در ذهنم باقی می ماند در حالی که من آنجا هستم مفید است. وقتی که به یک" +" چک تبدیل شد که یک جلسه دیگر می تواند اجرا شود ، می تواند کمک کند بعد از " +"اینکه من حرکت کردم. عامل بعدی می تواند نتیجه را بدون تکرار تحقیقات منجر به " +"آن استفاده کند." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"باگ ثابت نقطه شناور هم به اون حافظه تعلق داره این توضیح می دهد که چرا بررسی " +"یک مرجع نیز نیاز به بررسی داده های پشت آن دارد. حفظ این اصلاح با کد به پروژه" +" های بعدی کمک می کند تا از ارث بردن نقطه کور چک قدیمی جلوگیری کنند." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}این روش بخشی از مواد اولیه برای بازی بعدی می شود.{ph1} ما می توانیم " +"بیشتر از تلاش پروژه بعدی را صرف آنچه در واقع جدید در مورد هدف آن است." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"همین مزایا برای افرادی که بعدا به این گروه می پیوندند ، در دسترس است. آنها " +"می توانند قبل از ادامه کار ، یک تصمیم را بازرسی کرده و چک آن را مجددا اجرا " +"کنند. آنها مجبور نیستند کل تاریخچه پروژه را بازسازی کنند تا بفهمند چرا منبع " +"به این شکل به نظر می رسد." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: جریان کار از یک معماری متفاوت جان سالم به در می برد" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04 {ph1}، داستان سرزمین لوتوس ، این کار را به دوران PC-98 dos برد. " +"هدف در حال حاضر یک محیط 16 بیتی با چهار برنامه همکاری بود. درک رفتار سخت " +"افزاری آن نیاز به شواهد متفاوتی از بازی های Windows داشت. موجود {ph2}کار " +"ReC98{ph3} ما دانش ارزشمندی و منبع مواد را در اینجا نیز به ما داد." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"بازسازی DOS در حال حاضر کار می کند. در تست دستی من ، من مسیرهای عادی کامل را" +" از طریق پایان آنها بازی کردم و ذخیره ها را بررسی کردم. کار فعلی یک پورت 64 " +"بیتی بومی است. ایجاد یک نسخه dos کار برای اولین بار به آن پورت یک مرجع می " +"دهد." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"معماری چیزی که ما برای تحقیق نیاز داشتیم را تغییر داد. همچنین کامپایلر و " +"زمان اجرا را تغییر داد که با آن کار خود را بررسی کردیم. اما مامور هنوز می " +"تواند یک سوال را تا نتیجه دنبال کند و اجازه دهد که نتیجه آزمایش بعدی را " +"هدایت کند." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"انتقال از گیم پلی به پایان را در نظر بگیرید. ما باید بدانیم که چه ایالتی از " +"این مرز عبور می کند و کدام برنامه مسئول آن است. اين چيزيه که ما ميتونيم در " +"مورد محصول DOS تحقيق کنيم هنگامی که شواهد و چک ها در دسترس هستند ، یک " +"نماینده می تواند از طریق سوال کار کند ، همانطور که در عنوان Windows انجام " +"شده است." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"به همین دلیل TH04 برای استدلال مهم است. تغییر قابل توجهی در پلتفرم ما را " +"مجبور نکرد که با یک روش جدید کار شروع کنیم. معماری مشکل را تعریف کرد ؛ جریان" +" کار هنوز راهی برای حل آن به ما داد." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"برای پورت 64 بیتی ، ما اکنون می توانیم پیاده سازی جدید را با رفتاری که قبلا " +"در DOS بازیابی شده است ، بررسی کنیم. دانش از بازسازی به بندر چیزی برای ساخت " +"می دهد." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"وضعیت پروژه از 10 اکتبر 2026: {ph0}بازسازی DOS و تست دستی{ph1} · {ph2}پورت " +"64 بیتی{ph3}. بندر همچنان در حال توسعه است." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "از کد دقیق تا کد قابل خواندن" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "وقتی بازسازی جواب داد ، میخوام یه نفر دیگه بتونه درکش کنه." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"برای من ، مونتاژ و جبران خام می تواند مانند دوستان قدیمی احساس شود. میدونم " +"که این یه تعریف کمی غیرمعموله از \"قابل خواندن\"\"اکثر مردم ترجیح می دهند " +"منطق بازی را بدون نگه داشتن طرح حافظه اجرایی در سر خود دنبال کنند." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"اینجاست که {ph0}بازسازی معنایی{ph1} وارد می شود. یک میدان بازیابی شده هنوز " +"هم ممکن است عمدتا با جبران آن شناخته شود. ما دنبال می کنیم که چگونه بازی از " +"آن استفاده می کند تا زمانی که بتوانیم نقش آن را توضیح دهیم. سپس می توانیم یک" +" نام معنی دار و نوعی متناسب با شواهد به آن بدهیم. ما استدلال را با منبع نگه " +"می داریم تا فرد بعدی بتواند ببیند که این تفسیر از کجا آمده است." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"این امر به ویژه برای یک پورت نرم افزار مهم می شود. یک آدرس مطلق به من می " +"گوید که چیزی در فایل اجرایی قدیمی کجا زندگی می کرد. این یک پیاده سازی 64 " +"بیتی را در تصمیم گیری در مورد اینکه کدام شی باید مالک آن حالت باشد ، کمک کمی" +" می کند. برای حرکت ایمن رفتار ، باید رابطه پشت دسترسی به حافظه قدیمی را " +"بازیابی کنیم." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "سفارشي که الان ازش استفاده ميکنم:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}یک خط پایه دقیق را بازیابی کنید.{ph1} قطعات بازسازی شده را با کامپایلر " +"تاریخی کامپایل کنید. کد و داده های مربوطه را با فایل اجرایی اصلی مقایسه " +"کنید. تفاوت های حل نشده را ثبت کنید تا مرحله بعدی نقطه شروع مشخصی داشته " +"باشد." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}ساخت و پخش آن بر روی پلت فرم اصلی.{ph1} این قطعات را با استفاده از " +"معماری اصلی و کامپایلر به برنامه واقعی پیوند دهید. مسیرهای مهم گیم پلی را " +"تمرین کنید. این جایی است که ما می توانیم مشکلات را با حالت مشترک یا شروع که " +"یک مقایسه تابع جدا شده از دست داده است پیدا کنیم." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}معناشناسی را در برابر هر دو مرجع بازسازی کنید.{ph1} یک قسمت منسجم از " +"بازی را در یک زمان بگیرید و مشخص کنید که منبع بازیابی شده آن به چه معناست. " +"بهبود نمایش آن در حالی که حفظ مقایسه دقیق و ساخت تاریخی قابل بازی." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}بندر مدرن را بسازید.{ph1} رفتار ثابت شده را به محیط جدید منتقل کنید ، " +"مانند ساخت 64 بیتی بومی. بازی اصلی-پلتفرم بازسازی شده همچنان مرجع مقایسه " +"رفتار بندر است." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"ساخت قابل پخش از مرحله دوم به یک {ph0}مرجع تأیید دوم (اوراکل){ph1} در طول " +"سوم. اولین مرجع تأیید (اوراکل) بررسی می کند که آیا منبع تغییر یافته ما هنوز " +"کد و داده های اصلی مربوطه را بازتولید می کند یا خیر. دوم بررسی می کند که " +"برنامه بازسازی شده هنوز در مسیرهایی که ما تمرین می کنیم درست می سازد و رفتار" +" می کند." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"آنها اشتباهات مختلفی را می گیرند. تغییر نوع می تواند دستورالعمل های تولید " +"شده را تغییر دهد. تغییر مالکیت می تواند دو قسمت از بازی را با استفاده از " +"نسخه های مختلف حالت ترک کند. نگه داشتن هر دو چک در دسترس به عامل یک شکست " +"مشخص برای تحقیق قبل از حمل یک refactor بیشتر می دهد." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"يه اسم به شواهد خودش نياز داره مقایسه دقیق نمی تواند به ما بگوید که آیا یک " +"میدان واقعا به معنی \"زمان آسیب پذیری است. ما باید این را از نحوه نوشتن و " +"استفاده از بازی ثابت کنیم. اگر معنی نامشخص باقی بماند ، یک نام بی طرف برای " +"خواننده بعدی مفیدتر از یک حدس مطمئن است." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"ما این نظم را از طریق پروژه ها یاد گرفتیم. TH08 قبل از برخی از حسابرسی های " +"بعدی پلتفرم تاریخی خود ، پورت های قابل بازی داشت. این باعث شد که دیدن نقص " +"های خاصی سخت تر شود. این {ph0}جریان کاری فعلی کارخانه{ph1} ساخت پلتفرم اصلی " +"را در اولویت قرار می دهد ، بنابراین کار معنایی می تواند از آن به عنوان مرجع " +"قبل از شروع پورت استفاده کند." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}بازسازی دقیق به ما مرجع می دهد. بازسازی معنایی دانش بازیابی شده را قابل" +" استفاده می کند.{ph1} سپس یک پورت می تواند بر روی هر دو ساخته شود." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "چه چیزی این را به یک تغییر صنعتی تبدیل می کند ؟" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"این پروژه ها جایی که من توجهم را صرف کردم تغییر کردند. وقتی ماموران می " +"توانستند تحقیقات زیادی را به جلو ببرند ، بهبود محیط کارشان یکی از مفیدترین " +"کارهایی بود که می توانستم انجام دهم. یک ابزار بهتر می تواند در هر عملکرد " +"بعدی که به آن نیاز دارد کمک کند." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"استقلال اینجا مهمه مرحله بعدی مفید اغلب تنها پس از یک آزمایش شکست خورده روشن" +" می شود. یک مامور به آزادی کافی برای پیروی از این نتیجه در جایی غیر منتظره " +"نیاز دارد. اگر باید منتظر بمانم تا هر مرحله را تجویز کنم ، بیشتر کار به توجه" +" من وابسته است." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"انتظار دارم که مامور فرضيه هاي اشتباهي بکنه مهم این است که آیا ما می توانیم " +"آنها را آزمایش کنیم و از نتیجه یاد بگیریم. چک شکست خورده باید به آن کمک کند " +"تا اشتباه را به اندازه کافی خوب درک کند تا دوباره امتحان کند. هنوز بايد " +"تصميم بگيرم که آيا شواهد جمع شده از يک نقطه عطف پروژه حمايت ميکنه يا نه" + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA به عامل دسترسی به ابزارهای تجزیه و تحلیل را می دهد. یک سوال در مورد تماس" +" گیرنده یک تابع می تواند مستقیما به بازرسی آن تماس گیرنده منجر شود. پروژه " +"بازسازی کامپایلر و چک های مرجع خود را تامین می کند. مامور می تواند از آن ها " +"برای تست منبع پیشنهادی خود استفاده کند و ببیند که توضیح آن در کجا قرار دارد." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"باگ TH08 نشان می دهد که چرا این چک ها مستحق توجه مهندسی خود هستند. هنگامی که" +" همان مقایسه در صدها تابع استفاده می شود ، شکاف در آن می تواند بسیار بیشتر " +"از یک اشتباه در یک پیاده سازی گسترش یابد. تست چک کننده بازخورد موجود برای " +"تمام کارهای بعدی را بهبود می بخشد." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"تشبیه صنعتی در اینجا یک مثال تاریخی مفید دارد. بولتون و وات یک {ph0}نشانگر " +"موتور بخار در سال 1796{ph1} برای کمک به تنظیم دریچه های موتور. نسخه ضبط شده " +"فشار را از طریق ضربه پیستون ردیابی می کرد. رفتار داخلی موتور را برای بازرسی " +"در دسترس قرار داد. ابزار مقایسه ما به یک هدف مشابه خدمت می کند: آنها به ما " +"اجازه می دهند تا بررسی کنیم که ماشین آلات چه کاری انجام می دهند در حالی که " +"ما آن را بهبود می بخشیم." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}ما در مراحل اولیه این تغییر صنعتی هستیم.{ph1} بخش عمده ای از زیرساخت ها" +" هنوز نابالغ هستند. ماموران می توانند سریع تر از چک های ما حرکت کنند که برای" +" پشتیبانی طراحی شده اند ، بنابراین این فرآیند باید در کنار آنها توسعه یابد. " +"وقتی یک نقص در یک ابزار مشترک پیدا می کنیم ، باید آن را تعمیر کنیم و نتایج " +"تحت تاثیر آن را دوباره بررسی کنیم. پروژه بعدی می تواند یک ابزار قوی تر را به" +" ارث ببرد." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"همچنین یک محدودیت عملی برای هر مکالمه وجود دارد. قبل از اینکه یک بازسازی " +"بزرگ به پایان برسد ، پایان خواهد یافت. مخزن کد منبع باید امکان ادامه جلسه " +"دیگری را بدون از دست دادن دلیل تصمیم قبلی فراهم کند." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"این {ph0}کارخانه بازسازی توهو{ph1} از این نیاز رشد کرد. این به پروژه ها یک " +"راه مشترک برای حمل چک ها و درس های خود را به جلو می دهد. کار بر روی یک بازی " +"می تواند شرایط شروع را برای دیگری بهبود بخشد." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"این چیزی است که تشبیه صنعتی را برای من معنی دار می کند. تجربه شروع به تبدیل " +"شدن به بخشی از ابزارهایی می کند که دیگران می توانند از آن استفاده کنند. " +"بهبود این ابزارها ، میزان کاری که فرد بعدی یا نماینده بعدی می تواند انجام " +"دهد را تغییر می دهد." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "پروژه هایی که اکنون می توانیم در نظر بگیریم" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"سرعت مهم است چون تصمیم برای شروع را تغییر می دهد. یک بازی می تواند برای " +"مهندسی معکوس جذاب باشد و هنوز هم نیاز به توجه بیشتر از آنچه که من می توانم " +"به طور واقع گرایانه به آن بدهم. بسیاری از پروژه ها ایده ها را حفظ می کنند." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"حالا می توانم راهی برای ادامه چنین پروژه ای در تحقیقات مکرر ببینم. بازسازی " +"کار یک پورت نرم افزار را عملی تر می کند. بازیابی معناشناسی قابل خواندن ، کشف" +" یک مود را برای شخص دیگری آسان تر می کند. تلاش برای درک بازی می تواند پس از " +"اجرای نسخه اول ادامه یابد." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"حالا به برنامه ای ناآشنا نگاه می کنم و می پرسم: {ph0}چه دسترسی ، بازخورد و " +"دانش انباشته شده ای به یک نماینده اجازه می دهد تا به طور قابل اعتماد روی این" +" کار کند ؟ {ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"این سوال باعث می شود پروژه هایی را در نظر بگیرم که قبلا تنها می ماندم. " +"هرکدام می توانند روش برخورد ما با روش بعدی را بهبود ببخشند. ميخوام به کاوش " +"ادامه بدم که چقدر ميتونه ما رو ببره" + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "نقاط عطف و منابع پروژه" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"این تاریخ ها نقاط بازرسی ثبت شده پروژه را توصیف می کنند که در تاریخ 10 اکتبر" +" 2026 با تاریخچه عمومی GitHub بررسی شده است. زمان سپری شده زمان تقویم بین " +"commits است. حضور منبع ، مقایسه دقیق ، ساخت و نتیجه زمان اجرا هر نام یک نقطه" +" عطف متفاوت است." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08 :{ph1} {ph2}13 آگوست ادامه{ph3}, {ph4}19 آگوست منبع دفتر کل{ph5}," +" {ph6}24 اوت Linux پورت{ph7}, {ph8}26 آگوست نسخه وب{ph9} و {ph10}30 آگوست " +"نسخه 64 بیتی Linux{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} {ph2}29 آگوست دفتر اولیه{ph3}, {ph4}7 سپتامبر منبع دفتر " +"کل{ph5}, {ph6}8 سپتامبر مقایسه{ph7}, {ph8}9 سپتامبر ارتباط{ph9} و {ph10}10 " +"سپتامبر قابل پخش-رکورد ساخت{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}10 اکتبر تحویل{ph3} بازسازی dos کاری ، تست کامل مسیر " +"عادی نگهدارنده و مرحله 64 بیتی فعلی را ثبت می کند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} TH08 مرجع تأیید (اوراکل) اصلاح:{ph1} {ph2}گزارش شده باگ جمع آوری " +"خودکار{ph3}, {ph4}منبع و اصلاح مقایسه{ph5} و {ph6}حسابرسی مداوم کامل نقطه " +"شناور{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}بازسازی معنایی:{ph1} {ph2} کتاب بازی قابلیت خواندن TH08{ph3} و " +"{ph4}سفارش فاز کارخانه و دو مسیر اعتبارسنجی{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}تاریخچه صنعتی:{ph1} {ph2}رکورد شاخص موتور بخار گروه موزه علوم{ph3} " +"مقدمه سال 1796 و مکانیسم ضبط فشار را توصیف می کند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}روش:{ph1} کارخانه {ph2}خودمختاری عامل{ph3} و {ph4}دانش بازی های " +"متقابل{ph5} اسناد اصول و درس های کاری را حفظ می کنند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}مقالات بیشتر{ph1} · {ph2}بررسی تحقیقات TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "انقلاب صنعتی مهندسی معکوس-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 در مهندسی معکوس دستی ، بازسازی Touhou با عوامل هوش مصنوعی و چگونگی " +"ترکیبات دانش در TH08 ، TH095 و PC-98 TH04 منعکس می شود ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "تجربه انجام شده بین پروژه ها" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "مقاله بازسازی توهو" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}خانه{ph1}{ph2}/{ph3}آزمایشگاه سرعت دایناسور" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "بازرسی → بازسازی → تغییر" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "قانون سرعت دایناسور رو دوباره بساز" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"برای بازسازی شتاب بازی ، ابتدا قاعده ای را پیدا کنید که سرعت آن را کنترل می " +"کند. {ph0} REA اسکریپت در حال اجرا بازگشت;{ph1} ما از قاعده اش برای ساخت این" +" مینی بازی با {ph2}سرعت قابل تنظیم{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}بازی و تغییر سرعت{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}قانون بازیابی شده را بخوانید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}بازسازی را بررسی کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}تجزیه و تحلیل را امتحان کنید{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "بازی و تغییر سرعت" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"بازی را فشار دهید ، سپس از روی کاکتوس بپرید. حرکت لغزنده سرعت به سعی کنید یک" +" بازی کندتر و یا سریع تر; آن را به یک سرعت ثابت سوئیچ. قانون بازیابی شده را " +"انتخاب کنید تا از 6 شروع شود و به تدریج دوباره تسریع شود." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "نسخهٔ بازسازی‌شده را بازی کنید" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "بازی" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "پرش ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "شروع دوباره" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "سرعت" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "از قانون شتاب بازیابی شده استفاده کنید" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "قانون اصلی: از 6 شروع کنید ، سپس به سمت 13 افزایش دهید." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"نوار لغزنده را حرکت دهید تا سرعت خود را تنظیم کنید. فضا یا پرش یک کاکتوس را " +"پاک می کند." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"JavaScript را قادر به بازی بازسازی کنید. کد و توضیح بالا قابل خواندن است." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "خواندن اسکریپت REA بازگشت" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"ما بازرسی کردیم {ph0}نسخه مرورگر مشتق شده از Chromium wayou{ph1} با REA . " +"اون بار رو برگردوند {ph2}، شامل این شاخه در تابع به روز رسانی بازی:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"تنظیمات: {ph0}, {ph1} و {ph2}. این بازی این شاخه را در یک به روزرسانی بدون " +"برخورد اجرا می کند." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "از همان قانون در بازی جدید استفاده کنید" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "کپی" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"مینی بازی از این تابع برای شتاب خودکار استفاده می کند. حرکت دادن اسلایدر به " +"جای آن سرعت ثابت را فراهم می کند. طراحی ، فیزیک پرش و بررسی برخورد مستطیل کد" +" جدیدی برای این بازی آموزشی است ؛ شبیه سازی آن با 60 به روزرسانی در ثانیه " +"پیشرفت می کند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}دانلود قانون سرعت{ph1} · {ph2}کد بازی را بخوانید{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "بازسازی را بررسی کنید" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"ما عملکرد به روز رسانی بازی اصلی را با موانع و برنامه ریزی خودکار غیرفعال " +"نامیدیم. این سرعت های ثبت شده را با تکرار قانون بازیابی شده مقایسه کنید." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "به روز رسانی" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "بازی اصلی" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "قانون بازسازی شده" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "بررسی سرعت را اجرا کنید" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"مقادیر به سه اعشاری گردآوری شده است. شاخه قبل از اضافه کردن چک می کند ، " +"بنابراین افزایش نهایی می تواند سرعت را کمی بالاتر از 13 بگیرد." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "تجزیه و تحلیل را خودتان امتحان کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}راه اندازی REA {ph1} با عامل برنامه نویسی خود را." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"دنبال کنید {ph0}مراحل اتصال مرورگر{ph1}، با استفاده از {ph2} به عنوان URL " +"صفحه." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"به نماینده خود URL صفحه و نقطه پایان اشکال زدایی محلی را بدهید ، سپس این " +"دستور را کپی کنید." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}برای بازرسی این بازی دایناسور از REA استفاده کنید. چرا سریع " +"تر می شود ؟ قانون سرعت را نشان دهید ، سپس یک نسخه کوچک با سرعت قابل تنظیم " +"بسازید.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"درخواست پیگیری: {ph0}\"ارتفاع پرش کجا محاسبه می شود ؟ اضافه کردن کنترل " +"ارتفاع پرش به نسخه جدید.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"منبع: {ph0}کد سرعت بازرسی شده{ph1}، نویسندگان Chromium. {ph2}کپی رایت و مجوز" +" BSD{ph3}. REA 4.1.0 نسخه http در حال اجرا را در Chrome 150 بازرسی کرد." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "بازی دایناسور Chrome: قانون سرعت خود را بازسازی کنید-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"قانون سرعت بازی دایناسور را با REA بخوانید ، آن را بازسازی کنید ، سپس سرعت " +"را تغییر دهید و بازی کنید." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "بازسازی سرعت دایناسور" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"دایناسور مینی بازی. در حالی که بازی متمرکز است از دکمه پرش یا فضای فشار " +"استفاده کنید." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "کپی قانون سرعت بازسازی شده" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "کپی دایناسور تجزیه و تحلیل فوری" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}خانه{ph1} / سوالات متداول" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA سوالات متداول." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "راه اندازی ، به روز رسانی ، تجزیه و تحلیل و عیب یابی." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "موضوعات" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}راه اندازی و به روز رسانی{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}تحلیل{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}عیب یابی{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}داده ها و اشتراک گذاری{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "راه اندازی و به روز رسانی" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "چطور REA را نصب کنم؟" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "ترمینال * راه اندازی عامل" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "کپی" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"راه‌اندازی، اتصال MCP مربوط به REA را ثبت و مهارت تحلیل آن را نصب می‌کند. پس" +" از پایان، دستیار را دوباره اجرا کنید و مسیر فایل و پرسش خود را به آن بدهید." +" پیش‌نیازها و مراحل اولین تحلیل در {ph0}راهنمای راه‌اندازی{ph1} آمده است." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "کدام عوامل کدگذاری می توانند از REA استفاده کنند ؟" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"هر مامور که از محلی حمایت می کنه MCP سرورها راه اندازی شامل Claude Code, " +"Claude دسکتاپ, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP و VS Code. " +"اتصال Grok Bot از چت آن اضافه شده است." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}عامل برنامه نویسی خود را وصل کنید{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "چطور REA را به‌روز کنم؟" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA اغلب منتشر می شود ، از جمله رفع اشکال. اگر CLI را با npm نصب کرده اید :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "ترمینال * نصب CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"دستور setup refresh چاپ شده توسط update را دنبال کنید. اگه ماموريت رو از " +"طريق {ph0}، فرار کن:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "ترمینال * راه اندازی عامل تازه" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"تغییرات را بررسی و دستیار را دوباره اجرا کنید. اتصال REA از نسخه مشخصی از " +"بسته استفاده می‌کند؛ برای استفاده از نسخه جدید، راه‌اندازی را دوباره انجام " +"دهید. برای اجرای یک دستور CLI، دستور مورد نظر را پس از {ph0} بنویسید." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "نصب مهارت از skills.sh کافيه ؟" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"مهارت به مامور شما دستورالعمل تحقیق میده فرار کن {ph0} REA راه اندازی{ph1} " +"برای اتصال سرور MCP و نصب مهارت تطبیق ، سپس عامل خود را دوباره راه اندازی " +"کنید تا بتواند ابزارها را فراخوانی کند." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "تحلیل" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "با REA چه چیزی را می توانم تجزیه و تحلیل کنم ؟" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "با نوع نرم افزاری که دارید شروع کنید:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}فایل های اجرایی بومی و کتابخانه ها{ph1}: توابع ، مونتاژ ، شبه کد و " +"مرجع." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} برنامه های JavaScript و Electron{ph1}: ماژول ها ، واردات ، IPC و مکان " +"های منبع." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "{ph0}صفحات مرورگر{ph1}: اسکریپت ها ، درخواست ها و مشاهدات زمان اجرا." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA همچنین دارای گردش کار برای مجموعه های مدیریت شده ، Apk های Android ، " +"سیستم عامل و منابع بسته بندی شده است. {ph0}مشاهده مطالعات موردی{ph1} برای " +"تحقیقات کار." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "آیا به Hopper ، Ghidra یا IDA نیاز دارم ؟" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"تجزیه و تحلیل عمیق برنامه های کد ماشین از یکی از آنها استفاده می کند. بازرسی" +" استاتیک JavaScript و. NET با فایل های ارائه شده کار می کنند و نیازی به " +"تجزیه و تحلیل موتور برنامه های کد ماشین ندارند." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"نصب Ghidra یا IDA موجود خود را وصل کنید یا اجازه دهید راه اندازی Hopper را " +"تشخیص دهد و یک نصب را پیشنهاد کند. میزبان و هدف شما تعیین می کنند که کدام " +"ارائه دهنده می تواند مورد استفاده قرار گیرد. {ph0}راه اندازی تجزیه و تحلیل " +"برنامه های کد ماشین{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "آیا می توانم از REA بدون یک عامل کدگذاری استفاده کنم ؟" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"بله. CLI از همان جریان های کاری تجزیه و تحلیل استفاده می کند. برای یک برنامه" +" محلی JavaScript یا Electron:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "ترمینال * تجزیه و تحلیل کاربرد استاتیک" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"مسیر را با یک پوشه برنامه استخراج شده یا فایل ASAR جایگزین کنید. {ph0}از CLI" +" استفاده کنید {ph1} برای گزینه های نصب." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "REA چه کدی برمی‌گرداند؟" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"تحلیل برنامه‌های بومی، اسمبلی و شبه‌کد را همراه با فراخوانی توابع، ارجاع‌ها " +"و ثابت‌های مرتبط برمی‌گرداند. تحلیل JavaScript ماژول‌ها، ارتباط بین آن‌ها و " +"محل کد منبع را برمی‌گرداند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"نماینده شما از این یافته ها برای توضیح رفتار یا نوشتن و تست یک پیاده سازی " +"استفاده می کند. این {ph0} محاسبه DX-Ball{ph1} و {ph2}چک کننده پرچم CTF{ph3} " +"نشان دهید که این فرآیند چگونه کار می کند." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "از دستیار چه بپرسم؟" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"به آن یک هدف محلی و یک رفتار برای تحقیق بدهید. برای یک برنامه JavaScript یا " +"Electron:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"مسیر را با هدف خود جایگزین کنید. این {ph0}راهنماها{ph1} ارائه راهنمایی برای " +"نمونه های بومی ، Electron و مرورگر." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "عیب یابی" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "چرا نماینده من نمیتونه ابزار REA رو ببینه؟" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"بعد از راه اندازی دوباره کارگزار خود را راه اندازی کنید یا دوباره وصل کنید. " +"ثبت نام REA خود را با {ph0}; برای Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "ترمینال * یک مشتری را بررسی کنید" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"جایگزین کنید {ph0} با شناسه مشتری شما ، مانند {ph1} یا {ph2}. اگر گزارش ثبت " +"نام گمشده یا قدیمی را نشان می دهد ، برای آن مشتری تنظیم کنید:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "ترمینال * تعمیر راه اندازی یک مشتری" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"برنامه اش رو مرور کن و مشتری رو دوباره راه بنداز اگر ثبت نام سالم است اما " +"ابزارها وجود ندارند ، خطای اتصال MCP مشتری را بررسی کنید. {ph0}تشخیص راه " +"اندازی بیشتر{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "آیا باید ابتدا Hopper را شروع کنم؟" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA شروع Hopper زمانی که یک عملیات به آن نیاز دارد. در macOS ، اولین انتخاب " +"حالت دمو یا فعال سازی مجوز را قبل از تجزیه و تحلیل بدون نظارت تکمیل کنید. " +"{ph0}مشاهده راه اندازی ارائه دهنده بومی{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "اگر با خطا روبه‌رو شدم چه کنم؟" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}به روز رسانی REA {ph1}، مامور خود را دوباره راه اندازی کنید و همان کار " +"را دوباره امتحان کنید. انتشار اخیر ممکن است مشکل را حل کند." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"اگر ادامه داشته باشد, {ph0}باز کردن یک موضوع{ph1} با نسخه REA ، سیستم عامل ،" +" نوع هدف ، مراحل بازتولید و خروجی خطا. شامل نام ارائه دهنده زمانی که مشکل " +"شامل تجزیه و تحلیل برنامه های کد ماشین است." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "داده ها و اشتراک گذاری" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "آیا REA برنامه من را آپلود می کند ؟" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA اهداف را در دستگاه شما تجزیه و تحلیل می کند. نماینده شما نتایج را دریافت" +" می کند و سیاست داده ارائه دهنده مدل آن برای این نتایج اعمال می شود." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "چگونه می توانم یک مثال را به اشتراک بگذارم یا کمک کنم ؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"یک مثال REA مفید داشته باشید ؟ خوشحال میشیم ببینیمش هدف ، سوال شما ، یافته " +"ها و نحوه بررسی آنها را در یک {ph0}مسئله{ph1} یا {ph2}درخواست کشیدن{ph3}. " +"گزیده ها و ارقام کوتاه کد به دیگران کمک می کند تا تحقیقات را دنبال کنند." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"گزارش های باگ ، درخواست های ویژگی ، مستندات و بهبود کد نیز مورد استقبال قرار" +" می گیرند. شما همچنین می توانید در مورد یک مثال در {ph0}جامعه{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA سوالات متداول: راه اندازی ، به روز رسانی و عیب یابی" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"پاسخ به سوالات رایج REA: نصب ، به روز رسانی ، ابزارهای تجزیه و تحلیل ، عوامل" +" کدگذاری ، عیب یابی و به اشتراک گذاری نمونه ها." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "سوالات متداول در مورد REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "کپی REA دستور راه اندازی" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "کپی REA دستور به روز رسانی" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "دستور Copy agent setup refresh" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "کپی REA CLI دستور تجزیه و تحلیل" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "کپی مثال تجزیه و تحلیل prompt" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "دستور تشخیص مشتری را کپی کنید" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "دستور Copy scoped setup" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}خانه{ph1} / اولین تحقیق شما" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "پیدا کردن که در آن{ph0}اسکناس های صادر شده می روند." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"از REA برای بازرسی یک برنامه کوچک استفاده کنید ، دکمه یادداشت های صادراتی آن" +" را دنبال کنید و خودتان یک جزئیات را بررسی کنید." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "در این تمرین" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. راه اندازی{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. درباره صادرات بپرسید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. پاسخ را دنبال کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. پیش بینی را بررسی کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. سوال دیگری بپرسید{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. نماینده خود را به REA متصل کنید" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "کپی" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "یا این دستور را در ترمینال خود اجرا کنید:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"نقشه رو بررسي کن ، راه اندازي رو تاييد کن ، بعد ماموريت رو دوباره راه بنداز." +" در حال حاضر متصل? ادامه در زیر." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. بپرسید CSV کجا نوشته شده است" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"مثال یک برنامه شش فایل Electron با یک {ph0}یادداشت های صادراتی{ph1} دکمه. " +"نماینده شما می تواند کد خود را بدون نصب یا راه اندازی Electron بازرسی کند ." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"نماینده شما فایل ها را بارگیری می کند و پوشه بسته بندی نشده را برای بازرسی " +"به REA می دهد." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}دانلود نمونه زیپ{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"اگر نماینده شما نمی تواند فایل ها را دانلود کند ، خودتان این آرشیو را باز " +"کنید. راه رو به سمت {ph0} پوشه و همان سوال صادرات." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. پاسخ را به کد دنبال کنید" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "به دنبال یک توضیح کوتاه با مرجع فایل و خط باشید:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"دکمه یک {ph0} پیام. فرآیند اصلی یادداشت ها را به عنوان CSV فرمت می کند و می " +"نویسد {ph1} در پوشه Downloads کاربر. ستون ها عبارتند از {ph2} و {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "از دکمه به نویسنده فایل" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"تجزیه و تحلیل استاتیک REA پیام را با کنترل کننده آن جفت می کند. مقصد از کد " +"خوانده می شود." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"مسیر فایل ، formatter و write call در این handler با هم هستند. از مامور خود " +"بخواهید که این خطوط را نشان دهد اگر پاسخ آن آنها را از بین ببرد." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}مشاهده کد کامل ردیابی و ثبت REA نتیجه{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. پیش بینی را بررسی کنید" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"یک کاما ستون های CSV را جدا می کند. چه اتفاقی می افتد وقتی یک عنوان یادداشت " +"خود شامل یک علامت یا علامت نقل قول است ؟" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "خودتان چک را اجرا کنید" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "باز کردن یک ترمینال در بسته بندی نشده {ph0} پوشه:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"این دستور از یک پوسته با پشتیبانی از here-document مانند Bash یا Zsh استفاده" +" می کند. نماینده شما می تواند همان JavaScript را در پوسته پلتفرم شما اجرا " +"کند." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. سوال دیگری بپرسید" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "در همان مکالمه پیگیری کنید:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"اگه فایل نتونه نوشته بشه چی میشه ؟ خطای بازگشت به صفحه را دنبال کنید." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"یا به نماینده خود برنامه خود را بدهید و در مورد یک دکمه ، پرونده یا رفتار " +"بپرسید." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}چگونه Notion متن و HTML را کپی می کند{ph1}{ph2}یک ویژگی کلیپ بورد را در" +" یک برنامه بسته بندی شده Electron دنبال کنید.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}چگونه DX-Ball موقعیت صدا استریو را محاسبه می کند{ph1}{ph2}دستورالعمل " +"های اصلی و چک های بازسازی را بخوانید.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}عیب یابی ، راه اندازی یا تجزیه و تحلیل{ph1}{ph2}REA را به روز کنید و در" +" صورت گیر افتادن اتصال را بررسی کنید.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "اولین تحقیق مهندسی معکوس شما-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"REA را در یک برنامه یادداشت کوچک امتحان کنید. نماینده خود را تنظیم کنید ، " +"بپرسید که یادداشت های صادر شده کجا می روند و قالب CSV را با عنوان نمونه " +"بررسی کنید." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "اولین تحقیق REA شما" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "کپی REA نصب و راه اندازی prompt" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "دستور Copy setup" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "یادداشت های کپی تحقیقات فوری" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "کپی CSV چک prompt" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "دستور copy formatter check" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}خانه{ph1} / شروع کن" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "REA را تنظیم کنید ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"REA را به عامل کدگذاری خود متصل کنید یا یک برنامه محلی را از ترمینال خود " +"بازرسی کنید." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "ترمینال رو باز کن و چک کن:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "ترمینال" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "کپی" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows PowerShell" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"اگر از شما خواسته شود که شرایط را بپذیرید ، نوع Y را تایپ کنید. PowerShell " +"را ببندید ، دوباره آن را باز کنید ، سپس اجرا کنید {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"اگر PowerShell بعدا می گوید {ph0}\"اجرای اسکریپت ها در این سیستم غیرفعال " +"است\"{ph1} وقتی می دوید {ph2}، اين رو يه بار اجرا کن و دوباره امتحان کن:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "اگر از Homebrew استفاده می کنید :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS * Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "در غیر این صورت:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "ترمینال رو ببند ، دوباره بازش کن ، بعد:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"نصب کننده نیاز دارد {ph0} و {ph1} (در دبیان / اوبونتو: {ph2}). ترمینال رو " +"ببند ، دوباره بازش کن ، بعد:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"توزیع خود را {ph0} بسته اغلب قدیمی تر از 22.19 است ، بنابراین بررسی کنید " +"{ph1} اگر به جای آن استفاده کنید." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"یک نصب کننده معمولی را ترجیح می دهید ؟ دانلود نسخه LTS از " +"{ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "گزینه های راه اندازی" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}عامل برنامه نویسی خود را وصل کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}از CLI استفاده کنید {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}راه اندازی تجزیه و تحلیل برنامه های کد ماشین{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}کمک گرفتن{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "عامل برنامه نویسی خود را وصل کنید" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"راه اندازی را اجرا کنید تا REA را به عامل برنامه نویسی خود متصل کنید. انتخاب" +" های مشتری شامل Claude Code ، Codex ، Cursor ، Gemini CLI ، Windsurf ، Grok " +"Build و سایر مشتریان MCP پشتیبانی شده است. اتصال Grok Bot از چت آن اضافه شده" +" است." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "تازه وارد برنامه نویسی ؟" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"یک عامل کدگذاری یک دستیار هوش مصنوعی است که به جای یک برگه مرورگر در رایانه " +"شما کار می کند. می تواند فایل ها را بخواند و دستورات را اجرا کند و قبل از " +"ایجاد تغییرات می پرسد. REA به آن ابزار مهندسی معکوس می دهد." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"اگر هنوز یکی ندارید ، یکی را انتخاب کنید ، صفحه نصب آن را دنبال کنید و وارد " +"شوید:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code {ph2}{ph3} توسط Anthropic . نیاز به یک طرح Claude " +"پرداخت می شود." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex {ph2}{ph3} توسط OpenAI . با حساب ChatGPT خود وارد شوید." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode {ph2}{ph3}، منبع باز ارائه دهنده مدل مورد نظر خود را " +"متصل کنید." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"سپس آن را باز کرده و دستور زیر را در آن کپی کنید. عامل راه اندازی REA را " +"اجرا می کند و قبل از تغییر هر چیزی برنامه را به شما نشان می دهد." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "یا خودتان راه اندازی کنید" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "چگونه ترمینال را باز کنم ؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} منوی Start را باز کنید ، تایپ کنید {ph2}پاور شل{ph3} و " +"Enter را فشار دهید." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} مطبوعات {ph2} {ph3}، تایپ کنید {ph4}ترمینال{ph5} و Enter " +"را فشار دهید." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "{ph0} Linux :{ph1} مطبوعات {ph2} {ph3} {ph4} در اکثر دسکتاپ ها" + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"یک دستور را با {ph0} {ph1} (macOS : {ph2} {ph3}; ترمینال های Linux: {ph4} " +"{ph5} {ph6}), سپس Enter را فشار دهید." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"مشتری خود را انتخاب کنید و برنامه راه اندازی را بررسی کنید. REA اتصال MCP و" +" مهارت تحقیق تطبیق را اضافه می کند و پشتیبان گیری از پیکربندی موجود را حفظ " +"می کند. قبل از اعمال تغییرات می پرسد." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "مشتری خود را پس از اتمام راه اندازی دوباره راه اندازی کنید." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "چطور موکلم رو دوباره راه بندازم ؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}برنامه های دسکتاپ{ph1} (Claude دسکتاپ ، Cursor ، Windsurf ، VS Code ): " +"برنامه را به طور کامل ترک کنید ، سپس دوباره آن را باز کنید. بستن پنجره کافی " +"نیست. در مطبوعات macOS {ph2} {ph3}; در Windows ، اگر یکی وجود داشته باشد ، " +"از آیکون سینی نیز خارج شوید." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}عوامل ترمینال{ph1} (Claude Code ، Codex ، Gemini CLI ): از جلسه خارج " +"شوید و دوباره شروع کنید." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"به نماینده خود یک مسیر هدف و یک سوال خاص بدهید. برای یک برنامه JavaScript یا" +" Electron ، ممکن است با:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"نگاه کن {ph0} و نحوه صادرات داده ها را پیدا کنید. نقاط ورود ، تماس ها و " +"وابستگی های مربوطه را با مکان های منبع برای یافته های خود نشان دهید." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "مسیر را با هدف محلی خود جایگزین کنید." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "چطور می توانم مسیر کامل یک پوشه را بدست آورم ؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} در File Explorer ، روی پوشه کلیک راست کرده و انتخاب " +"کنید {ph2}کپی به عنوان مسیر{ph3}. در Windows 10 ، هنگام کلیک راست ، Shift را" +" نگه دارید." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} در Finder ، روی پوشه کلیک راست کنید ، گزینه hold را " +"انتخاب کنید {ph2}\"...\" را به عنوان نام مسیر کپی کنید{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}هر سیستم:{ph1} پوشه را به یک پنجره ترمینال بکشید و مسیر آن ظاهر می شود." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" +"در یک ترمینال ، نقل قول ها را در اطراف مسیری قرار دهید که شامل فضاها است." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "از CLI استفاده کنید" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"یک پوشه برنامه JavaScript یا Electron یا آرشیو ASAR را بدون اجرای برنامه " +"تجزیه و تحلیل کنید:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "تجزیه و تحلیل کاربرد استاتیک" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"مسیر را با دایرکتوری برنامه استخراج شده خود جایگزین کنید یا {ph0} فایل. در " +"Windows ، مسیری مانند {ph1} اینجا کار میکنه" + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "کجا یه اپلیکیشن پیدا کنم ؟ فایل آسار?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "برنامه های Electron معمولا آن را در یک {ph0} پوشه:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (روی برنامه کلیک راست کنید و انتخاب کنید {ph3}نمایش" +" محتویات بسته{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} اغلب {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"برخی از برنامه ها در جای دیگری نصب می شوند. پوشه برنامه را جستجو کنید {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"نتیجه برنامه را شناسایی می کند ، اتصالات بین ماژول ها را نشان می دهد و مکان " +"منبع آنها را می دهد. اتصالات REA نمی تواند حل شود در نتیجه مشخص شده است." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "اگه ميخواي يه {ph0} فرمان در پوسته شما:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "CLI را نصب کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}ادامه با راهنمای برنامه JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "راه اندازی تجزیه و تحلیل برنامه های کد ماشین" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"برنامه های کد ماشین نیاز به یک ابزار تجزیه و تحلیل محلی دارند. یکی را در زیر" +" انتخاب و پیکربندی کنید ، سپس به REA فایل اجرایی یا کتابخانه خود را بدهید." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "یک ابزار را انتخاب کنید: Ghidra ، Hopper یا IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"از Ghidra 12.1 موجود استفاده کنید.نصب x و یک JDK 21 64 بیتی یا جدیدتر در " +"Linux یا macOS ، در x64 یا arm64. نصب Ghidra شما به یک تجزیه کننده بومی برای" +" معماری میزبان شما نیاز دارد. قبل از اجرای تنظیمات مسیرها را تنظیم کنید:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "نصب Ghidra خود را وصل کنید" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "اتصال Ghidra * macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"هر دو مسیر را با تاسیسات موجود خود جایگزین کنید. تنظیمات آنها را بررسی می " +"کند و تنظیمات معتبر را برای مشتری انتخاب شده شما ثبت می کند. در Linux arm64 " +"، ممکن است لازم باشد تجزیه کننده بومی Ghidra را جداگانه بسازید." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "اتصال Ghidra در Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 دارای پشتیبانی تجربی و فقط برای خواندن برای برنامه های بومی x86 " +"و x64 PE و Dll ها در درایوهای ntfs محلی ثابت است. از Ghidra 12.1 موجود " +"استفاده کنید.x نصب و 64 بیتی JDK 21 یا جدیدتر:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "اتصال Ghidra * Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"دو مسیر را با نصب های خود جایگزین کنید ، سپس برنامه راه اندازی را بررسی " +"کنید." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Hopper را در macOS یا Linux متصل کنید . دستور setup را در بالا اجرا کنید ؛ " +"این دستور یک نصب موجود را تشخیص می دهد یا یک برنامه نصب برای تأیید شما ارائه" +" می دهد." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"در macOS ، انتخاب اولین اجرا Hopper از حالت نمایشی یا فعال سازی مجوز را قبل " +"از تجزیه و تحلیل بدون نظارت تکمیل کنید." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"تنظیمات IDA تأیید شده از Windows استفاده می کنند ، با ثبت نام MCP موجود برای" +" یک رابط کاربری گرافیکی متصل یا یک پایگاه داده بدون سر. تجزیه و تحلیل بدون " +"سر Linux و macOS هنوز تایید نشده است." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "ثبت نام IDA MCP موجود را وصل کنید" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"سرور بالا رو فعال نگه دار {ph0}, {ph1} و اختیاری {ph2} در یک فایل JSON. یک " +"موجود {ph3} شی با یک {ph4} ورود نیز پذیرفته می شود. نقطه REA در آن فایل قبل " +"از راه اندازی:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "اتصال IDA * Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"پروفایل پیوست شده از ابزارهای upstream legacy 1.4.0 با باینری اصلی که قبلا " +"در IDA باز شده است استفاده می کند . پروفایل بدون سر از api upstream " +"database-supervisor و ثبت نام با {ph0}; بررسی واقعی را پوشش می دهد IDA 9.3 " +"Windows x64 سرپرست. پزشک ثبت نام را بدون شروع IDA بررسی می کند ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"به REA مسیر اجرایی اصلی را با {ph0} در یک پرس و جو CLI. برای یک نماینده ، " +"شامل {ph1} در محیط ثبت REA و انتخاب کنید IDA هنگام باز کردن باینری." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "برای یک راه اندازی Ghidra موجود ، یک تابع را با:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "تجزیه و تحلیل عملکرد" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "جایگزین کنید {ph0} با نام تابع یا آدرس که می خواهید بازرسی کنید." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "چگونه تجزیه و تحلیل برنامه های کد ماشین جلسات کار می کنند" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"هر دستور CLI باینری را وارد و تجزیه و تحلیل می کند ، سپس جلسه خود را می " +"بندد. پرس و جوهای MCP نماینده شما در حالی که جلسه باز است ، از باینری وارد " +"شده استفاده می کند." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}یک مثال از تجزیه و تحلیل برنامه های کد ماشین را دنبال کنید{ph1} برای " +"دیدن اینکه چگونه نتیجه تابع منجر به محاسبه بازیابی می شود." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "کمک گرفتن" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "اگر نماینده شما REA را نمی بیند" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"مشتری را پس از راه اندازی مجددا راه اندازی کنید یا دوباره وصل کنید. اتصال " +"REA خود را با {ph0}; برای Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "بررسی یک مشتری" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "اگر یک ارائه دهنده نیاز به توجه داشته باشد" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "ارائه دهنده ای که استفاده می کنید را بررسی کنید. برای Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "یک ارائه دهنده را بررسی کنید" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "گزارش چک شکست خورده و گام بعدی پیشنهاد شده را ارائه می دهد." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} REA سوالات متداول{ph1}{ph2}پاسخ های سریع در مورد به روز رسانی ها ، " +"عوامل و تجزیه و تحلیل.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}راهنمای تحقیق را انتخاب کنید{ph1}{ph2}نمونه های کار شده برای یک باینری " +"، یک برنامه Electron و یک مرورگر.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "{ph0} مسائل GitHub{ph1}{ph2}گزارش یک مشکل با دستور و تشخیص.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} جامعه REA{ph1}{ph2}سوالات ، تحقیقات و کار در حال انجام است.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "REA را نصب کنید و عامل کدگذاری خود را تنظیم کنید" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"REA را به عامل برنامه نویسی خود متصل کنید یا یک برنامه محلی JavaScript یا " +"Electron را از ترمینال بازرسی کنید. راه اندازی ، سوالات اول و راهنمای ارائه " +"دهنده بومی." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "نسخه Node.js را کپی کنید" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "کپی Node.js دستور نصب برای Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "کپی PowerShell اجرای دستور سیاست" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "کپی Homebrew Node.js دستور نصب" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "کپی دستور نصب fnm برای macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "کپی Node.js 24 دستورات برای macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "کپی دستور نصب fnm برای Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "کپی Node.js 24 دستورات برای Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "راهنمای شروع REA" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "کپی REA نصب و راه اندازی prompt" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "دستور Copy agent setup" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "دستور تجزیه و تحلیل JavaScript را کپی کنید" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "دستور نصب CLI را کپی کنید" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "کپی اتصال ghidra · macos / لینوکس" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "کپی اتصال Ghidra برای Windows PowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "کپی اتصال IDA برای Windows PowerShell" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "کپی دستور تجزیه و تحلیل تابع بومی" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "دستور تشخیص مشتری را کپی کنید" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "دستور تشخیص ارائه دهنده کپی" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}خانه{ph1} / {ph2}راهنماها{ph3} / مشاهده مرورگر" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "ببینید چه اتفاقی می افتد{ph0}وقتی کلیک می کنید." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"از یک برنامه مرورگر کوچک برای اتصال یک عمل ، درخواست شبکه آن و JavaScript که" +" یک بارگیری ایجاد می کند استفاده کنید." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "در این راهنما" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}مثال{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}مرورگر را باز کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}از نماینده خود بپرسید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}ضبط از CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}درخواست و اسکریپت را بخوانید{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "وقتی روی Export کلیک می کنید چه اتفاقی می افتد ؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"این {ph0}یادداشت مثال مرورگر{ph1} دارای یک {ph2}یادداشت های صادراتی{ph3} " +"دکمه. با کلیک بر روی آن بارگذاری می شود {ph4}، دو یادداشت را به عنوان CSV " +"فرمت می کند و شروع به دانلود می کند." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "از کلیک تا دانلود CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * شما{ph1}{ph2}روی یادداشت های صادرات کلیک کنید{ph3}{ph4}عمل را در " +"مرورگر خود انجام دهید در حالی که ضبط در حال اجرا است.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA {ph1}{ph2}ثبت درخواست{ph3}{ph4}Capturel درخواست ، وضعیت پاسخ و" +" ساختار JSON را از صفحه انتخاب شده ضبط کنید.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * نماینده شما{ph1}{ph2}کد صادرات را بخوانید{ph3}{ph4}درخواست مشاهده " +"شده را به {ph5} در {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "قبل از کلیک بر روی یادداشت های صادرات ، ضبط را شروع کنید." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Chrome را با اشکال زدایی از راه دور باز کنید" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"مثال یادداشت های میزبان را با یک پروفایل مرورگر جداگانه و یک پورت اشکال " +"زدایی محلی باز کنید. در Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "مرورگر مثال را شروع کنید" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "کپی" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"از مسیر اجرایی مرورگر نصب شده خود در macOS یا Windows استفاده کنید . شما می " +"توانید URL صفحه را با صفحه دیگری که می خواهید بازرسی کنید جایگزین کنید." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA به این مرورگر موجود متصل می شود. شما کنترل صفحه را حفظ می کنید ، عمل را " +"انجام می دهید و مرورگر را پس از اتمام بسته می کنید." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "از مامور خود بخواهید که یک عمل را تماشا کند" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}از REA برای بازرسی این صفحه استفاده کنید در حالی که من روی " +"یادداشت های صادرات کلیک می کنم. چه درخواستی دارد و CSV چگونه ساخته می شود ؟ " +"{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"مثال سریع. به نماینده خود نقطه پایان اشکال زدایی را بدهید, {ph0}، و URL " +"صفحه. بگذارید قبل از کلیک ضبط را شروع کند." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"نماینده شما هدف صفحه را کشف می کند ، یک پنجره مشاهده را شروع می کند و شواهد " +"حاصل را می خواند. سپس می تواند اسکریپت پشت صادرات را بررسی کند." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "یا از ترمینال ضبط کنید" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "شناسه هدف صفحه را پیدا کنید:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "صفحه را پیدا کنید" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"هدف را با Notesl مثال یادداشت ها انتخاب کنید. جایگزین کنید {ph0} در زیر با " +"ID آن ، سپس اجرا:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "ده ثانیه ی بعد رو ضبط کن" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"اجازه دهید دستور برای چند ثانیه متصل شود ، سپس روی {ph0}یادداشت های " +"صادراتی{ph1} در اون مرورگر نتیجه پس از پایان پنجره مشاهده می رسد." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"نتیجه گرفته شده شامل صفحه انتخاب شده ، فعالیت شبکه در طول آن پنجره و شکل " +"پاسخ JSON است. درخواست های قبلی خارج از این دستگیری است." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "درخواست و اسکریپت صادرات را بخوانید" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "با REA 4.1.0 در مثال یادداشت های محلی ضبط شده است" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "واقعیت ثبت شده" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "ارزش" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "درخواست" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "پاسخ" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "درخواست آغازگر" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * اسکریپت" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "ساختار پاسخ" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} با {ph1} و {ph2} رشته ها" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "اسکریپت های لود شده را بخوانید" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"درخواست منبع داده و سوابق REA را شناسایی می کند {ph0} به عنوان آغازگر آن. " +"منبع اسکریپت ضبط شده را بخوانید تا ببینید که چگونه از داده ها استفاده می " +"شود:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"دانلود در صفحه با استفاده از پاسخ JSON ساخته شده است. مرحله قالب بندی CSV از" +" اسکریپت می آید ؛ ضبط شبکه ثابت می کند که این کلیک درخواست شده است {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"اسکریپت مورد نظر را پیدا کنید {ph0}. چگونه از عناوین حاوی کاما یا علامت نقل " +"قول فرار می کند ؟" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"برای نصب JavaScript یا Electron برنامه ، ادامه با {ph0}گردش کار برنامه{ph1} " +"برای دنبال کردن فایل ها و پردازش مرزهای." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "تجزیه و تحلیل مرورگر و شبکه-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"مشاهده صادرات یادداشت با REA: یک صفحه مرورگر را انتخاب کنید ، یک کلیک را ضبط" +" کنید ، درخواست را بررسی کنید و اسکریپت صادرات را دنبال کنید." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "مشاهده مرورگر" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "کپی کنید ، مرورگر نمونه را شروع کنید" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "کپی مثال prompt" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "کپی پیدا کردن صفحه" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "کپی گرفتن ده ثانیه بعدی" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "کپی خواندن اسکریپت های لود شده" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}خانه{ph1} / راهنماها" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "راهنماهای REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"تجزیه و تحلیل یک تابع بومی ، صادرات Electron یا درخواست مرورگر. هر راهنما " +"شامل یک پیام ، کد و نتایج است." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "اولین تحقیق" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "راه اندازی REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "عامل کدگذاری خود را وصل کنید یا از REA از ترمینال استفاده کنید." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "با REA شروع کنید" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "برنامه های کد ماشین" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "بازیابی محاسبه موقعیت صدای چپ / راست" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"با یک فایل اجرایی بازی Windows شروع کنید. دستورالعمل ها را بازرسی کنید ، یک " +"تماس گیرنده را دنبال کنید ، ثابت های عددی را بخوانید و C بازیابی شده را " +"بررسی کنید." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "تجزیه و تحلیل برنامه های کد ماشین راهنما" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript و Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "صادرات CSV را دنبال کنید" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"یک برنامه یادداشت های کوچک یک ویژگی را در رندر ، پیش بارگذاری و فرآیند اصلی " +"گسترش می دهد. از REA برای اتصال API ، کانال IPC و file writer استفاده کنید." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "راهنمای JavaScript و Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"برای یک برنامه بسته بندی بزرگتر ، دنبال کنید {ph0} پل کلیپ بورد Notion{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "رفتار مرورگر" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "مشاهده یک کلیک" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"یک مثال یادداشت های کاری را باز کنید ، یک درخواست صادرات را ضبط کنید و کد را" +" پیدا کنید که پاسخ آن را به یک دانلود تبدیل می کند." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "راهنمای مشاهده مرورگر" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "راهنماهای مهندسی معکوس-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"REA را از طریق نمونه های کوتاه کار شده یاد بگیرید: یک محاسبه بومی ، یک " +"صادرات Electron CSV و یک درخواست مرورگر." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}خانه{ph1} / {ph2}راهنماها{ph3} / JavaScript و Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "ردیابی Electron {ph0} صادرات CSV." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"یک دکمه را دنبال کنید از API صفحه ، از طریق Electron IPC ، به CSV file " +"writer کلیک کنید." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "در این راهنما" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}مثال{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}از نماینده خود بپرسید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}کد صادرات را ردیابی کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}مثال را امتحان کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}نویسنده CSV را بازرسی کنید{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "\"یادداشت های صادراتی\" به کجا می رود؟" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"این راهنما از یک برنامه کوچک Electron استفاده می کند. کلیک کردن {ph0}یادداشت" +" های صادراتی{ph1} یک API را در صفحه فرا می خواند ، به فرآیند اصلی می رود و " +"یک CSV می نویسد . این رفتار در چندین پرونده پخش شده است." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "صادرات CSV در سراسر فرآیندهای Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}رندر → پیش بارگذاری{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} تماس API در معرض توسط" +" {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}بین فرایندها{ph1}{ph2}{ph3}{ph4}{ph5}پیش بارگذاری یک کانال IPC را فرا " +"می خواند: یک پیام نامگذاری شده به فرآیند اصلی.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}فرایند اصلی{ph1}{ph2}یک کنترل کننده صادرات{ph3}{ph4}{ph5} اون کانال رو " +"اداره ميکنه و به نويسنده CSV زنگ ميزنه{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} یادداشت ها را فرمت می کند → {ph1} می نویسد {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA با تماس IPC واقعی با کنترل کننده آن مطابقت دارد و API در معرض را شناسایی" +" می کند. مسیر از کد استنباط می شود ؛ یک ضبط زمان اجرا می تواند بررسی کند که " +"چه چیزی اجرا می شود." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "درباره صادرات CSV بپرسید" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}نماینده خود را به REA متصل کنید {ph1} و به آن دایرکتوری برنامه یا فایل " +"ASAR را بدهید:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "کپی" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استفاده از REA برای پیدا کردن آنچه اتفاق می افتد زمانی که من" +" صادرات یادداشت در این برنامه. CSV در کجا ایجاد شده است ؟ {ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "مثال سریع. شامل مسیر مطلق به پوشه برنامه یا {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA فایل های برنامه را می خواند و نقشه ای از نقاط ورودی ، ماژول ها و مرزهای " +"فرآیند را می سازد. مامور شما از اون نقشه استفاده ميکنه تا تحقيقات رو به " +"خصوصيت صادرات محدود کنه" + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "کد صادرات را ردیابی کنید" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "صفحه یک API کوچک را فرا می خواند" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"صفحه نام روش را می داند. پیاده سازی در پیش بارگذاری زندگی می کند که آن را در" +" معرض رندر قرار می دهد." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"سوابق REA {ph0} و کانال به معنای واقعی کلمه {ph1}. این فراخوان را با یک " +"کنترل کننده تطبیق دهنده در فرآیند اصلی جفت می کند." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"خواندن handler به سوال اصلی پاسخ می دهد: {ph0} یادداشت ها را فرمت می کند و " +"فرآیند اصلی می نویسد {ph1} به پوشه دانلود کاربر." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"ضبط شده توسط REA 4.1.0 در مثال زیر قابل دانلود است. مکان های منبع همراه با " +"api ، کانال و یافته های کنترل کننده است." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "مثال را خودتان تجزیه و تحلیل کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}دانلود نمونه زیپ{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "شش فایل منبع را مرور کنید" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "تجزیه و تحلیل کاربرد استاتیک" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"مسیر را با پوشه ای که باز کرده اید جایگزین کنید. شما باید یک کانال IPC و یک " +"کنترل کننده تطبیق در {ph0}. مکان های منبع در {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"برای برنامه خود ، از همان دستور با دایرکتوری یا مسیر ASAR استفاده کنید. یک " +"عامل می تواند یک رشته ، نام API یا کانال IPC را با ابزارهای ردیابی ویژگی REA" +" دنبال کند." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "نویسنده CSV را بازرسی کنید" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"دنبال کنید {ph0} به دستگیره اش کدام ورودی ها به CSV writer می رسند و اگر " +"نوشتن فایل شکست بخورد چه اتفاقی می افتد ؟" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"از مکان های منبع برای بازرسی این جزئیات استفاده کنید. نام کانال های " +"کامپیوتری و کنترل کننده های مبهم می توانند حل نشده باقی بمانند ؛ مشاهدات " +"زمان اجرا به شما راه دیگری برای بررسی آنها می دهد." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}پل کلیپ بورد Notion را دنبال کنید{ph1} {ph2}همان رویکرد را به یک برنامه" +" Electron بسته بندی شده اعمال کنید.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}صادرات مرورگر را مشاهده کنید{ph1}{ph2}یک کلیک واقعی را ضبط کنید و " +"ببینید کدام درخواست را انجام می دهد.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}یک تابع بومی را دنبال کنید{ph1}{ph2}ادامه به یک باینری زمانی که یک " +"ویژگی به کد بومی بستگی دارد.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "تجزیه و تحلیل JavaScript و Electron — REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"ردیابی یادداشت CSV صادرات از طریق یک api رندر, پیش بار و کنترل IPC با REA . " +"شامل فایل های نمونه قابل دانلود و یک نتیجه تجزیه و تحلیل تایید شده است." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript و Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "کپی مثال prompt" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "تجزیه و تحلیل برنامه های استاتیک را کپی کنید" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}خانه{ph1} / {ph2}راهنماها{ph3} / تجزیه و تحلیل برنامه های کد ماشین" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "بازیابی DX-Ball{ph0}محاسبه موقعیت صدای چپ / راست." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"دستورالعمل های اصلی را بررسی کنید ، ورودی و ثابت ها را شناسایی کنید ، سپس C " +"بازیابی شده را بررسی کنید." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "در این راهنما" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}مثال{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}از نماینده خود بپرسید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}نتایج REA را بخوانید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}بازیابی و بررسی{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}از باینری خود استفاده کنید{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "موقعیت صدای استریو چپ/راست را محاسبه کنید" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"در DX-Ball ، یک ضربه آجری یک موقعیت صفحه افقی را فراهم می کند. کد صدا آن را " +"به یک مقدار پانینگ چپ/راست تبدیل می کند." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"تابع شروع, {ph0}، یک نتیجه کوتاه از کامپایلر دارد: یک تماس به {ph1}. REA " +"همچنین دستورالعمل ها و تماس گیرندگان خود را باز می گرداند که به نماینده راهی" +" برای بررسی حساب گمشده می دهد." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "تازه وارد اين اصطلاحات هستي ؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}دستورالعمل ها:{ph1} مراحل اجرا شده توسط پردازنده ، به شکل قابل خواندن " +"نشان داده شده است مانند {ph2} یا {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}نتیجه Decompiler / pseudocode:{ph1} تلاش یک ابزار تجزیه و تحلیل برای " +"تبدیل دستورالعمل ها به کد شبیه C. می تواند قطعات را از دست بدهد ، همانطور که" +" در این مثال است." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}تماس گیرنده:{ph1} تابعی که این یکی را فراخوانی می کند. این نشان می دهد " +"که کدام مقادیر در آن منتقل می شوند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}آدرس:{ph1} یک مکان در برنامه ، نوشته شده در هگزادسیمال ، مانند {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}ثابت ها:{ph1} اعداد ثابت ذخیره شده در برنامه ، به عنوان بایت خام خوانده" +" شده و رمزگشایی شده است." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "سه قطعه شواهد ، یک محاسبه" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * دستورالعمل ها{ph1}{ph2}ورودی عدد صحیح{ph3}{ph4}یک خواندن پشته ارزش" +" مورد استفاده توسط دستورالعمل های نقطه شناور را فراهم می کند.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * تماس گیرنده{ph1}{ph2}یک مختصات صفحه نمایش{ph3}{ph4}تماس گيرنده ي " +"آجر زده رد ميشه {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * بایت داده{ph1}{ph2}ثابت های عددی{ph3}{ph4}بایت های مرجع رمزگشایی " +"به {ph5}, {ph6} و یک مقدار مقیاس.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA دستورالعمل ها ، رابطه فراخوان تابع و بایت ها را ارائه می دهد. عامل آنها " +"را با هم تفسیر می کند." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "در مورد رفتار بپرسید" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"بعد از {ph0}اتصال REA به نماینده شما{ph1} و {ph2}تنظیم یک ابزار تجزیه و " +"تحلیل برنامه های کد ماشین{ph3}، ارائه فایل اجرایی محلی و یک سوال:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "از کدام ابزار تجزیه و تحلیل استفاده کنم؟" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA برای خواندن برنامه های بومی به یکی از این موارد نیاز دارد:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} (macOS یا Linux ): راه اندازی REA آن را تشخیص می دهد یا " +"پیشنهاد نصب آن را می دهد. در macOS ، Hopper را یک بار باز کنید و حالت نمایشی" +" را انتخاب کنید یا مجوز را قبل از اولین تجزیه و تحلیل خود فعال کنید." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} (macOS یا Linux; تجربی در Windows): رایگان, اما نیاز به " +"Ghidra موجود 12.1.x نصب و 64 بیتی JDK 21 یا جدیدتر." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "{ph0} IDA {ph1} (Windows) : برای راه اندازی IDA موجود با ثبت نام MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"ببینید {ph0}راه اندازی تجزیه و تحلیل برنامه های کد ماشین{ph1} برای مراحل" + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "کپی" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استفاده از REA برای پیدا کردن چگونه DX-Ball محاسبه موقعیت " +"صدا استریو. محاسبه را توضیح دهید و کد را نشان دهید.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"مثال سریع. به نماینده خود مسیر را به DX-Ball 1.07 اجرایی محلی خود بدهید. " +"REA شامل DX-Ball نیست ، بنابراین از نسخه خود استفاده کنید ، یا همان نوع سوال" +" را در مورد یک برنامه کوچک Windows که دارید بپرسید." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "چطور می توانم مسیر کامل یک فایل را بدست آورم ؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} در File Explorer ، روی فایل کلیک راست کرده و انتخاب " +"کنید {ph2}کپی به عنوان مسیر{ph3}. در Windows 10 ، هنگام کلیک راست ، Shift را" +" نگه دارید." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} در Finder ، روی فایل کلیک راست کنید ، گزینه hold را " +"انتخاب کنید {ph2}\"...\" را به عنوان نام مسیر کپی کنید{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}هر سیستم:{ph1} فایل را به یک پنجره ترمینال بکشید و مسیر آن ظاهر می شود." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "نتایج REA را بخوانید" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "ورودی را بخوانید" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"دستورالعمل ها یک استدلال عدد صحیح را بارگذاری می کنند و آن را برای حساب نقطه" +" شناور تبدیل می کنند. این ورودی غایب از اولین نمای شبه کد است." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "تماس گیرنده را دنبال کنید" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA تماس گیرنده ضربه آجر را شناسایی می کند. دستورالعمل های قبلی آن مختصات " +"کاشی را با 30 ضرب می کند ؛ اضافه کردن {ph0} (20) موقعیت صفحه نمایش آجر را می" +" دهد." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "ثابت های مرجع را بخوانید" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"حساب ها به این آدرس ها اشاره می کنند. خواندن بایت ها ارزش های واقعی را فراهم" +" می کند ؛ دستور دستورالعمل به عامل می گوید که چگونه از آنها استفاده می شود." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "عملکرد بازیابی شده را بنویسید و بررسی کنید" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"با مقیاس 1.0 ، موقعیت صفحه نمایش 0 ، 320 و 640 نقشه به -500 ، 0 و 500 قبل از" +" تبدیل عدد صحیح. محاسبه مرکز صفحه را در مرکز میدان استریو قرار می دهد." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"عامل از یافته های REA برای نوشتن C استفاده کرد. چک های جداگانه 3205 ورودی را" +" با تابع اصلی x86 مقایسه کردند و تمام 63 بایت کامپایل شده از تابع کامل را " +"بازتولید کردند." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}بررسی کامل و مقایسه مونتاژ به C را ببینید{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "آن را با باینری خود امتحان کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}اتصال تجزیه و تحلیل برنامه های کد ماشین ارائه دهنده{ph1}، سپس به " +"نماینده خود یک فایل اجرایی یا کتابخانه محلی و یک ویژگی برای تحقیق بدهید. " +"سوالات مفید شروع شامل \" این فایل چگونه تجزیه می شود ؟ \"یا\" کدام تابع این " +"عمل منو را مدیریت می کند ؟ ”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"اگر قبلا یک نام یا آدرس تابع را می دانید ، می توانید آن را از ترمینال پرس و " +"جو کنید. برای نصب Ghidra پیکربندی شده:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "تجزیه و تحلیل عملکرد" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"مسیر هدف را جایگزین کنید و {ph0} با نام یا آدرس تابع خود. هر فراخوان CLI " +"باینری را وارد و تجزیه و تحلیل می کند ، سپس جلسه خود را بسته می کند. پرس و " +"جوهای MCP نماینده شما در حالی که جلسه باز است ، از باینری وارد شده استفاده " +"می کند." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"کد شبه را در کنار دستورالعمل ها و مرجع ها بخوانید. وقتی نتیجه یک تماس یا " +"ارزش حل نشده را ترک می کند ، از آن مکان به عنوان سوال بعدی استفاده کنید." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "تجزیه و تحلیل باینری بومی-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"بازیابی یک محاسبه بومی با REA: دستورالعمل ها را بررسی کنید ، یک تماس گیرنده " +"را دنبال کنید ، ثابت ها را بخوانید و C بازسازی شده را بررسی کنید." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "تجزیه و تحلیل برنامه های کد ماشین" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "کپی مثال prompt" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "تجزیه و تحلیل تابع کپی" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "راه اندازی REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}راه اندازی REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}RE چیست؟{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}REA چگونه کمک می‌کند{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}بازی دایناسور{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}ماشین حساب{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}REA را امتحان کنید {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}بیشتر بدانید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}کمک و بازخورد{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}جامعه{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "مهندسی معکوس ، با عامل برنامه نویسی شما" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "بفهمید نرم‌افزار{ph0}چطور کار می‌کند." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA ابزارهایی در اختیار دستیار برنامه‌نویسی شما می‌گذارد تا برنامه را بررسی " +"کند و رفتار آن را توضیح دهد." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "" +"در حال حاضر می دانم دوباره? {ph0}به راهنماهای تجزیه و تحلیل بروید →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "میخوای عمیق تر بری ؟ {ph0}وبلاگ را بخوانید →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "این درخواست را در دستیار برنامه‌نویسی خود وارد کنید:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "کپی" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "یا این دستور را در ترمینال اجرا کنید:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "" +"برنامهٔ تغییرات را بررسی و تأیید کنید، سپس دستیار را دوباره راه‌اندازی کنید." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "مهندسی معکوس چیست؟" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "فهمیدن شیوهٔ کار نرم‌افزار از راه {ph0}بررسی خود برنامه.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"هدف: درک یک ویژگی به اندازه کافی خوب برای {ph0}توضیح دهید{ph1}, {ph2}تغییرش " +"بده{ph3} یا {ph4}دوباره بسازش{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "پیش از REA · {ph0}خودتان{ph1} بررسی می‌کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} شاخه ها را رمزگشایی کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} تماس های ردیابی" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} قانون را بازیابی کنید" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}اصلی x64 * دستورالعمل های انتخاب شده{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * کدام شعبه؟" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} دو پرش به یک مکان این ها کدام اپراتورها هستند ؟ ”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "به شناسه های فرمان نگاه کنید ، سپس شاخه را برچسب بزنید." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "تقسیم" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "ضرب ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · تابع‌های فراخوانی‌شده چه می‌کنند؟" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 روشن است. تماس ها فقط آدرس هستن {ph0}کدام یک تقسیم می شود ؟ کدام " +"مقدار وارد می شود ؟ {ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "توابع یاور را بررسی کنید و مقادیر ذخیره شده را ردیابی کنید." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "تقسیم" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * قانون چیست؟" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"این مسیر با ورودی دیگر ضرب می شود. پس {ph0}10 درصد به معنی 10 درصد از " +"200{ph1} بعد از +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "نام operands و بررسی هر دو مسیر اپراتور." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "استدلال متخصص تصویرسازی" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}شما دستورالعمل ها را رمزگشایی می کنید ، فراخوان های تابع را دنبال می " +"کنید و محاسبه را بازسازی می کنید.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "با REA · از {ph0}دستیارتان{ph1} می‌پرسید" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "فقط یک درخواست." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "از دستیار {ph0}با زبان ساده{ph1} سؤال کنید." + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال سریع * ماشین حساب" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "مثال پاسخ · بر اساس یافته ها" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "بعد از + ، دکمه % طول می کشد {ph0}درصد از عدد اول{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA چه چیزی فراهم می‌کند" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "دستورالعمل های کنترل کننده ، کد و تماس های کامپایل شده." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "دستیار چه چیزی توضیح می‌دهد" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "" +"کدام شاخه اعمال می شود ، چه چیزی محاسبه می شود و چگونه آن را بازسازی کنیم." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"مونتاژ انتخاب شده از ماشین حساب نصب شده DLL. افکار و پاسخ ها یافته ها را " +"نشان می دهد. {ph0}با مثال ماشین حساب ادامه دهید ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}بیایید دو مثال را امتحان کنیم.{ph1} سرعت بازی را تغییر دهید ، سپس به " +"ماشین حساب برگردید و دکمه % آن را بازسازی کنید." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "مثال 01 * بازی دایناسور Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "چرا دایناسور سریع‌تر می‌شود؟" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "هدف" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "بازی را با {ph0}سرعت قابل تنظیم{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "چرا مهندسی معکوس it ؟" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"برای بازتولید شتاب آن ، ما نیاز داریم {ph0}قانون در بازی در حال اجرا{ph1}: " +"چقدر سریع شروع می شود ، چقدر افزایش می یابد و چه زمانی متوقف می شود." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "نسخهٔ بازسازی‌شده را بازی کنید" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "بازی" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "پرش ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "شروع دوباره" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "سرعت" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "از قانون شتاب بازیابی شده استفاده کنید" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "قانون اصلی: از 6 شروع کنید ، سپس به سمت 13 افزایش دهید." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"نوار لغزنده را حرکت دهید تا سرعت خود را تنظیم کنید. فضا یا پرش یک کاکتوس را " +"پاک می کند." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"JavaScript را قادر به بازی بازسازی کنید. کد و توضیح بالا قابل خواندن است." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA چه نتیجه‌ای برگرداند" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}اسکریپت در واقع در صفحه اجرا می شود.{ph1} عامل عملکرد به روز رسانی و " +"تنظیمات سرعت خود را می خواند ، سپس از این قانون در یک بازی جدید استفاده می " +"کند." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال سریع * بازی دایناسور" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}برای بازرسی این بازی دایناسور از REA استفاده کنید. چرا سریع " +"تر می شود ؟ قانون سرعت را نشان دهید ، سپس یک نسخه کوچک با سرعت قابل تنظیم " +"بسازید.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "هدف بازرسی شده: {ph0}نسخه مرورگر مشتق شده از Chromium wayou{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}از 6 شروع کن{ph1} اضافه کردن {ph2}0.001{ph3} هر به روز رسانی بدون " +"برخورد ، در حالی که سرعت زیر است {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "آزمایشگاه سرعت را باز کنید →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "کاری که هر قسمت انجام میده" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 * REA {ph1}{ph2}اسکریپت بازی در حال اجرا را بخوانید{ph3}{ph4}کد و " +"تنظیمات واقعی خود را به عامل برگردانید.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * نماینده شما{ph1}{ph2}قانون رو دوباره بساز ، کنترل رو اضافه " +"کن{ph3}{ph4}از شتاب بازیابی شده در یک بازی کوچک با کشویی سرعت استفاده " +"کنید.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * شما{ph1}{ph2}تغییر سرعت و بازی{ph3}{ph4}شتاب اصلی را امتحان کنید ،" +" سپس سرعت خود را انتخاب کنید.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "اسکریپت ، چک ها و نحوه امتحان کردن تحلیل را ببینید" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA نسخه مرورگر HTTP را از طریق یک اتصال اشکال زدایی محلی بازرسی کرد و نسخه " +"بارگذاری شده را بازگرداند {ph0}، از جمله منبع و هضم آن." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"ما عملکرد به روز رسانی بازی اصلی را در یک بررسی مرورگر کنترل شده ، با موانع " +"و برنامه ریزی خودکار غیرفعال نامیدیم. پس از 4000 به روز رسانی ، سرعت 10.0 " +"بود ؛ پس از 10000 ، 13.0 بود ، به یک اعشاری گرد شده بود." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"مینی بازی جدید این قانون سرعت را حفظ می کند. کد نقاشی ، پریدن و برخورد آن یک" +" پیاده سازی آموزشی کوچک است. {ph0}آزمایشگاه را باز کنید{ph1} برای دیدن کد " +"جدید و اجرای همان بررسی سرعت." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"برای بازرسی هدف خود ، {ph0}مراحل اتصال مرورگر{ph1} استفاده از {ph2}صفحه " +"دایناسور{ph3}. به نماینده خود URL صفحه و نقطه پایان اشکال زدایی محلی خود را " +"بدهید ، سپس دستور بالا را کپی کنید." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}کد سرعت بازرسی شده{ph1} · {ph2} Chromium نویسندگان * مجوز bsd{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "مثال 02 * ماشین حساب Windows" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "دکمهٔ % ماشین‌حساب را بازسازی کنید." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "یک ماشین حساب کوچک بسازید که {ph0}هر دو + و × به درستی.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"همان دکمه استفاده می کند {ph0}قوانین مختلف بعد از + و ×.{ph1} ما برنامه نصب " +"شده را بررسی می کنیم تا دریابیم درصد به کدام شماره اعمال می شود." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "محاسبه را امتحان کنید" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "بازنشانی" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10 درصد از 200 = 20 سپس 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "تصویر تعاملی از قانون درصد بازرسی شده." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}یک شاخه به 100 تقسیم می شود. دیگری نیز در عدد اول ضرب می شود.{ph1} عامل" +" از هر دو برای بازسازی دکمه % استفاده می کند." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "برای این مثال, {ph0} و {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال prompt * دکمه % را بازسازی کنید" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}از REA برای بازرسی دکمه % ماشین حساب Windows استفاده کنید. " +"قوانین را پس از + و × بازیابی کنید ، سپس یک ماشین حساب کوچک بسازید که از هر " +"دو استفاده کند.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "با +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}10 درصد از عدد اول را بگیرید.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "با ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}10% را به 0.1 تبدیل کنید.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "از برنامه نصب شده به یک دکمه کار %" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA کتابخانه را می خواند{ph1}{ph2}کد % handler را " +"برگردانید{ph3}{ph4}عملکرد اپراتور را بررسی می کند و از ثابت استفاده می کند " +"{ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 · نماینده شما آن را تفسیر می کند{ph1}{ph2}قوانین را توضیح دهید و " +"بازتولید کنید{ph3}{ph4}شاخه را با منبع مایکروسافت بررسی کنید ، سپس + و × " +"بالا را امتحان کنید.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "کد واقعی و نحوه بررسی پاسخ را ببینید" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"بازرسی با REA 4.1.0: Windows ماشین حساب 11.2508.4.0, x64. خلاصه قابل خواندن " +"از نام های منبع عمومی مایکروسافت برای توضیح شاخه بازیابی شده استفاده می کند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}درصد پیاده سازی{ph1} · {ph2}موارد تست مایکروسافت{ph3} · {ph4}راهنمای " +"راه اندازی بومی{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "اولین تحقیق شما" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "REA را در یک برنامه کوچک امتحان کنید." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"نمونه یادداشت های ما را دانلود کنید ، صادرات CSV آن را ردیابی کنید و یک " +"ورودی تغییر یافته را بررسی کنید." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "مثال هدایت شده را امتحان کنید" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "می‌خواهید بیشتر بدانید؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"به نماینده خود بگویید که چه چیزی می خواهید درک کنید یا بسازید. با REA ، شما " +"می توانید با هم کار بر روی هر چیزی از {ph0}شبیه سازی این وب سایت{ph1} به " +"{ph2}بازسازی یک بازی از فایل اجرایی آن.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال prompt * وب سایت" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "بله این یکی" + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}مثال سریع * بازسازی بازی" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}از REA برای بازسازی این بازی از فایل اجرایی آن استفاده کنید." +" بازیابی منطق گیم پلی در C و تست آن در برابر اصلی.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}مطالعه موردی DX-Ball را ببینید →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "برای مراحل راه اندازی و تجزیه و تحلیل ، هدف خود را انتخاب کنید:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "برنامه های کد ماشین" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"توابع ، رشته ها ، مرجع ها و روابط فراخوان تابع را در فایل های اجرایی و " +"کتابخانه ها بازرسی کنید." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "تجزیه و تحلیل برنامه های کد ماشین راهنما" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript و Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"ماژول های نقشه ، مسیرها ، IPC و وابستگی های بومی از یک پوشه برنامه یا آرشیو " +"ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "گردش کار برنامه" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "مرورگر و فعالیت زمان اجرا" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"ضبط مرورگر انتخاب شده یا فعالیت فرآیند ، سپس مقایسه نتایج در سراسر اجرا می " +"شود." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "راهنمای مشاهده مرورگر" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "سؤالی دارید؟" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}سوالات متداول را بخوانید{ph1}, {ph2}چت با ما در Discord {ph3} یا " +"{ph4}یک شماره GitHub را باز کنید{ph5} برای اشکالات و درخواست ویژگی." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "به جامعه بپیوندید" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"تحقیقات را به اشتراک بگذارید و از سایر کاربران REA در Discord کمک بگیرید . " +"برای به روز رسانی پروژه ، REA را در X دنبال کنید." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-مهندسی معکوس برای عامل برنامه نویسی شما" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"برنامه های مهندسی معکوس ، باینری ها و رفتار مرورگر با عامل برنامه نویسی شما." +" راهنماهای واضح را دنبال کنید و نمونه های تعاملی را با REA امتحان کنید ." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "کپی REA نصب و راه اندازی prompt" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "دستور Copy setup" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "تجزیه و تحلیل ماشین حساب دستی را دنبال کنید" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "کپی ماشین حساب درصد سوال" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"دایناسور مینی بازی. در حالی که بازی متمرکز است از دکمه پرش یا فضای فشار " +"استفاده کنید." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "کپی دایناسور تجزیه و تحلیل فوری" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "محاسبه را انتخاب کنید" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "کپی ماشین حساب تجزیه و تحلیل سریع" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "کپی وب سایت project prompt" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "کپی بازی بازسازی سریع" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}خانه{ph1} / {ph2}ویترین ها{ph3} / اندروید" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "مطالعه موردی * Aegis Authenticator" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "چگونه یک authenticator{ph0}یک کد ورود ایجاد کنید?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"یک کد شش رقمی هر 30 ثانیه تغییر می کند. از REA برای یافتن محاسبه در یک APK " +"Android استفاده کنید ، سپس آن را با ساعتی که می توانید کنترل کنید بازسازی " +"کنید." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * اندروید * انتشار رسمی APK * 6.9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "مشاهده Aegis در GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "از یک APK به یک کد شما می توانید تولید مثل" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * ویژگی را پیدا کنید{ph1}{ph2}3,077 کلاس → روش های تولید{ph3}{ph4} " +"REA بسته را جستجو می کند و کد مورد استفاده نمایش و کپی را ردیابی می " +"کند.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * محاسبه را بخوانید{ph1}{ph2}کلید زمان + حساب → شش رقمی{ph3}{ph4} " +"REA روش ها و پیش فرض ها را باز می گرداند. مامور توضیح میده که چطور با هم جور" +" میشن{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * بازسازی و بررسی{ph1}{ph2}تغییر ساعت کد را تماشا کنید{ph3}{ph4}یک " +"نسخه ی نمایشی مرورگر جدید این قانون را بازتولید می کند و آن را با موارد مرجع" +" عمومی بررسی می کند.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "در این مطالعه موردی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}از نماینده خود بپرسید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}ژنراتور کد را امتحان کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}پیدا کردن کد با REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}محاسبه را بخوانید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}بازسازی را بررسی کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}APK را خودتان بازرسی کنید{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "از نماینده خود بپرسید" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"برنامه یک کد ورود در حال تغییر را نشان می دهد. ما می خواهیم برای پیدا کردن " +"{ph0}چه چیزی باعث تغییر آن می شود ؟ {ph1} و این رفتار را بازتولید کنید." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "کپی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"یک مثال برای APK دانلود شده ، با تجزیه و تحلیل اندروید REA پیکربندی شده است." +" {ph0}APK و راه اندازی تجزیه و تحلیل را دریافت کنید ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "ژنراتور کد را امتحان کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"برنامه گروه زمان به {ph0}بلوک های 30 ثانیه ای{ph1} این شماره بلوک را با کلید" +" حساب برای تولید یک کد ترکیب می کند. همان کلید و بلوک همان کد را تولید می " +"کنند." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "ساعت را در طول 60 ثانیه حرکت دهید" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "زمان" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "ثانیه ها" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "ساعت نمونه قابل تنظیم ما" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "بلوک 30 ثانیه ای" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "بلوک" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 ثانیه{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "کد تولید شده" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "کلید حساب + بلوک → شش رقمی" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "زمان مثال ، در ثانیه" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 ثانیه" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 ثانیه" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"در 59 ثانیه: {ph0}287082.{ph1} در 60 ثانیه: {ph2}359152.{ph3} حرکت در یک " +"بلوک کد را بدون تغییر می گذارد." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"کلید ثابت است ، عمومی {ph0}داده های تست rfc 6238{ph1}. دمو محاسبه بازیابی " +"شده از APK را اجرا می کند ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"نمودار نتیجه را در 59 ثانیه نشان می دهد. JavaScript را برای تغییر ساعت فعال " +"کنید." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "پیدا کردن کد با REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "APK را به سه کلاس محدود کنید" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} دو مورد دیگر مربوط به نوار پیشرفت و حساب های وارداتی است. TOTP به " +"معنی یک رمز عبور یک بار مبتنی بر زمان است." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "ژنراتور را به صفحه نمایش برنامه وصل کنید" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA اضافه بار مهر زمانی را شناسایی می کند و تماس گیرندگان روش پایه را پیدا " +"می کند. بازرسی {ph0} سپس تماس نمایشگر را نشان می دهد {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"درخواست ها یک مسیر ورودی کوتاه را نشان می دهند. نام کلاس های نتیجه مشترک را " +"حذف می کنند {ph0} پیشوند." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "محاسبه را بخوانید" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA باز می گردد {ph0}تبدیل ساعت ، تنظیمات پیش فرض و روش های تولید.{ph1} " +"سازندگان یک فاصله 30 ثانیه ای و شش رقمی را تنظیم می کنند ؛ روش زمان بندی " +"ثانیه ها را به یک عدد بلوک تبدیل می کند." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} بلوک زمانی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} کلید + بلوک" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} شش رقمی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}زمان بلوک را انتخاب می کند.{ph1} ثانیه 30 تا 59 همه بلوک 1 را می دهند. " +"در 60 ثانیه ، بلوک 2 می شود." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}کلید هم مهمه{ph1} ژنراتور کلید حساب را با بلوک ترکیب می کند. یک حساب با" +" یک کلید متفاوت می تواند یک کد متفاوت را در همان زمان نشان دهد." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}شش رقمی نگه دارید.{ph1} باقیمانده بعد از تقسیم به 1 ، 000 ، 000 با صفر " +"در صورت نیاز ، بنابراین یک کد می تواند با 0 شروع شود." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"گزیده هایی از چندین روش بازرسی شده ، با بسته بندی خط برای نمایش. پانل سمت " +"راست یک خلاصه توضیحی است. {ph0} کد Aegis GPL-3.0 است.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "داخل ژنراتور" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"APK منتشر شده قرار می دهد {ph0} در {ph1}. REA به دنبال تماس از {ph2} و این " +"بدن را باز می گرداند ؛ منبع اصلی به کمک کننده زنگ می زند {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"آخرین بایت هش یک موقعیت را انتخاب می کند. چهار بایت در آن موقعیت یک عدد مثبت" +" 31 بیتی را فراهم می کند ؛ قالب بندی آن را به تعداد ارقام درخواست شده کاهش " +"می دهد. آخرین استدلال سازنده شاخه قالب بندی کد را که توسط کامپایل معرفی شده " +"است انتخاب می کند." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}با منبع انتشار تطبیق یافته مقایسه کنید{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "بازسازی را بررسی کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"ما روش های جاوا انتخاب شده REA را در یک برنامه تست کوچک جمع آوری کردیم. " +"خروجی آنها با بازسازی مستقل در {ph0}133 مورد آزمایش{ph1}، شامل مرزهای بلوک " +"زمانی و کد هایی که با صفر شروع می شوند." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "زمان مثال" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "کد شش رقمی" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 ثانیه" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 ثانیه" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"ژنراتور همچنین با شش مورد مرجع SHA-1 منتشر شده در {ph0}RFC 6238{ph1}. پیاده " +"سازی مرورگر را با آنها بررسی کنید:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "چک های مرجع را اجرا کنید" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "محاسبه دمو را بخوانید" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"موارد مرجع از هشت رقم استفاده می کنند. این چک همچنین نتایج شش رقمی آنها را " +"تأیید می کند." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Verification روش های جاوا استخراج شده و دمو جدید را اجرا می کند. اندروید APK" +" به صورت استاتیک بازرسی شد." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "APK را خودتان بازرسی کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}راه اندازی REA {ph1} در macOS یا Linux ، سپس این دو فایل را در یک پوشه " +"دانلود کنید. در Windows ، از یک محیط Linux مانند WSL استفاده کنید." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Analysis Android به JDK 17 کامل یا بالاتر نیاز دارد. انتخاب کنید با {ph0} یا" +" {ph1}. این مورد از JDK 21 استفاده کرد." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "نقطه REA در فایل ارائه دهنده و بازرسی APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"نماینده شما می تواند از طریق REA CLI با استفاده از دستور بالا ادامه دهد. " +"برای MCP ، اضافه کنید {ph0} به محیط سرور REA و آن را دوباره متصل کنید." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"سوال بعدی: {ph0}چه اتفاقی می افتد وقتی یک حساب کاربری از هشت رقم یا یک فاصله" +" زمانی متفاوت استفاده می کند ؟ {ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "منابع" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}نسخه رسمی Aegis 3.4.3{ph1} · {ph2}تطبیق منبع commit{ph3} · {ph4}مجوز " +"GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}پرونده های مرجع rfc 6238{ph1} · {ph2}داده های تست دمو{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"بازرسی با REA 6.1.0 در 9 اکتبر 2026. گزیده های تجزیه شده به Aegis اعتبار " +"داده می شوند ؛ نمودار ، خلاصه قابل خواندن و بازسازی مرورگر مواد آموزشی جدید " +"هستند." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK مهندسی معکوس: کدهای ورود-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Aegis Android APK را با REA بازرسی کنید ، محاسبه کد ورود شش رقمی خود را " +"بازیابی کنید و بازسازی را با یک ساعت قابل تنظیم امتحان کنید." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "مطالعه موردی Aegis APK" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "کپی Aegis مثال prompt" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "محاسبه کد ورود را دنبال کنید" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "کپی APK دستور بازرسی" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}خانه{ph1} / {ph2}ویترین ها{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "مطالعه موردی · DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "پرچم را در{ph0}یک باینری CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"از REA برای بازرسی یک چک کننده پرچم کوچک استفاده کنید ، قوانین آن را به " +"معادلات تبدیل کنید و ورودی را پیدا کنید که برنامه اصلی را چاپ کند {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "مربع نقاب دار چک پرچم * آسان * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "چالش اصلی را مشاهده کنید" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "از یک باینری به یک پاسخ چک شده" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * چک را پیدا کنید{ph1}{ph2}رشته ها → بررسی توابع{ph3}{ph4} REA پیام " +"، مرجع های آن و کد را پیدا می کند که ورودی را قبول یا رد می کند.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * قوانین را استخراج کنید{ph1}{ph2}36 کاراکتر * 26 مجموع{ph3}{ph4} " +"REA دستورالعمل ها و داده های پشت هر چک را باز می گرداند. عامل آنها را به " +"معادلات تبدیل می کند.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * حل و اجرا{ph1}{ph2}پرچم بازیابی → درست است!{ph3}{ph4}یک اسکریپت " +"پایتون معادلات را حل می کند. REA برنامه اصلی پذیرش نتیجه را ضبط می " +"کند.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "چالش توسط جوزف است که در مخزن رسمی DownUnderCTF منتشر شده است." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "در این مطالعه موردی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}کد چک کردن را پیدا کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}یک ماسک بخوانید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}مونتاژ به کد قابل خواندن{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}معادلات را حل کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}پاسخ را بررسی کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}خودتان امتحان کنید{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "کد چک کردن را پیدا کنید" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"این کتابچه یک فایل اجرایی 15 کیلو بایت است. پرچم ميخواد ، بعدش چاپ ميکنه " +"{ph0} یا {ph1}. با یک درخواست ساده به نماینده خود شروع کنید." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "کپی" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}از REA برای تجزیه و تحلیل ms_flag_checker و پیدا کردن پرچم " +"استفاده کنید. نحوه کار چک ها را توضیح دهید ، سپس پاسخ را با برنامه اصلی " +"تأیید کنید.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"یک مثال سریع، با چالش دانلود شده در دسترس محلی و تجزیه و تحلیل ارائه دهنده " +"برنامه های کد ماشین متصل شده است." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "از دستور ورودی به تابع آن پیروی کنید" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"مرجع به مامور جایی برای تحقیق می دهد ، حتی اگر نام های اصلی تابع اجرایی حذف " +"شده باشند." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "چک کننده و دو کمک کننده اش رو بخون" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"حلقه اول 36 کد کاراکتر را کپی می کند. حلقه چک کردن یک ماسک را رمزگشایی می " +"کند ، کدهای انتخاب شده را جمع می کند و نتیجه را با یک عدد ذخیره شده مقایسه " +"می کند. اون {ph0}- گام های بایت در سراسر {ph1} بایت ها 26 ماسک می دهند." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"این نتایج از تجزیه و تحلیل REA تازه انتخاب شده است. مسیر هدف محلی برای نمایش" +" کوتاه می شود ؛ آدرس ها به تصویر وارد شده REA مراجعه می کنند." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "یک چک یک شخصیت را نشان می دهد" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"چک کننده ورودی را در یک شبکه 6×6 مرتب می کند. ماسک انتخاب می کند که کدام " +"سلول ها به جمع کمک می کنند. کدگذاری جمع و جور آن از اعداد منفی برای حذف سلول" +" ها و اعداد مثبت برای انتخاب آنها استفاده می کند." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "بررسی هفتم فقط یک موقعیت را انتخاب می کند. {ph0}شکل باز{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "ماسک و هدف آن را از باینری بخوانید" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"دستورالعمل {ph0} بایت های ماسک را به عنوان مقادیر امضا شده می خواند. به همین" +" دلیل است {ph1} به معنی -21 هدف یک عدد صحیح اندکی است. با هم ، این بایت ها " +"به عامل می گویند که {ph2}، پس اون شخصیت {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "از دستورالعمل ها تا چک قابل خواندن" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"یک مرحله را برای اتصال کمک کننده جمع آوری و تماس گیرنده آن به همان قانون در " +"C انتخاب کنید." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} شروع کن" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} انتخاب کنید" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} اضافه کردن" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} پیشبرد" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} مقایسه کنید" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * دستورالعمل های اصلی انتخاب شده" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "قابل خواندن c * یک چک خلاصه" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "" +"{ph0}01 * از صفر شروع کنید.{ph1} {ph2} مبلغ در حال اجرا را نگه می دارد." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * سلول ماسک را بررسی کنید.{ph1} یک مقدار صفر کاراکتر را حذف می کند ؛" +" یک مقدار غیر صفر شامل آن است." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * یک کد کاراکتر اضافه کنید.{ph1} عدد صحیح ورودی در همان جبران به " +"مجموع اضافه می شود." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * به سلول بعدی بروید.{ph1} حلقه اصلی چهار بایت در هر عدد صحیح را پیش" +" می برد و شش ردیف از شش سلول را بازدید می کند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * با هدف ذخیره شده مقایسه کنید.{ph1} تماس گیرنده مبلغ را در {ph2}. " +"عدم تطابق به {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"دستورالعمل ها از طرف کمک کننده جمع آوری و تماس گیرنده اش می آید. C یک خلاصه " +"توضیحی با نام های توصیفی و یک حلقه 36 سلولی مسطح است." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "معادلات 26 را حل کنید" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"اکثر ماسک ها چندین سلول را انتخاب می کنند. به عنوان مثال ، اولین چک 16 کد " +"کاراکتر اضافه می کند و در مجموع 1441 مورد نیاز دارد. انتخاب های همپوشانی " +"معادلاتی را ارائه می دهند که یک اسکریپت کوچک پایتون می تواند با هم حل کند." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "پایتون * گزیده حل کننده" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 یک حل کننده است که مقادیر را برای برآورده کردن این معادلات پیدا می کند. " +"این گزیده از چک های استخراج شده استفاده می کند و فرض می کند {ph0} پرچم با " +"حروف ، ارقام ، زیرنویس ها و بریس ها. دانلود کامل شامل تمام 26 ماسک و هدف " +"است." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "دانلود حل کننده کامل" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "پاسخ را با برنامه اصلی بررسی کنید" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"ضبط فرآیند REA ، فایل اجرایی اصلی را که پرچم حل شده را قبول می کند ، ثبت می " +"کند. تغییر یک کاراکتر انتخاب شده از {ph0} به {ph1} اولین مبلغ 1440 را به جای" +" 1441 می سازد و برنامه آن را رد می کند." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "ورودی" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "خروجی مشاهده شده" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "کد خروج" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "پرچم حل کننده" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "یک شخصیت تغییر کرد" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "نشان دادن پرچم بازیابی شده و خروجی گرفته شده" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * خروجی برنامه اصلی" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "پرچم کپی" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"مقدار بازیابی شده همچنین با پرچم در متا داده های چالش منتشر شده سازمان " +"دهندگان مطابقت دارد که پس از حل باینری بررسی شده است." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "منبع ، هویت هدف و جزئیات تجزیه و تحلیل" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"تجزیه و تحلیل تازه و دو فرآیند ضبط در 8 اکتبر 2026 ، با استفاده از REA 4.1.0" +" با Ghidra 12.1.4 در Linux x64. باینری یک ELF x86-64 است که 15248 بایت است." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"مرجع های رشته ای ، توابع و ثابت ها قبل از خواندن منبع یا راه حل سازمان " +"دهندگان بازرسی شدند. حل کننده پایتون و نمودار از نتایج REA ساخته شده است." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}با منبع سازمان دهندگان مقایسه کنید{ph1} · {ph2}چالش متا داده ها و " +"پرچم{ph3} · {ph4} یادداشت های شواهد REA{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "خودتان امتحان کنید" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"چالش اصلی و حل کننده را در یک پوشه دانلود کنید. از دستور بالا برای تحقیق با " +"نماینده خود استفاده کنید یا اسکریپت همراه را اجرا کنید." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "ترمینال * حل و اجرا" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"اسکریپت پرچم کاندیداها را چاپ می کند ؛ آن را در دستور برنامه چسبانید. حل " +"نیازها پایتون و {ph0}. اجرای فایل اجرایی اصلی نیاز به Linux x86-64 دارد." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "REA را با عامل کدگذاری خود تنظیم کنید" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "مهندسی معکوس CTF: چک کننده پرچم DownUnderCTF-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"از REA برای حل چک کننده پرچم مربع های نقاب دار DownUnderCTF استفاده کنید. " +"توابع چک کردن را پیدا کنید ، ماسک ها را استخراج کنید و یک پرچم بازیابی شده " +"را با برنامه اصلی مقایسه کنید." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "مطالعه موردی ctf flag-checker" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "کپی نمونه ctf prompt" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "معادله ماسک ctf ؛ به صورت افقی روی صفحه نمایش های کوچکتر حرکت کنید" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"ماسک هفتم 21 سلول را رد می کند ، موقعیت 21 را انتخاب می کند ، سپس 14 را رد " +"می کند. فقط اون سلول به جمع کمک ميکنه کد کاراکتر مورد نیاز آن 55 است ، به " +"این معنی که کاراکتر 7 است." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "بررسی CTF را دنبال کنید" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "کپی ctf مونتاژ" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Ctf قابل خواندن را کپی کنید" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "کپی ctf solver گزیده" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "کپی پرچم بازیابی شده" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "دستورات ctf solver را کپی کنید" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}خانه{ph1} / {ph2}ویترین ها{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "مطالعه موردی * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "بازسازی DX-Ball {ph0}از فایل اجرایی آن." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"هدف یک نسخه c قابل نگهداری از بازی Windows 1996 است. REA به عامل کمک می کند" +" تا اصل را بازرسی کند ، یک عملکرد در یک زمان." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 * C * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"یک تابع ، از اجرایی به c. REA چک شده ، دستورالعمل ها ، تماس گیرندگان و داده " +"های خوانده شده را ارائه می دهد ؛ پروژه بازسازی نتیجه را اجرا و آزمایش می " +"کند. {ph0}شکل باز{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "در این مطالعه موردی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}پروژه{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}پان صدا{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}بررسی نتیجه{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}ادامه کار{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "توابع c نگهداری شده" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "مقایسه با کد اصلی" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "توابع با تطبیق بایت های کامپایل شده" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"بازرسی پروژه: 7 اکتبر 2026. {ph0}دفتر کل پیشرفت{ph1} · {ph2}پوشش تست{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "پروژه تا کنون" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"کد بازیابی شده شامل تخته و مدیریت منابع ، ضربه های آجری ، انیمیشن ها ، ذرات " +"و تولید پاداش است. ساخت های فعلی خدمات بازرسی و یک کتابخانه تجزیه و تحلیل را" +" فراهم می کند. کار بر روی بازی قابل پخش با فیزیک توپ و بادکنک ، دست زدن به " +"قدرت و ادغام Windows ادامه دارد." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "پیدا کردن محاسبه موقعیت صدا چپ / راست" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"وقتی یک آجر ضربه می خورد ، موقعیت افقی آن به کد صدا منتقل می شود. تحقیقات " +"لازم برای بازیابی این که چگونه مختصات صفحه نمایش به یک مقدار چپ/راست تبدیل " +"می شود." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "کپی" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استفاده از REA برای پیدا کردن چگونه DX-Ball محاسبه موقعیت " +"صدا استریو. محاسبه را توضیح دهید و کد را نشان دهید.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"یک مثال برای عامل کدگذاری شما ، با فایل اجرایی محلی در دسترس است. تحقیقات " +"زیر سوالات REA و شواهد پشت پاسخ را نشان می دهد." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"مامور از REA برای بازرسی عملکرد استفاده کرد ، تماس گیرنده ضربه آجر آن را " +"دنبال کرد و ثابت ها را از فایل اجرایی خواند. این نتایج ورودی و ریاضی مورد " +"نیاز برای نوشتن تابع C زیر را فراهم می کند." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"اولین نتیجه تابع برای {ph0} شامل اعلام شبه کد {ph1} و تماس گرفتن {ph2}. نمای" +" دستورالعمل آن ورودی پشته و عملیات نقطه شناور را نشان می داد. اين اختلاف به " +"مامور دليل مشخصي براي ادامه تحقيقات داد" + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "اولین نمایش decompiler" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"خروجی یک تماس تبدیل را نشان می دهد. خواندن دستورالعمل های زیر نشان می دهد " +"ورودی و محاسبه تغذیه که تماس." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "پاسخ به سه سوال از طریق REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "بازیابی ورودی گمشده" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"نتیجه تابع شامل دستورالعمل ها در کنار کد شبه و تماس گیرندگان است. اینجا, " +"{ph0} ورودی عدد صحیح را که از نمای decompiler گم شده است ، نشان می دهد." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "تماس گیرنده را دنبال کنید تا ورودی را درک کنید" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA این تماس گیرنده را در اولین نتیجه شناسایی کرد. مقیاس دستورالعمل های قبلی" +" آن {ph0} با 30 ؛ اضافه کردن 20 مختصات صفحه نمایش آجر را می دهد, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "مقادیر پشت آدرس های حافظه را بخوانید" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"بایت های بازگردانده شده دو ثابت ریاضی و مقیاس اولیه پان را ایجاد می کنند. " +"عامل اکنون مقادیر مورد نیاز برای عبارت C را دارد." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "از یافته های REA به C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"پنج مرحله زیر را دنبال کنید. هر انتخاب دستورالعمل های اصلی و خطوط C را که " +"آنها اطلاع داده اند برجسته می کند." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} ورودی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} ضرب" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} کسر" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} مقیاس" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} بازگشت" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "نسخه اصلی x86 ·" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "بازسازی شده C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * ورودی را بخوانید.{ph1} نمایش دستورالعمل در نتیجه تابع REA به شرح " +"زیر است {ph2} و استفاده می کند {ph3} برای بارگذاری عدد صحیح. با دنبال کردن " +"تماس گیرنده از طریق REA ، معنی مختصات صفحه نمایش پارامتر C را تعیین می کند " +"{ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * ضرب در 1.5625.{ph1} {ph2} دوتایی رو میخونه {ph3}. بایت های " +"بازگردانده شده توسط REA {ph4} رمزگشایی به {ph5}; C از همان ثابت استفاده می " +"کند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * 500.0 را کم کنید.{ph1} {ph2} دوتایی رو میخونه {ph3}. نتیجه بایت " +"REA به {ph4}، تغییر مرکز محاسبه به مختصات صفحه نمایش {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * مقیاس ذخیره شده را اعمال کنید.{ph1} دوم {ph2} نوشته شده {ph3}. که " +"جهانی نامگذاری شده است {ph4} در منبع نگهداری شده خواندن بایت دوم REA ارزش " +"اولیه آن را تعیین می کند {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * یک عدد صحیح را برگردانید.{ph1} تماس در {ph2} به دست می آید {ph3}، " +"در نتایج callee REA شناسایی شده است. C نتیجه را به {ph4}; مقایسه های " +"اصلی-x86 مقدار برگشت داده شده را بررسی کنید." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"گزیده مونتاژ دستورالعمل های ورودی ، ریاضی و بازگشت را انتخاب می کند. لیست " +"کامل زیر همچنین شامل فروشگاه های مداخله کننده و تنظیم و تمیز کردن عملکرد " +"است." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "تجمع کامل و شواهد حمایتی" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "نتیجه REA · 0x406400-0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "آنچه تماس گیرنده ارائه می دهد" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"عملکرد ضربه آجر در {ph0} مختصات کاشی خود را با 30 مقیاس می دهد ، 20 را اضافه" +" می کند ، سپس قبل از تماس آن را فشار می دهد:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "آنچه داده ها می خوانند تعیین می کنند" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA بایت می خواند ، رمزگشایی به عنوان دو برابر کمی-اندیان" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "آدرس" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "ارزش" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "مورد استفاده برای" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "ضرب اول" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "تفریق" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} در ابتدا" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "مقیاس پان ذخیره شده" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"ضبط شده با REA 4.1.0 برای هش پین DX-Ball 1.07 هدف. یادداشت های تحقیق مرتبط " +"شناسه های شواهد را حفظ می کنند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "{ph0}منبع نگهداری شده{ph1} · {ph2}یادداشت های تحقیق و مرجع شواهد{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "بررسی عملکرد بازیابی شده" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"تابع بازیابی شده دو چک را می گذراند: مقادیر بازگشت آن با اصل مطابقت دارد و " +"بایت های کامپایل شده آن با فایل اجرایی مطابقت دارند." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3205 مورد رفتار" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"تست ها تابع اصلی x86 را اجرا می کنند و مقدار بازگشت آن را با C حفظ شده " +"مقایسه می کنند.آنها هر موقعیت عدد صحیح را از 0 تا 640 در پنج مقیاس پان پوشش " +"می دهند: 0 ، 0.5 ، 1 ، 20 و -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 باایت تطبیق" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"تابع C با زنجیره ابزار vc4.0 پین شده کامپایل شده است. پخش مجدد کامپایلر با " +"عملکرد کامل پس از اعمال جابجایی های بررسی شده و بررسی ثابت های مرجع مطابقت " +"دارد." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"در مقیاس 1 ، محاسبه بازیابی شده -500 در لبه چپ ، 0 در مرکز و 500 در لبه راست" +" را باز می گرداند. بخش بعدی کار صوتی ادغام این مقدار با پشتیبان صدا بازی " +"است." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}جزئیات پخش کامپایلر را بخوانید{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "ادامه تحقیقات" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"همان رویکرد برای به روز رسانی ذرات ، صف های انفجار و تولید پاداش استفاده می " +"شود: عملکردهای مربوطه را بررسی کنید ، وضعیت و وابستگی های آنها را بازیابی " +"کنید ، سپس پیاده سازی را با اصلی مقایسه کنید." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"برای بررسی عملکرد پان صدا خودتان ، دستورالعمل های راه اندازی پروژه DX-Ball " +"را دنبال کنید و هدف اصلی تطبیق یافته آن را ارائه دهید. سپس اجرا کنید:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "در پرداخت DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} مخزن DX-Ball{ph1}{ph2}منبع فعلی ، پیشرفت و راه اندازی محلی.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} گردش کار تجزیه و تحلیل REA{ph1}{ph2}محاسبه را دنبال کنید ، سپس از همان" +" رویکرد با باینری خود استفاده کنید.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}ذرات و تولید پاداش{ph1}{ph2}یک تحقیق بزرگتر در مورد وضعیت ، صف ها و " +"پیکسل می نویسد.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball مهندسی معکوس: پانینگ صدا-REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"بازسازی DX-Ball را از تجزیه و تحلیل باینری از طریق REA به تست های c ، " +"original-x86 و تطبیق بایت های تابع کامپایل شده دنبال کنید." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball تحقیق صدا-پان; به صورت افقی روی صفحه نمایش های کوچکتر حرکت کنید" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.تابع EXE 0x00406400 با REA بازرسی می شود . یک تماس گیرنده با آجر 20 " +"به علاوه 30 بار tile_x را تامین می کند.دستورالعمل ها x را بارگذاری می کنند ،" +" با 1.5625 ضرب می کنند ، 500.0 را کم می کنند ، pan_scale را اعمال می کنند و " +"یک عدد صحیح را باز می گردانند. C نگهداری شده به طور مستقل با x86 اصلی در " +"3205 مورد و توسط vc4.0 compiler replay که با 63 بایت مطابقت دارد ، بررسی می " +"شود." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "مطالعه موردی بازسازی DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "کپی مثال prompt" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "محاسبه موقعیت صدا چپ / راست را دنبال کنید" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "کپی گزیده اصلی مونتاژ" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "کپی تابع صدا-پان" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "کپی کامل مونتاژ پان صدا" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "دستور تجزیه و تحلیل DX-Ball را کپی کنید" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}خانه{ph1} / ویترین ها" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "مطالعات موردی REA." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"اندروید ، بازی ، Electron و یک چالش CTF ، با کد ، ارقام و نتایج بررسی شده." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android * تجزیه و تحلیل APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "چگونه یک احراز هویت یک کد ورود را تولید می کند" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"محاسبه کد شش رقمی Aegis را در APK منتشر شده خود پیدا کنید . روش های تولید را" +" با REA ردیابی کنید ، سپس یک ساعت نمایشی را حرکت دهید تا ببینید چرا کد هر 30" +" ثانیه تغییر می کند." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "مطالعه موردی اندروید را بخوانید" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "Ctf * تجزیه و تحلیل برنامه های کد ماشین" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "یک چک کننده پرچم CTF را حل کنید" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"بازرسی یک چالش downunderctf آسان با REA . توابع چک کردن آن را پیدا کنید ، " +"ماسک ها و جمع ها را به معادلات تبدیل کنید ، سپس پرچم حل شده را با برنامه " +"اصلی تأیید کنید." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "مطالعه موردی CTF را بخوانید" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "بومی * بازسازی" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "محاسبه DX-Ball از سمت چپ / راست موقعیت صدا" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"بازیابی محاسبه موقعیت صدا چپ/راست از یک بازی Windows 1996. دستورالعمل های " +"REA ، مرجع های تماس گیرنده و ثابت های عددی منجر به یک تابع C کوچک می شود که " +"با رفتار اصلی و تمام 63 بایت کامپایل شده بررسی می شود." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "مطالعه موردی DX-Ball را بخوانید" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * ردیابی ویژگی" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "چگونه Notion متن و HTML را کپی می کند" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"ردیابی یک API رو به صفحه از طریق Notion بسته بندی JavaScript. بسته بندی های " +"IPC آن را به کلیپ بورد سیستم دنبال کنید ، سپس ببینید که چگونه یک نشانگر HTML" +" کوچک داده های بلوک غنی را به یک کپی متصل می کند." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "مطالعه موردی Notion را بخوانید" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS * بازسازی" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "چگونه TH04 یک حلقه گلوله را هدف قرار می دهد" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"یاور زاویه اصلی 16 بیتی را با REA بازرسی کنید . عملیات ضرب ، تقسیم و هماهنگی" +" آن را با c++ قابل خواندن مطابقت دهید ، سپس ببینید که چگونه آنها یک حلقه را " +"برای بازیکن تولید می کنند." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "مطالعه موردی TH04 را بخوانید" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "راهنماهای گام به گام" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"راهنماها از طریق یک محاسبه بومی ، یک صادرات Electron و یک درخواست مرورگر قدم" +" می زنند. هر کدام با یک هدف و یک هدف مشخص شروع می شود." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "راهنماها را بخوانید" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "مطالعات موردی مهندسی معکوس-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"تحقیقات REA را از طریق کد ، ارقام و نمایشی دنبال کنید: یک احراز هویت Android" +" ، DX-Ball ، Notion ، TH04 و یک چک کننده پرچم DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}خانه{ph1} / {ph2}ویترین ها{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "مطالعه موردی * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "چگونه Notion کپی{ph0}متن و HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"یک تماس کلیپ بورد از API صفحه Notion را از طریق فرآیند پیش بارگذاری و اصلی " +"به نویسنده کلیپ بورد Electron ردیابی کنید." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion دسکتاپ 7.6.1 * JavaScript · REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "پل داخل بسته دسکتاپ Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * api رو به صفحه{ph1} {ph2}{ph3}{ph4} {ph5}پیش بارگذاری یک روش قابل " +"فراخوان را نشان می دهد.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * بسته بندی پیش بار{ph1} {ph2}{ph3}{ph4} {ph5}بسته بندی کانال و " +"استدلال ها را ارسال می کند.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 · کنترل کننده فرآیند اصلی{ph1} {ph2}{ph3}{ph4} {ph5}گیرنده چک می کند" +" که کدام صفحه آن را ارسال کرده است.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * کلیپ بورد سیستم{ph1} {ph2}{ph3}{ph4} {ph5} Electron متن و HTML " +"ارائه شده را می نویسد.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "یک کانال به دو طرف می پیوندد: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"کد بسته بندی شده از همان کانال در فرآیند پیش بارگذاری و اصلی استفاده می کند." +" حل کردن بسته بندی ها نشان می دهد که Electron پشت این نام ها صدا می زند." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "در این مطالعه موردی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}پل کلیپ بورد را دنبال کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}حفظ ساختار یک بلوک{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}نمونه ها و منابع بیشتر{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "عملیات کپی به کجا می رود ؟" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"صفحه یک روش به نام {ph0}. پیاده سازی آن در پیش بارگذاری یک بسته بندی است. " +"سوال مفید این است که این بسته بندی چه چیزی را می فرستد و کدام کد آن را " +"دریافت می کند." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "کپی" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}از REA برای ردیابی نحوه کپی متن و HTML Notion در کلیپ بورد " +"سیستم استفاده کنید. کد را در هر مرحله نشان دهید.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "یک مثال با بسته برنامه محلی Notion در دسترس برنامه نویس شما." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA می یابد که از کجا شروع به خواندن" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"تجزیه و تحلیل پیش بارگذاری برگه با REA API را در معرض صفحه و فراخوانی که " +"درخواست IPC را ارسال می کند قرار می دهد. هر دو یافته با محدوده منبع در بسته " +"کوچک شده همراه است:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "یافته های REA → دو مکان برای باز کردن" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"زمینه های انتخاب شده از یک تازه {ph0} نتیجه در Notion ' s tab preload ، ضبط " +"شده با REA 4.1.0. موقعیت ها از خط اصلی بسته و ستون صفر استفاده می کنند." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"نماینده این مکان ها را باز می کند ، عضو کلیپ بورد را در API مونتاژ شده پیدا " +"می کند و می گوید {ph0}. لوازم سایت تماس با ما {ph1}. اين اسم به مامور يه چيز" +" دقيقي ميده که بايد در بسته اصلي دنبالش بگرده چهار بخش زیر مسیر اتصال آن را " +"نشان می دهد." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "چهار قطعه کد کوتاه" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"ساده شده از JavaScript بسته بندی شده ، با نام متغیر قابل خواندن. اعضای غیر " +"مرتبط حذف می شوند." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "از API در معرض صفحه شروع کنید" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"این عضو نام کانال را ارائه می دهد. اجرای {ph0} به ما می گوید که چگونه " +"درخواست از روند صفحه خارج می شود." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "بسته بندی پیش بارگذاری را حل کنید" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"تابع بازگردانده شده آرگومنت ها را از طریق IPC درخواست و پاسخ Electron ارسال " +"می کند. حالا می تونیم دنبالش بگردیم {ph0} در سمت اصلی فرآیند." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "نحوه ثبت نام گیرنده را بررسی کنید" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"فرآیند اصلی از یک بسته بندی دیگر استفاده می کند. اون {ph0} روش ثبت یک {ph1} " +"گیرنده برای اون کانال" + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "نوشتن و چک فرستنده آن را پیدا کنید" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"این مقصد است. پس از بررسی فرستنده ، کنترل کننده داده های ارائه شده را به API" +" کلیپ بورد Electron منتقل می کند. کانال و دو بسته بندی حل شده روش در معرض را" +" به این تماس متصل می کنند." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "بلوک کپی شده چگونه ساختار خود را حفظ می کند ؟" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"ویرایشگر وب Notion متن و HTML را از طریق {ph0}. این داده های بلوک را به صورت" +" محلی نگه می دارد و یک ID را در HTML کپی شده برای اتصال آنها قرار می دهد." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "لینک های HTML برای ذخیره داده های بلوک" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "شناسه HTML را بخوانید" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "همان شناسه محلی را پیدا کنید" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "بازیابی داده های بلوک Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"متن تصویری و شناسنامه. تست ماژول ضبط شده داده های بلوک را هنگام مطابقت IDs " +"بازیابی می کند ؛ یک ورودی قدیمی فقط متن و HTML را باز می گرداند." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"در paste ، Notion به دنبال شناسه HTML است و آن را با نسخه ذخیره شده بررسی می" +" کند. تطبیق شناسه بازیابی داده های بلوک." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"فرمت کلیپ بورد ثبت شده از دارایی های وب در 13 ژوئیه 2026 ذخیره شده است." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "نمونه ها و منابع بیشتر" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "مثال دیگر: جداول Markdown" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion تجزیه و تحلیل Markdown به داده های بلوک. این مثال نشان می دهد که " +"چگونه یک جدول به عنوان عنوان و ردیف داده تبدیل می شود." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "جدول از طریق تجزیه کننده Markdown Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"خروجی ضبط شده از یک تجزیه کننده Markdown استخراج شده. جدول به ردیف ها و سلول" +" ها تبدیل می شود." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "مسیر دیگر: اتصال آفلاین SQLite" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"درخواست رندر Notion {ph0} از طریق IPC. فرآیند اصلی یک کانال پیام ایجاد می " +"کند و یک پورت به رندر و دیگری به یک فرآیند ابزار SQLite می دهد. دسته های " +"بیانیه های بعدی و نتایج از آن بندر عبور می کنند." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"پس از این انتقال توضیح می دهد که کار پایگاه داده کجا اجرا می شود و چرا " +"ردیابی تنها درخواست اولیه IPC مکالمه بعدی را از دست می دهد." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "منابع و نحوه خواندن گزیده ها" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"پل کلیپ بورد از دسکتاپ Notion 7.6.1 می آید {ph0}: پیش بارگذاری برگه و {ph1}." +" این گزیده ها نام های متغیر کوچک شده را گسترش می دهند و کد غیر مرتبط را حذف " +"می کنند ؛ کمک کننده چک فرستنده با زیربنای آن نشان داده شده است {ph2} تماس " +"بگیرید" + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"نمونه های کلیپ بورد مجازی و Markdown از دارایی های وب ذخیره شده در 13 ژوئیه " +"2026 ، از جمله ماژول ها می آیند {ph0}, {ph1}, {ph2} و {ph3}. اون دارایی ها " +"نسخه خودشون رو دارن پروب های ذخیره شده ماژول های استخراج شده و تسمه های کوچک" +" را اجرا می کنند ؛ خروجی های آنها این پروب ها را به جای یک جلسه رابط کاربری " +"دسکتاپ ضبط شده توصیف می کند." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"نتیجه REA که در اینجا نشان داده شده است ، تجزیه و تحلیل متمرکز از پیش " +"بارگذاری برگه ذخیره شده است که با بسته REA 4.1.0 منتشر شده ثبت شده است. API " +"را پیدا می کند و عملیات را فراخوانی می کند. عضو کلیپ بورد و گیرنده تطبیق با " +"خواندن پیاده سازی های بسته بندی خود در بسته متصل می شوند." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"مثال Markdown از ماژول تجزیه کننده استفاده می کند {ph0}. تست های ماژول ذخیره" +" شده نشان می دهد که هر دو فیلتر صفحه و چت این جدول را حفظ می کنند. تجزیه " +"کننده های paste/import ، Structured Markdown و AI / chat دارای نقاط ورود " +"جداگانه و فرمت های متوسط هستند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} راهنمای برنامه JavaScript{ph1}{ph2}ویژگی صادرات یک برنامه کوچک " +"Electron را دنبال کنید.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} بازسازی DX-Ball{ph1}{ph2}دستورالعمل های بومی را به یک تابع C چک شده " +"دنبال کنید.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron مهندسی معکوس: کلیپ بورد-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"API کلیپ بورد Notion را از طریق پیش بارگذاری ، بسته بندی IPC و فرآیند اصلی " +"Electron ، با گزیده های کوتاه کد و نگاهی به قالب کلیپ بورد غنی آن دنبال " +"کنید." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "مطالعه موردی Notion Electron" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "کپی Notion تجزیه و تحلیل prompt" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "کپی Notion پیش بارگذاری گزیده" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "کپی Notion فراخوان گزیده بسته بندی" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "کپی Notion handler wrapper گزیده" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "کپی Notion کلیپ بورد گیرنده گزیده" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "بازیابی اطلاعات غنی کلیپ بورد در paste" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "پرش به محتوا" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}خانه{ph1} / {ph2}ویترین ها{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "مطالعه موردی * Touhou 4: داستان سرزمین لوتوس" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "بازسازی TH04{ph0}الگوهای گلوله." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"یک حلقه گلوله با یک محاسبه زاویه کوتاه شروع می شود. از REA برای بازرسی تابع " +"dos اصلی استفاده کنید ، سپس دستورالعمل های آن را به C read قابل خواندن دنبال" +" کنید." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 · 16 بیتی DOS · c++ و مونتاژ" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "بازسازی TH04 را مشاهده کنید" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "از دستورالعمل های اصلی تا منبع چک شده" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * بازی اصلی{ph1}{ph2}اصلی.EXE{ph3}{ph4}فایل اجرایی PC-98 و کمک کننده" +" زاویه گلوله آن.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * با REA بازرسی کنید {ph1}{ph2}دستورالعمل ها + مرجع{ph3}{ph4}کد dos " +"بارگذاری شده را تأیید کنید و محاسبه زاویه را از فایل اجرایی بخوانید.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * خواندن C++{ph1}{ph2}فضا → هدف → چرخش{ph3}{ph4}هر عملیات را به " +"بازسازی نگهداری شده وصل کنید.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * منبع را بررسی کنید{ph1}{ph2}2,139 بایت تطبیق{ph3}{ph4}چک های " +"کامپایلر ضبط شده کد تولید گلوله ای را که شامل این کمک کننده است ، پوشش می " +"دهد.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA کد اصلی و شواهد تجزیه و تحلیل آن را باز می گرداند. پروژه TH04 منبع " +"نگهداری شده و چک های کامپایلر را تامین می کند." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "در این مطالعه موردی" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}حلقه گلوله{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}چه REA باز می گردد{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}مونتاژ به C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}بررسی منبع{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}پروژه کامل{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "چگونه یک حلقه به بازیکن هدف می گیرد" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"حمله ی الی درخواست یک حلقه ی هدفمند با شمارش اولیه ی 16 می کند. یک یاور جهت " +"هر گلوله را محاسبه می کند. همان حلقه می تواند با یک جهت ثابت روبرو شود یا به" +" سمت بازیکن بچرخد." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}عامل برنامه نویسی شما" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "کپی" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}استفاده از REA برای پیدا کردن چگونه TH04 ایجاد یک حلقه از " +"گلوله و هدف آن را در بازیکن. محاسبه را توضیح دهید و کد را نشان " +"دهید.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "یک مثال سریع ، با فایل اجرایی اصلی و پرداخت بازسازی در دسترس محلی." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 یک چرخش کامل در جهت عقربه های ساعت را در 256 واحد زاویه ذخیره می کند. " +"برای 16 گلوله ، هر شاخص 16 واحد اضافه می کند: {ph0}. اضافه کردن جهت بازیکن " +"این موقعیت ها را با هم می چرخاند." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"یک تصویر از ریاضیات زاویه بازیابی شده برای شمارش 16 ، جهت بازیکن 40 و چرخش " +"قالب 0. {ph0}شکل باز{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "قالب شلیک در منبع بازیابی شده" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "حمله حلقه ای الی * منبع گزیده" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"این خطوط الگوی را قبل از دشواری و تنظیم عملکرد انتخاب می کنند. {ph0}منبع " +"حمله رو بخون{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "چه REA باز می گردد" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"ما بازرسی می کنیم {ph0}، تابعی که سرعت و زاویه هر گلوله را تعیین می کند. " +"REA دستورالعمل ها ، کد شبه و مرجع خود را باز می گرداند. سه قسمت از این نتیجه" +" الگوی را توضیح می دهد." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "قبل از خواندن کد آن ، تصویر DOS را بررسی کنید" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"چک کد بارگذاری شده و سوابق جابجایی را به فایل اجرایی ارائه شده متصل می کند. " +"مسیر بالا برای نمایش کوتاه شده است." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "ضرب و تقسیم حلقه را بخوانید" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} شاخص گلوله را نگه می دارد. تغییر آن را با 256 ضرب می کند ، سپس تقسیم " +"از شمارش خوانده شده از {ph1}. نام های منبع نگهداری شده که فیلد {ph2}. دنباله" +" کامل در زیر ظاهر می شود." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "پیدا کردن جایی که الگوی به سمت بازیکن می چرخد" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"عملگرهای دستورالعمل دو تفاوت مختصات و یک کمک کننده جهت را نشان می دهند. " +"مقدار بازگشت آن به زاویه حلقه نسبی اضافه می شود. نام های منبع این آدرس ها را" +" قابل خواندن می کنند ؛ REA به نماینده اجازه می دهد عملیات اصلی پشت آنها را " +"بررسی کند." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "از مونتاژ به c قابل خواندن++" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"یک مرحله را برای مطابقت دستورالعمل های اصلی با محاسبه زاویه انتخاب کنید. این" +" خلاصه مسیر حلقه هدف را دنبال می کند ؛ منبع کامل همچنین گسترش ، پشته و " +"الگوهای تصادفی را مدیریت می کند." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} شاخص" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} فضا" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} هدف" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} چرخش" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} فروشگاه" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * دستورالعمل های اصلی 16 بیتی" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "قابل خواندن c summary * هدف-خلاصه حلقه" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * شاخص گلوله را بخوانید.{ph1} استدلال پشته بارگذاری شده است {ph2}. " +"در یک حلقه 16 گلوله ، این شاخص عضو از 0 تا 15 اجرا می شود." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * جهت ها را در اطراف یک چرخش کامل قرار دهید.{ph1} {ph2} ضرب در 256 " +"شمارش صفر است-به یک کلمه گسترش می یابد ، سپس {ph3} محصول را با این تعداد " +"تقسیم می کند. برای شمارش 16 ، هر شاخص 16 واحد زاویه را پیش می برد." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * جهت بازیکن را اضافه کنید.{ph1} دو تفریق مختصات بازیکن-منهای-منشأ " +"را تشکیل می دهند. کمک کننده جهت زاویه ای را در {ph2} اضافه کردن کل حلقه رو " +"به سمت بازیکن می چرخونه" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * چرخش الگوی را اضافه کنید.{ph1} {ph2} زاویه قالب را اضافه می کند. " +"الگوی اولیه ایلی آن را به صفر می رساند ؛ الگوهای دیگر می توانند از همان کمک " +"کننده با چرخش استفاده کنند." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * زاویه نهایی را در یک بایت نگه دارید.{ph1} فروشگاه می نویسد {ph2} " +"به میدان زاویه تخم ریزی ارزش ها بعد از 255 بسته بندی می شوند ، درست مثل " +"بازیگران بدون بایت. منبع اطراف نیز این زاویه و سرعت را به سرعت تبدیل می کند." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"مجمع شاخه حلقه هدف ، محاسبه هدف و فروشگاه نهایی را انتخاب می کند. C++ بالا " +"یک خلاصه قابل خواندن است. چک های کامپایلر زیر برای منبع نگهداری شده در پروژه" +" مرتبط اعمال می شود." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "حلقه نگهداری شده و منبع هدف را بخوانید" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}ماکرو حلقه{ph1} · {ph2}منبع هدف و سرعت{ph3} · {ph4}نمایش زاویه{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "بررسی منبع نگهداری شده" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"چک های ضبط شده پروژه TH04 کد تولید گلوله ، از جمله این کمک کننده را با " +"زنجیره ابزار توربو C 4 4.0 J خود جمع آوری می کند." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 بایت تطبیق" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"کد تولید گلوله کامپایل شده با بخش 2139 بایت از فایل اجرایی اصلی مطابقت دارد." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "دو ساخت تمیز" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"دو ساخت جداگانه همان بایت های تطبیق یافته را تولید می کنند. هش های ورودی ضبط" +" شده با منبع نگهداری شده که در اینجا نشان داده شده مطابقت دارند." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "ثبت شده در 3 اکتبر 2026. {ph0}چک های کامپایلر را بخوانید{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "محدوده هویت و تجزیه و تحلیل هدف" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "هدف اصلی" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156,258 بایت, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "ورود کمک کننده" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} در REA ' s تصویر لود" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "فایل اصلی جبران" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}، بازگشت توسط {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "بازرسی کد ثبت شده" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 اکتبر 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"چک های کامپایلر بخش کامل کد bullet-add را شامل می شود ، از جمله این کمک " +"کننده. آنها همچنین سهم نقشه و جابجایی همپوشانی آن را مقایسه می کنند." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA تصویر بار dos استاتیک را در بخش بار تأیید کرد {ph0}. آدرس های آن تصویر " +"تجزیه و تحلیل را توصیف می کند. نتیجه تابع 503 بایت بدن را در دو محدوده در " +"طول 517 بایت گزارش می کند ؛ دستورالعمل های انتخاب شده در بالا در آن محدوده " +"های گزارش شده قرار دارند." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"نام منبع و چک های کامپایلر از نقطه بازرسی TH04 می آیند {ph0}. مشاهدات " +"بازسازی قبلی از اسکریپت های تجزیه و تحلیل پروژه استفاده می کردند ؛ این صفحه " +"یک بازرسی REA تازه از همان هدف اصلی را اضافه می کند. هویت بازی عرضه شده توسط" +" فهرست مخزن آن قرار گرفته است ، با منبع مستقل پاک و پاک هنوز باز است." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"شکل محاسبه زاویه را نشان می دهد. کنترل های کامل بازی ، زمان بندی و رفتار سخت" +" افزاری PC-98 دارای بررسی های زمان اجرا جداگانه در پروژه بازسازی هستند." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "بازسازی کامل TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"این پروژه چهار محصول dos بازی را از Ctained و مونتاژ نگهداری می کند. فراتر " +"از تولید گلوله ، منبع شامل مراحل ، کارفرمایان ، رندر ، ورودی ، منوها ، پایان" +" ها و مدیریت امتیاز است." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}مخزن TH04 را کاوش کنید{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}منبع تولید گلوله{ph1}{ph2}یار کامل ، انواع دیگر الگو و تنظیم قالب.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}راهنمای ساخت و اجرای DOS{ph1}{ph2}منبع را بسازید و آن را در جریان کار " +"شبیه ساز PC-98 پروژه تست کنید.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}وضعیت فعلی پروژه{ph1}{ph2}تایید DOS و پورت x64 بومی جداگانه.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 مهندسی معکوس: الگوهای گلوله DOS-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"کد dos اصلی 16 بیتی TH04 را با REA بررسی کنید . مونتاژ را دنبال کنید و C++ " +"را بازیابی کنید تا ببینید که چگونه یک حلقه گلوله فاصله دارد و به بازیکن هدف " +"قرار می گیرد." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "در این صفحه" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04 گلوله-الگوی مطالعه موردی" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "کپی TH04 مثال prompt" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 حلقه های گلوله ثابت و هدفمند ؛ به صورت افقی روی صفحه نمایش های کوچکتر " +"حرکت کنید" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"دو نمودار یک حلقه 16 گلوله ای حلقه ثابت از زاویه صفر شروع می شود. اضافه کردن" +" یک جهت بازیکن 40 هر جهت را با همان مقدار چرخش می دهد ؛ اولین گلوله برجسته " +"به سمت بازیکن اشاره می کند. هر دو فاصله 16 واحد زاویه ای یا 22.5 درجه دارند." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "کپی TH04 قالب شلیک" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "محاسبه حلقه هدف TH04 را دنبال کنید" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "کپی TH04 assembly گزیده" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "کپی قابل خواندن هدف-محاسبه حلقه" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "بازگشت به بالا" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "کپی" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "کپی شده" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "انتخاب شده" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "کد کپی شده به کلیپ بورد." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "کد انتخاب شده از صفحه کلید خود برای کپی کردن آن استفاده کنید." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA در GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "فاصله {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "ضربه به یک کاکتوس سرعت دیگری را امتحان کنید." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "فضا یا پرش ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "بازی دوباره" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "بازی" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "مکث" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "بازی را فشار دهید ، سپس از روی کاکتوس بپرید." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"ضربه به یک کاکتوس دوباره Play را فشار دهید یا سرعت را تغییر دهید و دوباره " +"راه اندازی کنید." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "دویدن فضا یا پرش یک کاکتوس را پاک می کند." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "مکث کرد. برای ادامه بازی را فشار دهید." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "سرعت ثابت: {speed}. فضا یا پرش یک کاکتوس را پاک می کند." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "سرعت ثابت: {speed}. برای امتحان کردن Play را فشار دهید." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "قانون بازیابی شده: از 6 شروع کنید ، سپس به سمت 13 افزایش دهید." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "سرعت ثابت: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"قانون بازیابی شده را تکرار کرد. هر چهار مقدار با چک بازی اصلی کنترل شده " +"مطابقت دارند وقتی به سه اعشاری گرد می شوند." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"بازی مجدد با مقادیر بازی اصلی ضبط شده متفاوت است. قانون سرعت و تنظیمات بالا " +"را مقایسه کنید." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} ثانیه ها" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} ثانیه ، بلوک زمان {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"محاسبه تعاملی در این مرورگر در دسترس نیست. مثال کد را در 59 ثانیه نشان می " +"دهد." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "چک کردن…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "{passed} / {total} چک های تصویب شده (شش مورد مرجع ، در شش و هشت رقم)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "نتونستم چک هاي مرجع رو اجرا کنم دوباره امتحان کن" + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "یک تحلیلگر که در کامپیوتر فکر می کند" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "یک چک یک شخصیت را نشان می دهد" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"ماسک هفتم تنها موقعیت 21 را در شبکه ورودی شش به شش انتخاب می کند. کد کاراکتر" +" آن باید برابر با 55 باشد ، بنابراین کاراکتر 7 است. ماسک های دیگر موقعیت های" +" مختلف را انتخاب می کنند و معادلات بیشتری را ارائه می دهند." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" +"بررسی هفتم برچسب های سلولی موقعیت های ورودی هستند که از 0 شروع می شوند." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "ماسک کدگذاری شده: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "21 سلول را حذف کنید. 1 را انتخاب کنید. 14 رو رد کن توقف در 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "فقط یک سلول به این مبلغ کمک می کند" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "موقعیت 21 در پرچم باید شامل 7 باشد." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "انتخاب شده: یک سلول" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 ماسک 26 معادله را می دهد." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "آنها را با هم حل کنید تا پرچم را پیدا کنید." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball تحقیق صدا-پان" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA دستورالعمل ، تماس گیرنده و شواهد بایت خواندن را برای یک تابع DX-Ball " +"فراهم می کند. یک ورودی پشته با 1.5625 ضرب می شود ، با 500 جبران می شود ، " +"مقیاس بندی می شود و به یک عدد صحیح تبدیل می شود. C نگهداری شده در 3205 مورد " +"اصلی-x86 و یک کامپایلر 63 بایت جداگانه بررسی می شود." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "پشته" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "ورودی x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "صحیح" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "بازگشت" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "تابع بازسازی‌شده" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "کد C بازسازی‌شده" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "فراخوانی برخورد" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "کد اصلی" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "مقایسه" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "۳٬۲۰۵ آزمون" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "ساخت VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "تطابق ۶۳ بایت" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "جریان تحقیقات REA" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"یک سوال در مورد یک هدف محلی بپرسید. REA از طریق آداپتورهای تجزیه و تحلیل " +"محلی بازرسی و ردیابی می کند ، شواهد را باز می گرداند و از سوالات پیگیری " +"پشتیبانی می کند زیرا نماینده شما توضیح می دهد ، اجرا می کند و آزمایش می کند." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "۱. پرسش" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "دستیار + فایل محلی" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "برنامه / فایل / مرورگر" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "۲. بررسی و دنبال کردن" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "۳. خواندن شواهد" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "کد / ارجاع‌ها /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "موارد نامشخص" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "۴. استفاده از نتیجه" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "دستیار شما" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "توضیح / ساخت / آزمون" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "ابزارهای تحلیل" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "ابزارهای تحلیل محلی" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "پرسش بعدی" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: فاصله و هدف قرار دادن یک حلقه گلوله" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"یک چرخش کامل در جهت عقربه های ساعت دارای 256 واحد زاویه است. شانزده گلوله از" +" زاویه صفر ، شانزده ، سی و دو تا 240 شروع می شود. اضافه کردن یک مثال جهت " +"بازیکن از چهل ، تمام شانزده جهت را با هم می چرخاند ؛ اولین نقاط گلوله در " +"بازیکن. چرخش قالب صفر است." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "حلقه ثابت" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "گلوله اول: زاویه 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "حلقه هدف" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "گلوله اول: جهت بازیکن" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "مرکز" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "بازیکن" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "فاصله یکسان: 256 × 16 = 16 واحد زاویه = 22.5 درجه" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "نمونه‌ها" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "وبلاگ" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "شروع کنید" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "راهنماها" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "کد منبع" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "مجوز MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "به جامعه بپیوندید" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "ما را در X دنبال کنید" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * منبع اسکریپت انتخاب شده" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "کد منبع" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "خروجی قالب مورد انتظار" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "دستورالعمل ها" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "تماس گیرنده" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "ثابت ها" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "تابع C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "دکمه" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "API پیش بارگذاری" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "فایل CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "کلیک شما" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "درخواست ضبط شده" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "اسکریپت صادرات" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA نتیجه * خلاصه.گزیده ای از ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA گزیده دستورالعمل * 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA گزیده تماس گیرنده * 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "نتایج بایت REA * به عنوان دو برابر اندک تفسیر می شود" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "بازیابی C * گزیده" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "ببینید REA چطور کار می‌کند ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "راهنمای نصب" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "ویترین ها →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "تنظیمات انتخاب شده از اسکریپت بازرسی شده" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "خلاصه قابل خواندن از % handler" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * دستورالعمل های اصلی انتخاب شده" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "شناسه های اپراتور * منبع مایکروسافت" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "@Reatools را در X دنبال کنید" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "نماینده → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → عامل * نتایج انتخاب شده" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → عامل * روش ها و تماس گیرندگان" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * جاوا تجزیه شده انتخاب شده" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "خلاصه قابل خواندن * تفسیر نماینده" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP ، بدن کامل" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "دانلود Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "دانلود analysis provider اندروید" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "نماینده → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → عامل * نتایج انتخاب شده" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → عامل * دستورالعمل های انتخاب شده" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "نماینده → REA * read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → عامل * ورودی های هفتم" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "اجرایی اصلی * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "دانلود چالش اصلی" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "دانلود حل کننده" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "نتیجه REA * گزیده شبه کد" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "نماینده → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → عامل * گزیده دستورالعمل" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → نماینده * گزیده تماس گیرنده" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "عامل → REA * دو {ph0} درخواست ها" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "نتایج بایت REA · رمزگشایی به عنوان دو برابر" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "با هدف خود شروع کنید" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "تولید کد" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "قانون بازیابی شده" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "ساعت قابل تنظیم" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "باینری" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "چک کردن کد" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "معادلات" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "درست است!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "قابل اجرا" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "یافته های REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "بازیابی C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "اعتبار سنجی" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "برنامه بسته بندی شده" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "Api در معرض" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "بسته بندی IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "کلیپ بورد" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "کد اصلی DOS" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA دستورالعمل" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "محاسبه زاویه" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "حلقه گلوله" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "Api صفحه در معرض" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "رندر IPC تماس" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "ارسال به کلیپ بورد سیستم" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "ذخیره شده به صورت محلی توسط Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "ورودی Markdown" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "خروجی تجزیه کننده ساختاری · گزیده" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "برنامه خود را تجزیه و تحلیل کنید" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "نماینده → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → عامل * زمینه های انتخاب شده" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "نماینده → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → عامل * گزیده دستورالعمل" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "نتیجه عملکرد مشابه * گزیده aim" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "C نگهداری شده مربوطه++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "حلقه ماکرو * TH04 شاخه ، گزیده" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "زاویه و سرعت * منبع گزیده" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "% را فشار دهید تا ببینید چه اتفاقی برای 10 می افتد." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% از 200 20 = را فشار دهید تا اضافه شود ." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "برای ضرب ، 10 0.1 می شود. = را فشار دهید تا ضرب شود ." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"ترجمه در حال به روز رسانی است. فعلا این صفحه را به زبان انگلیسی بخوانید." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}برای تجزیه و تحلیل از REA استفاده کنید {ph3} و توضیح دهید که" +" چگونه داده ها را صادر می کند. مکان های کد و منبع مربوطه را نشان " +"دهید.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}REA را با {ph3} نصب کن و به این دستیار برنامه‌نویسی متصل کن." +" ابتدا برنامهٔ تغییرات را نشان بده و منتظر تأیید من بمان. سپس نصب را بررسی " +"کن.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}دانلود فیلم {ph3} به یک پوشه مثال جدید بروید و آن را باز " +"کنید. با استفاده از REA برای پیدا کردن آنچه اتفاق می افتد زمانی که من کلیک " +"کنید صادرات یادداشت. نشان می دهد که در آن {ph4} نوشته شده است ، چه زمینه " +"هایی را شامل می شود ، و فایل ها و خطوط مربوطه.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}REA را با {ph3} نصب کن و به این دستیار برنامه‌نویسی متصل کن." +" ابتدا برنامهٔ تغییرات را نشان بده و منتظر تأیید من بمان. سپس نصب را بررسی " +"کن.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}REA را با {ph3} نصب کن و به این دستیار برنامه‌نویسی متصل کن." +" ابتدا برنامهٔ تغییرات را نشان بده و منتظر تأیید من بمان. سپس نصب را بررسی " +"کن.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}برای بازرسی از REA استفاده کنید {ph3}. این وب سایت را برای " +"من کلان کنید.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "بازسازی · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"با {ph0} و npm در دسترس ، راه اندازی را اجرا کنید ، عامل کدگذاری خود را " +"انتخاب کنید و تغییرات پیشنهادی را بررسی کنید." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "یک مثال ارائه شده · {ph0} و npm * عامل کدگذاری شما" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"از یک عامل کدگذاری مانند Claude Code, Codex یا Cursor. شما نیاز دارید {ph0} " +"و npm; {ph1}راهنمای راه اندازی لیست نسخه های پشتیبانی شده{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}صفحه · {ph1}{ph2}{ph3}یادداشت های صادراتی{ph4}{ph5}تماس ها {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}پل · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}یک پیام نامگذاری شده به فرآیند اصلی " +"می فرستد.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}کنترل کننده · {ph1}{ph2}{ph3}بنویسید {ph4}{ph5}{ph6}تماس با قالب ساز در" +" {ph7} و فایل را می نویسد.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * خطوط 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}پیش بینی CSV برای یک یادداشت با id 1 و عنوان {ph3}. سپس مثال" +" را اجرا کنید {ph4} قالب بندی با {ph5} برای بررسی پیش بینی و خروجی واقعی را " +"نشان دهید.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"عنوان در یک فیلد نقل قول شده باقی می ماند ؛ هر علامت نقل قول دو برابر می " +"شود. این قالب را مستقیما با {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV قالب ساز" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"شما نیاز دارید {ph0} 22 (22.19+), 24 (24.11+) یا 26+ npm همراه با {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "ندارم {ph0}، یا مطمئن نیستید ؟ " + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"اگر {ph0} چاپ v22. 19+ ، v24.11 + یا v26+ ، شما آماده هستید. اگر نسخه قدیمی " +"تر را چاپ کند یا \"شناخته نشده\" / \"دستور پیدا نشده\" را نصب کند {ph1} 24 " +"لیتر:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * نمونه منبع گزیده" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}مثال را باز کنید{ph1} · {ph2}دانلود فیلم {ph3}{ph4} · {ph5}دانلود فیلم " +"{ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * منبع نمونه" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"مثال را دانلود کنید و آن را باز کنید. آرشیو شامل کامل {ph0} پوشه. تجزیه و " +"تحلیل آن با {ph1} و npm; Electron برای این مثال لازم نیست." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"اولین بار یا گمشده {ph0} یا یک عامل برنامه نویسی ؟ {ph1}راهنمای راه اندازی " +"گام به گام را دنبال کنید →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "مثلاً: {ph0}چرا ماشین‌حساب برای {ph1} عدد 220 را می‌دهد؟{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}استفاده کنید REA برای بازرسی Windows ماشین حساب. چرا {ph3} " +"220 می دهند؟{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * بارگذاری شده {ph0} * خطوط انتخاب شده" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"دیدیم چرا {ph0}{ph1} می دهد 220.{ph2} حالا بیایید قوانین هر دو + و × را " +"بازیابی کنیم و آنها را امتحان کنیم." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 * REA می خواند {ph1}{ph2}{ph3}برنامه ماشین حساب را راه اندازی می " +"کند{ph4}{ph5}کد باز می شود {ph6}. سپس نماینده کتابخانه برنامه نصب شده را " +"انتخاب می کند.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}استفاده کنید REA برای بازرسی aegis-v3.4.{ph3}. پیدا کنید که " +"چگونه کد ورود شش رقمی را تولید می کند ، توضیح دهید که چرا هر 30 ثانیه تغییر " +"می کند ، و یک نمایشی کوچک را بازسازی کنید که در آن می توانم زمان را تغییر " +"دهم.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} * عضو API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} * کمک کننده IPC" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "اصلی/{ph0} * handler helper" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "اصلی/{ph0} * گیرنده کلیپ بورد" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "بازسازی * دینو-سرعت.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "با Node.js و npm در دسترس ، راه اندازی را اجرا کنید ، عامل کدگذاری خود را " +#~ "انتخاب کنید و تغییرات پیشنهادی را بررسی کنید." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "یک مثال ارائه شده · Node.js و npm * عامل کدگذاری شما" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "از یک عامل کدگذاری مانند Claude Code, Codex یا Cursor. شما نیاز دارید " +#~ "Node.js و npm; {ph0}راهنمای راه اندازی لیست نسخه های پشتیبانی شده{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}صفحه * رندر.js{ph1}{ph2}یادداشت های صادراتی{ph3}{ph4}تماس ها " +#~ "{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}پل * پیش بار.js{ph1}{ph2}{ph3}{ph4}{ph5}یک پیام نامگذاری شده به فرآیند " +#~ "اصلی می فرستد.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Handler * اصلی.js{ph1}{ph2}یادداشت بنویسید.csv{ph3}{ph4}تماس با قالب " +#~ "ساز در {ph5} و فایل را می نویسد.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}پیش بینی CSV برای یک یادداشت با id 1 و عنوان سلام, \"REA\". " +#~ "سپس فرمت tocsv نمونه را با Node.js برای بررسی پیش بینی و خروجی واقعی را نشان" +#~ " دهید.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "عنوان در یک فیلد نقل قول شده باقی می ماند ؛ هر علامت نقل قول دو برابر می " +#~ "شود. این قالب را مستقیما با Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV قالب ساز" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "شما نیاز دارید Node.js 22 (22.19+), 24 (24.11+) یا 26+ npm همراه با Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "ندارم Node.js، یا مطمئن نیستید ؟ " + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "اگر {ph0} چاپ v22. 19+ ، v24.11 + یا v26+ ، شما آماده هستید. اگر نسخه قدیمی " +#~ "تر را چاپ کند یا \"شناخته نشده\" / \"دستور پیدا نشده\" را نصب کند Node.js 24" +#~ " لیتر:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}مثال را باز کنید{ph1} · {ph2}دانلود صادرات.js{ph3} · {ph4}دانلود " +#~ "یادداشت ها.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "مثال را دانلود کنید و آن را باز کنید. آرشیو شامل کامل {ph0} پوشه. تجزیه و " +#~ "تحلیل آن با Node.js و npm; Electron برای این مثال لازم نیست." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "اولین بار یا گمشده Node.js یا یک عامل برنامه نویسی ؟ {ph0}راهنمای راه " +#~ "اندازی گام به گام را دنبال کنید →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "مثلاً: {ph0}چرا ماشین‌حساب برای 200 + 10% عدد 220 را می‌دهد؟{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}استفاده کنید REA برای بازرسی Windows ماشین حساب. چرا 200 + " +#~ "10% 220 می دهند؟{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "دیدیم چرا {ph0}200 + 10% می دهد 220.{ph1} حالا بیایید قوانین هر دو + و × را " +#~ "بازیابی کنیم و آنها را امتحان کنیم." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA \"کالک\" رو ميخونه.exe{ph1}{ph2}برنامه ماشین حساب را راه " +#~ "اندازی می کند{ph3}{ph4}کد باز می شود {ph5}. سپس نماینده کتابخانه برنامه نصب " +#~ "شده را انتخاب می کند.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}استفاده کنید REA برای بازرسی aegis-v3.4.3.apk. پیدا کنید که " +#~ "چگونه کد ورود شش رقمی را تولید می کند ، توضیح دهید که چرا هر 30 ثانیه تغییر " +#~ "می کند ، و یک نمایشی کوچک را بازسازی کنید که در آن می توانم زمان را تغییر " +#~ "دهم.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/preload.js * عضو API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/preload.کمک کننده JS * IPC" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "اصلی / شاخص.js * handler helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "اصلی / شاخص.گیرنده کلیپ بورد js · " + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "اصلی.js * خطوط 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "صادرات.js * نمونه منبع گزیده" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "رندر.js * منبع مثال" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "پیش بار.js * منبع مثال" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "اصلی.js * منبع مثال" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * شاخص لود شده.js * خطوط انتخاب شده" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}استفاده کنید REA برای تجزیه و تحلیل /مطلق/مسیر/به/برنامه و " +#~ "توضیح چگونگی صادرات داده ها. مکان های کد و منبع مربوطه را نشان " +#~ "دهید.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}نصب کنید REA و با استفاده از npx rea-agents @ آخرین تنظیمات." +#~ " نقشه ي راه اندازي رو براي تاييد بهم نشون بده ، بعد نصبش رو تاييد " +#~ "کن.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}دانلود فیلم https://rea.tools/examples/notes-example.zip به " +#~ "یک پوشه مثال جدید بروید و آن را باز کنید. استفاده کنید REA برای پیدا کردن " +#~ "آنچه که اتفاق می افتد زمانی که من روی یادداشت های صادرات کلیک کنید. نشان می " +#~ "دهد که در آن یادداشت.csv نوشته شده است ، چه زمینه هایی را شامل می شود ، و " +#~ "فایل ها و خطوط مربوطه.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}نصب کنید REA و با استفاده از npx rea-agents @ آخرین تنظیمات." +#~ " نقشه ي راه اندازي رو براي تاييد بهم نشون بده ، بعد نصبش رو تاييد " +#~ "کن.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}نصب کنید REA و با استفاده از npx rea-agents @ آخرین تنظیمات." +#~ " نقشه ي راه اندازي رو براي تاييد بهم نشون بده ، بعد نصبش رو تاييد " +#~ "کن.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}استفاده کنید REA برای بازرسی https://rea.tools/. این وب سایت" +#~ " را برای من کلان کنید.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "کد [21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× pan_scale" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0} REA {ph1} {ph2}مهندسی معکوس هر چیزی{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/fr/messages.po b/website/locales/fr/messages.po new file mode 100644 index 000000000..3f79993e2 --- /dev/null +++ b/website/locales/fr/messages.po @@ -0,0 +1,13540 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Accueil{ph1} / Blogue" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blogue." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Réflexions sur l'ingénierie inverse." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Reconstruction du jeu{ph0}Essai" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "La révolution industrielle dans l'ingénierie inverse" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"Ce que la reconstitution manuelle et la reconstruction de TH08, TH095 et " +"TH04 m'ont appris sur les agents, la vérification et les connaissances qui " +"se combinent dans les projets." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Lire l'article" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Par N0zoM1z0 · 10 octobre 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Haut" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "Blog REA-Réflexions sur l'ingénierie inverse" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Réflexions sur l'ingénierie inverse, en s'appuyant sur l'expérience pratique" +" avec REA et les agents d'IA." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-Découvrez comment fonctionne le logiciel. Ingénierie inverse avec votre " +"agent de codage." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Accueil REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Navigation principale" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA sur GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Rejoindre REA sur Discord" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Suivre REA sur X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Accueil{ph1} / {ph2}Blogue{ph3} / La reconstruction de Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Essai * La reconstruction de Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "La révolution industrielle dans l'ingénierie inverse." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Par N0zoM1z0 · 10 octobre 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "À retenir" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Donner aux agents une autonomie sur l'enquête.{ph1} Définissez un " +"objectif et des critères d'acceptation clairs, puis laissez l'agent décider " +"quoi essayer ensuite." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Utilisez le référentiel et Git comme mémoire de travail.{ph1} Gardez le" +" raisonnement avec le code. Les points de contrôle Git permettent à la " +"session suivante de continuer après la fin de la conversation." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Laissez les preuves décider de ce que vous affirmez.{ph1} Une " +"explication confiante doit encore être testée. \"Inconnu\" est une réponse " +"valable lorsque la preuve est incomplète." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Testez également la référence de vérification (oracle).{ph1} Essayez " +"les cas qu'il devrait rejeter. S'il manque un bogue, revoyez les résultats " +"antérieurs qui en dépendaient." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Nous sommes aux premiers jours de la révolution industrielle de " +"RE.{ph1} Les méthodes sont encore en train de prendre forme. Il reste encore" +" beaucoup à explorer." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Comment l'expérience se compose" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Direction humaine{ph1} * Objectif et critères d'acceptation" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Autonomie" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Agent" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Choisissez une expérience.{ph0}Proposer une hypothèse." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Vérification" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Référence de validation" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Essai contre a{ph0}référence concrète." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Dépôt" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Mémoire de travail" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Code, preuves,{ph0}contrôles et leçons." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Inadéquation{ph0}{ph1}Réviser l'hypothèse{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Un meilleur{ph0}{ph1}point de départ{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Réutilisation" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Passe{ph1} * Conservez le résultat et ses preuves" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Chaque projet laisse le suivant avec un meilleur point de départ. Cela " +"inclut la correction des chèques lorsque nous découvrons une lacune." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "Dans cet article" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Août 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08: la suite{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Deux approches{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095: préparation combinée{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: à travers les architectures{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}D'exact à lisible{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Le virage industriel{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Ce qui devient possible{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Ce qui a changé en août 2026" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Avant ce travail, j'avais fait beaucoup de rétro-ingénierie manuelle. " +"J'inspectais une fonction jusqu'à ce que j'aie une explication, puis je " +"testais cette explication par rapport au programme. Aller plus loin " +"signifiait passer plus de temps sur la prochaine fonction. Cela signifiait " +"aussi garder une image de plus en plus grande dans ma tête." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"La majeure partie de mon travail concerne les jeux. Je les reconstruis pour " +"que leur comportement puisse être compris et éventuellement transposé dans " +"un port logiciel ou un mod. C'est l'expérience derrière cet article. La " +"méthode peut être utile ailleurs, mais chaque champ doit établir ce qu'il " +"peut vérifier par rapport à une référence fiable." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"En août 2026, j'ai commencé à explorer sérieusement l'ER pilotée par les " +"agents. Je voulais voir jusqu'où un agent pouvait aller avec l'accès au " +"programme et aux outils de développement ordinaires. La reconstruction de " +"Touhou m'a donné un projet substantiel pour le découvrir." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Les premiers progrès ont été surprenants. Une enquête pourrait continuer à " +"avancer sans que je choisisse chaque étape individuelle. Une comparaison " +"échouée peut envoyer l'agent à un autre appelant. Il pourrait écrire un " +"petit diagnostic et utiliser le résultat pour décider quoi essayer ensuite. " +"Lui donner cette liberté a fait la différence: je pouvais consacrer plus " +"d'attention à l'orientation du projet et à la fiabilité de ses " +"vérifications." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"Le rythme a attiré mon attention en premier. Puis j'ai commencé à me " +"demander ce qui survivrait au-delà du projet actuel. Le prochain jeu " +"bénéficierait-il de tout ce que nous venions d'apprendre?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: s'appuyer sur le travail humain" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0}TH08{ph1}, Nuit impérissable, a commencé comme une continuation de " +"{ph2}GensokyoClubreconstruction de{ph3}. Leur source publique m'a donné une " +"base substantielle. Il est venu avec la connaissance de la construction et " +"un historique des contributions que j'ai conservé dans la suite." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"L'historique importé se termine au point de contrôle public du 10 août. Ma " +"continuation indépendante a commencé le 13 août. Le 19 août, le grand livre " +"enregistrait la source des 1 107 fonctions de jeu identifiées." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Un port de reconstruction jouable de Linux a été engagé le 24 août, environ " +"onze jours après le début de la continuation. Une édition Web a suivi. La " +"version native Linux 64 bits est arrivée le 30 août." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Ce qui m'a frappé, c'est que le travail avait atteint un programme que les " +"gens pouvaient exécuter. Y arriver nécessitait de suivre des problèmes au-" +"delà d'une fonction individuelle. Même lorsque deux fonctions semblaient " +"correctes isolément, elles pouvaient accidentellement utiliser des copies " +"séparées de l'état qui auraient dû être partagées." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Cela a fait des vérifications des références un élément central du travail. " +"Je les appelle {ph0}références de vérification (oracles){ph1}. Une " +"comparaison de code peut nous dire si une fonction reconstruite reproduit " +"les instructions d'origine. Une vérification d'exécution peut nous dire si " +"une route exercée atteint l'état attendu. L'agent propose une explication et" +" la teste; un décalage lui donne quelque chose de spécifique à étudier." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Une correspondance exacte avec la mauvaise constante" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Une référence de vérification (oracle) est un logiciel que quelqu'un a " +"écrit. TH08 m'a rappelé clairement à quel point on peut dépendre de ce " +"logiciel." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"En septembre, un bogue signalé par un port de commutateur en aval a renvoyé " +"à la collecte automatique des éléments. La source reconstruite a vérifié la " +"puissance du joueur par rapport {ph0}. L'original utilisé {ph1}, le seuil de" +" puissance maximale." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"La puissance normale n'est pas négative, de sorte que le contrôle de " +"puissance reconstruit était effectivement toujours satisfait. Au-dessus de " +"la ligne de collecte, le jeu pouvait attirer des objets sans nécessiter une " +"puissance maximale. Les autres exceptions à la condition étaient correctes. " +"Cette seule constante a changé le comportement." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "" +"{ph0}Pourtant, la fonction avait déjà réussi la comparaison exacte.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Une reconstruction peut placer une constante à une adresse différente. " +"L'outil de comparaison a tenu compte de cela en ajustant les adresses dans " +"les instructions compilées avant de les comparer avec l'original. Mais il " +"n'a jamais vérifié la valeur à virgule flottante stockée à l'adresse " +"référencée." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Cela a laissé un trou dans le chèque. Il pourrait pointer l'instruction " +"reconstruite vers l'original {ph0} alors que la source disait encore {ph1}. " +"Les octets d'instruction correspondent. La source signifiait quelque chose " +"de différent." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"Les {ph0}Correctif du 2 septembre{ph1} correction de la source et " +"vérification de la comparaison des octets réels de la constante référencée. " +"A {ph2}audit plus large{ph3} puis examiné 1 548 références constantes à " +"virgule flottante. Il a trouvé douze autres références incorrectes dans cinq" +" fonctions acceptées." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"La comparaison vérifie maintenant chacune de ces constantes à virgule " +"flottante. Ses tests incluent des valeurs délibérément erronées pour " +"s'assurer qu'elles sont rejetées. Nous avons également dû revoir les " +"résultats qui avaient réussi le test le plus faible." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}La référence de vérification (oracle) devait également être " +"reconstruite.{ph1} La réparer faisait partie de la réparation du jeu." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"C'est important lorsque l'équipe est principalement composée d'une seule " +"personne travaillant avec des agents. Je ne peux pas inspecter " +"personnellement chaque ligne qu'ils produisent, donc une grande partie de ma" +" confiance repose sur leurs contrôles. L'angle mort d'une référence de " +"vérification partagée (oracle) peut affecter de nombreuses enquêtes avant " +"que je ne m'en aperçoive. Je dois comprendre ce que le vérificateur vérifie " +"réellement et le tester par rapport aux cas qui devraient échouer." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"Au fur et à mesure que le travail se poursuivait, ces vérifications sont " +"devenues une partie du référentiel. Il en va de même pour les raisons des " +"changements de source et des notes qui permettent à une session ultérieure " +"de reprendre là où une session précédente s'est arrêtée. {ph0}Le référentiel" +" de code source devenait la mémoire de travail du projet.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Un lot réussi nous a donné à la fois du code récupéré et un meilleur " +"environnement pour le lot suivant.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Deux idées différentes de reconstruction" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub's {ph0}LISEZ-MOI public{ph1} rend explicite son désaccord avec " +"ce genre de travail. L'avis annonce que d'autres développements auront lieu " +"en privé jusqu'à leur achèvement. Un passage se lit comme suit:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"La montée en puissance des arnaqueurs (décompilations et ports d'IA) dans " +"cet espace, tirée de notre travail, donne une mauvaise image des futurs " +"efforts de décompilation…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"L'avis décrit également les conséquences psychologiques pour les " +"responsables. Leur politique de contribution exclut les pull requests " +"produites principalement avec l'IA. Ils ont consacré leur temps libre à un " +"travail difficile, et ce travail a contribué à rendre ma continuation " +"possible. Je respecte l'effort derrière cela. Le désaccord dont je veux " +"discuter concerne la manière dont la reconstruction devrait se dérouler et " +"la manière dont une contribution devrait être jugée." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"Dans le flux de travail manuel que je connaissais, développer une " +"compréhension d'une fonction et la reconstruire revenait généralement à la " +"même personne. Un projet reposait fortement sur l'expertise de cette " +"personne. La confiance dans le contributeur importait parce qu'une grande " +"partie du raisonnement se produisait pendant qu'ils travaillaient." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Les projets existants préservent déjà les connaissances dans leur source et " +"construisent des outils. Ce qui a changé pour moi, c'est qu'un agent pouvait" +" utiliser ces connaissances pour poursuivre seul la prochaine enquête." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"Dans ma suite, je décide de l'objectif et de la norme pour accepter un " +"résultat. L'agent a une grande liberté pour enquêter. Sa reconstruction " +"proposée doit ensuite survivre aux vérifications pertinentes. Je veux qu'une" +" autre personne puisse examiner pourquoi nous avons choisi une " +"implémentation, même si un agent a fait la majeure partie du travail." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Cela peut être une transition difficile. Des années de travail minutieux " +"peuvent devenir la base d'une continuation qui avance beaucoup plus vite. " +"Cela soulève de vraies questions sur le crédit. Cela change également ce que" +" les mainteneurs doivent savoir avant d'accepter une contribution." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"L'analogie industrielle m'aide à y réfléchir. Dans un métier, une grande " +"partie du processus dépend de l'habileté de la personne qui l'exécute. Les " +"machines changent là où cette compétence est nécessaire. Quelqu'un doit " +"encore concevoir le processus et reconnaître quand sa sortie est erronée. " +"Différentes communautés peuvent choisir la part de ce changement qu'elles " +"souhaitent assumer." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Mon choix est de continuer ouvertement, avec le travail hérité crédité et " +"son histoire préservée. Je veux que le nouveau travail soit révisable. Cela " +"nous donne un moyen de nous demander jusqu'où cette approche peut aller et " +"d'apprendre de ce qui ne va pas en cours de route." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Sources: GensokyoClub's {ph0}LISEZ-MOI l'avis{ph1}, vérifié le 10 octobre " +"2026, et son {ph2}politique de contribution{ph3}. La citation est un extrait" +" raccourci. TH08's {ph4}crédits et provenance{ph5} enregistrez la limite de " +"continuation." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: l'expérience commence à s'accumuler" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0}TH095{ph1}, Tirez sur la balle, a rendu la valeur de cette expérience " +"beaucoup plus facile à voir. Son dépôt a débuté le 29 août avec zéro " +"fonction de jeu confirmée dans le grand livre. Nous devions encore apprendre" +" le jeu. Mais nous en savions déjà beaucoup plus sur la façon de commencer " +"une reconstruction et de la faire avancer." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"Au 7 septembre, les 697 fonctions de jeu identifiées avaient une source. Au " +"8 septembre, 696 avaient été acceptées comme comparaisons exactes. " +"L'ensemble du programme s'est lié le 9 septembre. La reconstruction Windows " +"i386 a été marquée jouable le 10 septembre, environ douze jours après " +"l'initialisation." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"J'ai trouvé cela plus excitant que la vitesse du premier projet. Une " +"nouvelle cible pourrait bénéficier du travail effectué sur un autre jeu. " +"L'expérience était déjà présente dans les outils et dans la manière dont le " +"projet était organisé." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Par exemple, TH08 nous avait appris à prêter attention au programme assemblé" +" très tôt. Si plusieurs fonctions récupérées dépendent du même état, leurs " +"comparaisons isolées laissent une question importante ouverte. Nous devons " +"les voir travailler ensemble. Cette leçon a aidé à façonner la façon dont " +"nous avons abordé la construction de l'ensemble du programme de TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Une leçon qui reste dans ma tête est utile pendant que j'y suis. Une fois " +"que cela devient une vérification qu'une autre session peut s'exécuter, cela" +" peut continuer à m'aider après que je sois passé à autre chose. L'agent " +"suivant peut utiliser le résultat sans répéter l'enquête qui y a conduit." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Le bogue de la constante à virgule flottante appartient également à cette " +"mémoire. Cela explique pourquoi la vérification d'une référence nécessite " +"également de vérifier les données qui la sous-tendent. Conserver cette " +"correction avec le code aide les projets ultérieurs à éviter d'hériter de " +"l'angle mort de l'ancien chèque." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}La méthode devient une partie du matériel de départ pour le prochain " +"match.{ph1} Nous pouvons consacrer plus d'efforts au prochain projet sur ce " +"qui est réellement nouveau à propos de sa cible." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Le même avantage est disponible pour les personnes rejoignant plus tard. Ils" +" peuvent inspecter une décision et réexécuter sa vérification avant de " +"poursuivre le travail. Ils n'ont pas à reconstituer l'historique complet du " +"projet pour savoir pourquoi la source ressemble à ce qu'elle est." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: le flux de travail survit à une architecture différente" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0}TH04{ph1}, Histoire de Lotus Land, a pris ce travail dans le PC-98 Ère " +"DOS. La cible était maintenant un environnement 16 bits avec quatre " +"programmes coopérants. Comprendre son comportement matériel nécessitait des " +"preuves différentes de celles du Windows jeux. Existant {ph2}Travail " +"ReC98{ph3} nous a donné des connaissances précieuses et du matériel source " +"ici aussi." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"La reconstruction DOS fonctionne maintenant. Lors de mes tests manuels, j'ai" +" joué des itinéraires normaux complets jusqu'à leurs fins et vérifié les " +"sauvegardes. Le travail actuel est un port natif 64 bits. L'établissement " +"d'une version DOS fonctionnelle donne d'abord à ce port une référence." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"L'architecture a changé ce que nous devions étudier. Cela a également changé" +" le compilateur et le moteur d'exécution par rapport auxquels nous avons " +"vérifié notre travail. Mais l'agent pourrait toujours suivre une question " +"jusqu'à un résultat et laisser ce résultat guider l'expérience suivante." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Considérez la transition du gameplay à une fin. Nous devons savoir quel État" +" franchit cette frontière et quel programme en est responsable. C'est " +"quelque chose que nous pouvons étudier contre le produit DOS. Une fois que " +"les preuves et les vérifications sont disponibles, un agent peut résoudre la" +" question autant qu'il l'a fait sur un titre Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"C'est pourquoi TH04 est important pour l'argument. Un changement substantiel" +" de plateforme ne nous a pas obligés à recommencer avec une nouvelle façon " +"de travailler. L'architecture définissait le problème; le flux de travail " +"nous donnait encore un moyen de le résoudre." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Pour le port 64 bits, nous pouvons maintenant examiner la nouvelle " +"implémentation par rapport au comportement déjà récupéré sur DOS. Les " +"connaissances issues de la reconstruction donnent au port de quoi s'appuyer." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"État du projet au 10 octobre 2026: {ph0}Reconstruction DOS et tests " +"manuels{ph1} · {ph2}port 64 bits{ph3}. Le port reste en développement." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Du code exact au code lisible" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Une fois qu'une reconstruction fonctionne, je veux que quelqu'un d'autre " +"puisse la comprendre." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Pour moi, l'assemblage et les décalages bruts peuvent ressembler à de vieux " +"amis. Je me rends compte que c'est une définition un peu inhabituelle de " +"“lisible.\"La plupart des gens préféreraient suivre la logique du jeu sans " +"garder en tête la disposition de la mémoire de l'exécutable." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"C'est là {ph0}reconstruction sémantique{ph1} entre. Un champ récupéré peut " +"encore être connu principalement par son décalage. Nous suivons comment le " +"jeu l'utilise jusqu'à ce que nous puissions expliquer son rôle. Ensuite, " +"nous pouvons lui donner un nom significatif et un type qui correspond aux " +"preuves. Nous gardons le raisonnement avec la source afin que la personne " +"suivante puisse voir d'où vient cette interprétation." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Cela devient particulièrement important pour un port logiciel. Une adresse " +"absolue me dit où quelque chose vivait dans l'ancien exécutable. Cela donne " +"une implémentation 64 bits peu d'aide pour décider quel objet doit posséder " +"cet état. Pour déplacer le comportement en toute sécurité, nous devons " +"récupérer la relation derrière l'ancien accès mémoire." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "L'ordre que j'utilise maintenant est:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Récupérez une ligne de base exacte.{ph1} Compilez les pièces " +"reconstruites avec le compilateur historique. Comparez le code et les " +"données pertinents avec l'exécutable d'origine. Enregistrez les différences " +"non résolues afin que la phase suivante ait un point de départ clair." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Construisez-le et jouez-le sur la plate-forme d'origine.{ph1} Reliez " +"ces éléments au programme réel en utilisant l'architecture et le compilateur" +" d'origine. Exercez des chemins de jeu importants. C'est là que nous pouvons" +" trouver des problèmes d'état partagé ou d'initialisation qu'une comparaison" +" de fonction isolée a manqués." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Reconstruisez la sémantique par rapport aux deux références.{ph1} " +"Prenez une partie cohérente du jeu à la fois et établissez ce que signifie " +"sa source récupérée. Améliorez sa représentation tout en préservant les " +"comparaisons exactes et la construction historique jouable." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Faire le port moderne.{ph1} Déplacez le comportement établi dans le " +"nouvel environnement, tel qu'une version native 64 bits. Le jeu de " +"plateforme original reconstruit reste une référence pour comparer le " +"comportement du port." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"La construction jouable de la deuxième étape devient un {ph0}deuxième " +"référence de vérification (oracle){ph1} pendant la troisième. La première " +"référence de vérification (oracle) vérifie si notre source modifiée " +"reproduit toujours le code et les données d'origine pertinents. La seconde " +"vérifie que le programme reconstruit se construit toujours et se comporte " +"correctement le long des chemins que nous exerçons." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Ils attrapent différentes erreurs. Un changement de type peut modifier les " +"instructions générées. Un changement de propriétaire peut laisser deux " +"parties du jeu utilisant des copies d'état différentes. Garder les deux " +"vérifications disponibles donne à l'agent un échec concret à enquêter avant " +"de poursuivre un refactor." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Un nom a besoin de preuves qui lui sont propres. Une comparaison exacte ne " +"peut pas nous dire si un champ signifie vraiment \"temps " +"d'invulnérabilité\".\"Nous devons établir cela à partir de la façon dont le " +"jeu l'écrit et l'utilise. Si la signification reste incertaine, un nom " +"neutre est plus utile au prochain lecteur qu'une supposition confiante." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Nous avons appris cet ordre à travers les projets. TH08 avait déjà des " +"ports jouables avant certains de ses audits ultérieurs de plate-forme " +"historique. Cela rendait certains défauts plus difficiles à voir. Les " +"{ph0}Flux de travail actuel de l'usine{ph1} place la construction de la " +"plate-forme d'origine en premier, de sorte que le travail sémantique puisse " +"l'utiliser comme référence avant le début du portage." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}La reconstruction exacte nous donne une référence. La reconstruction " +"sémantique rend les connaissances récupérées utilisables.{ph1} Un port peut " +"alors s'appuyer sur les deux." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Qu'est-ce qui en fait un changement industriel" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Ces projets ont changé où j'ai passé mon attention. Une fois que les agents " +"ont pu mener une grande partie de l'enquête, l'amélioration de leur " +"environnement de travail est devenue l'une des choses les plus utiles que je" +" pouvais faire. Un meilleur outil pourrait aider avec chaque fonction " +"ultérieure qui en avait besoin." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"L'autonomie compte ici. L'étape suivante utile ne devient souvent claire " +"qu'après une expérience ratée. Un agent a besoin de suffisamment de liberté " +"pour suivre ce résultat dans un endroit inattendu. S'il doit attendre que je" +" prescrive chaque étape, une grande partie du travail reste liée à mon " +"attention." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Je m'attends à ce que l'agent fasse de fausses hypothèses. Ce qui compte, " +"c'est de savoir si nous pouvons les tester et apprendre du résultat. Une " +"vérification échouée devrait l'aider à comprendre suffisamment bien l'erreur" +" pour réessayer. Je dois encore décider si les preuves accumulées " +"soutiennent une étape importante du projet." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA donne à l'agent l'accès aux outils d'analyse. Une question sur " +"l'appelant d'une fonction peut conduire directement à l'inspection de cet " +"appelant. Le projet de reconstruction fournit le compilateur et ses propres " +"vérifications de références. L'agent peut les utiliser pour tester la source" +" qu'il propose et voir où son explication tient la route." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"Le bogue TH08 montre pourquoi ces vérifications méritent leur propre " +"attention technique. Lorsque la même comparaison est utilisée sur des " +"centaines de fonctions, une lacune informatique peut se propager beaucoup " +"plus loin qu'une erreur dans une implémentation. Tester le vérificateur " +"améliore les commentaires disponibles pour tous ces travaux ultérieurs." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"L'analogie industrielle a ici un exemple historique utile. Boulton et Watt " +"ont introduit un {ph0}indicateur de machine à vapeur en 1796{ph1} pour aider" +" à régler les soupapes du moteur. Une version d'enregistrement a tracé la " +"pression à travers la course du piston. Il a rendu le comportement interne " +"du moteur disponible pour inspection. Nos outils de comparaison ont un " +"objectif similaire: ils nous permettent d'examiner ce que fait la machinerie" +" pendant que nous l'améliorons." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Nous en sommes aux premiers stades de ce virage industriel.{ph1} Une " +"grande partie de l'infrastructure est encore immature. Les agents peuvent se" +" déplacer plus rapidement que ce que nos contrôles ont été conçus pour " +"prendre en charge, le processus doit donc se développer à leurs côtés. " +"Lorsque nous trouvons un défaut dans un outil partagé, nous devons le " +"réparer et revoir les résultats qu'il a affectés. Le projet suivant peut " +"alors hériter d'un outil plus puissant." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Il y a aussi une limite pratique à toute conversation. Il se terminera avant" +" qu'une grande reconstruction ne soit terminée. Le dépôt de code source doit" +" permettre à une autre session de continuer sans perdre la raison de la " +"dernière décision." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"Les {ph0}Usine de Reconstruction de Touhou{ph1} est né de ce besoin. Cela " +"donne aux projets un moyen partagé de faire avancer leurs vérifications et " +"leurs leçons. Travailler sur un jeu peut améliorer les conditions de départ " +"d'un autre." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"C'est ce qui rend l'analogie industrielle significative pour moi. " +"L'expérience commence à faire partie des outils que d'autres peuvent " +"utiliser. L'amélioration de ces outils change ce que la personne suivante—ou" +" l'agent suivant—peut accomplir." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Les projets que nous pouvons maintenant envisager" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Le rythme est important car il change la décision de commencer. Un jeu " +"pourrait être fascinant à désosser et exiger encore plus de ma propre " +"attention que je ne pourrais raisonnablement lui accorder. De nombreux " +"projets resteraient des idées." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Maintenant, je peux voir un moyen de faire avancer un tel projet à travers " +"des enquêtes répétées. Obtenir une reconstruction fonctionnelle rend un " +"portage logiciel plus pratique. La récupération d'une sémantique lisible " +"permet à quelqu'un d'autre d'explorer plus facilement un mod. Les efforts " +"déployés pour comprendre le jeu peuvent continuer à porter leurs fruits " +"après l'exécution de la première version." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Je regarde maintenant un programme inconnu et demande: {ph0}quels accès, " +"commentaires et connaissances accumulés permettraient à un agent de " +"travailler de manière fiable sur ce sujet?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Cette question me fait envisager des projets que j'aurais auparavant laissés" +" seuls. Chacun peut améliorer la façon dont nous abordons le suivant. Je " +"veux continuer à explorer jusqu'où cela peut nous mener." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Jalons et sources du projet" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Les dates décrivent les points de contrôle du projet enregistrés, vérifiés " +"par rapport à l'historique public de GitHub le 10 octobre 2026. Le temps " +"écoulé est le temps calendaire entre les validations. La présence de la " +"source, les comparaisons exactes, une construction et un résultat " +"d'exécution nomment chacun un jalon différent." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0}TH08:{ph1} {ph2}13 Août continuation{ph3}, {ph4}19 Août grand livre des" +" sources{ph5}, {ph6}24 Août Linux portuaire{ph7}, {ph8}Édition Web du 26 " +"août{ph9}, et {ph10}30 Août 64 bits Linux libération{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0}TH095:{ph1} {ph2}Grand livre initial du 29 août{ph3}, {ph4}7 Septembre " +"grand livre des sources{ph5}, {ph6}Comparaisons du 8 septembre{ph7}, " +"{ph8}Liaison du 9 septembre{ph9}, et {ph10}10 Septembre jouable-record de " +"construction{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0}TH04:{ph1} {ph2}Transfert du 10 octobre{ph3} enregistre la " +"reconstruction DOS de travail, les tests complets de la route normale du " +"mainteneur et la phase 64 bits actuelle." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0}TH08 correction d'oracle:{ph1} {ph2}le bogue de collecte automatique " +"signalé{ph3}, {ph4}le correctif de source et de comparaison{ph5}, et " +"{ph6}l'audit littéral flottant complet{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Reconstruction sémantique:{ph1} {ph2} Manuel de lisibilité du TH08{ph3}" +" et {ph4}l'ordre des phases de l'usine et deux chemins de validation{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Histoire industrielle:{ph1} {ph2}record d'indicateur de machine à " +"vapeur du Groupe du Musée des sciences{ph3} décrit l'introduction de 1796 et" +" le mécanisme d'enregistrement de la pression." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Méthode:{ph1} l'usine {ph2}autonomie des agents{ph3} et " +"{ph4}connaissance du jeu croisé{ph5} les documents conservent les principes " +"de travail et les leçons." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "" +"{ph0}Plus d'articles{ph1} · {ph2}Explorez une enquête sur le TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "La Révolution industrielle de la Rétro-Ingénierie-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 réfléchit à la rétro-ingénierie manuelle, à la reconstruction de " +"Touhou avec des agents d'IA et à la manière dont les connaissances se " +"combinent entre TH08, TH095 et PC-98 TH04 ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Expérience portée entre les projets" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Essai de reconstruction de Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Accueil{ph1}{ph2}/{ph3}Laboratoire de vitesse des dinosaures" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Inspecter → reconstruire → modifier" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Reconstruisez la règle de vitesse du dinosaure." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Pour recréer l'accélération du jeu, trouvez d'abord la règle qui contrôle sa" +" vitesse. {ph0} REA a renvoyé le script en cours d'exécution;{ph1} nous " +"avons utilisé sa règle pour construire ce mini-jeu avec {ph2}vitesse " +"réglable.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Jouez et changez la vitesse{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Lire la règle récupérée{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Vérifiez la reconstruction{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Essayez l'analyse{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Jouez et changez la vitesse" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Appuyez sur Lecture, puis sautez par-dessus le cactus. Déplacez le curseur " +"de vitesse pour essayer un jeu plus lent ou plus rapide; il passe à une " +"vitesse fixe. Sélectionnez la règle récupérée pour démarrer à 6 et accélérer" +" progressivement à nouveau." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Jouer à la reconstruction" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Jouer" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Sauter ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Recommencer" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Vitesse" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Utilisez la règle d'accélération récupérée" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Règle d'origine: commencez à 6, puis augmentez vers 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Déplacez le curseur pour définir votre propre vitesse. L'espace ou le saut " +"efface un cactus." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Activez JavaScript pour lire la reconstruction. Le code et l'explication ci-" +"dessus restent lisibles." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Lire le script REA renvoyé" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Nous avons inspecté {ph0}édition de navigateur dérivée du Chromium de " +"wayou{ph1} avec le modèle REA . Il a renvoyé le chargé {ph2}, incluant cette" +" branche dans la fonction de mise à jour du jeu:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Les paramètres sont {ph0}, {ph1} et {ph2}. Le jeu exécute cette branche sur " +"une mise à jour sans collision." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Utilisez la même règle dans le nouveau jeu" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Copier" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Le mini-jeu utilise cette fonction pour l'accélération automatique. Déplacer" +" le curseur fournit une vitesse fixe à la place. Le dessin, la physique des " +"sauts et les vérifications des collisions rectangulaires sont de nouveaux " +"codes pour ce jeu d'enseignement; sa simulation avance à 60 mises à jour par" +" seconde." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "" +"{ph0}Télécharger la règle de vitesse{ph1} · {ph2}Lire le code du jeu{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Vérifiez la reconstruction" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Nous avons appelé la fonction de mise à jour du jeu original avec les " +"obstacles et la planification automatique désactivés. Comparez ces vitesses " +"enregistrées avec une relecture de la règle récupérée." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Mises à Jour" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Jeu original" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Règle reconstruite" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Exécutez le contrôle de vitesse" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Valeurs arrondies à trois décimales. La branche vérifie avant d'ajouter, de " +"sorte que l'incrément final peut prendre une vitesse juste au-dessus de 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Essayez l'analyse vous-même" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Mettre en place REA{ph1} avec votre agent de codage." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Suivez le {ph0}étapes de connexion du navigateur{ph1}, en utilisant {ph2} " +"comme l'URL de la page." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Donnez à votre agent l'URL de la page et le point de terminaison de débogage" +" local, puis copiez cette invite." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour inspecter ce jeu de dinosaures. Pourquoi " +"ça va plus vite? Affichez la règle de vitesse, puis créez une petite version" +" avec une vitesse réglable.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Demandez un suivi: {ph0}“Où est calculée la hauteur de saut? Ajoutez un " +"contrôle de hauteur de saut à la nouvelle version.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Sources: {ph0}code de vitesse inspecté{ph1}, Les auteurs de Chromium. " +"{ph2}Droits d'auteur et licence BSD{ph3}. REA 4.1.0 a inspecté l'édition " +"HTTP en cours d'exécution dans Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Jeu de Dinosaure Chrome: Reconstruisez Sa Règle de Vitesse-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Lisez la règle de vitesse du jeu de dinosaures avec REA , reconstruisez-la, " +"puis modifiez la vitesse et jouez." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Reconstruction de la vitesse des dinosaures" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Mini-jeu de dinosaure. Utilisez le bouton de saut ou appuyez sur Espace " +"pendant que le jeu est concentré." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Copier la règle de vitesse reconstruite" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Copie de l'invite d'analyse des dinosaures" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Accueil{ph1} / Foire aux QUESTIONS" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "FOIRE aux questions sur REA." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Configuration, mises à jour, analyse et dépannage." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Thèmes" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Configuration et mises à jour{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Analyse{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Dépannage{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Données et partage{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Configuration et mises à jour" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Comment installer REA ?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Terminal * configuration de l'agent" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Copier" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"La configuration enregistre la connexion MCP de REA et installe la skill " +"d’investigation associée. Ensuite, redémarrez votre agent et donnez-lui le " +"chemin du fichier à analyser et une question. Le {ph0}guide de " +"configuration{ph1} présente les prérequis et votre première analyse." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Quels agents de codage peuvent utiliser REA ?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Tout agent qui prend en charge local MCP serveurs. La configuration comprend" +" Claude Code, Claude Bureau, Codex, Cursor, Gemini CLI, Windsurf, Devin, " +"OpenCode, Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, et" +" VS Code. Le connecteur de Grok Bot est ajouté à partir de son chat." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Connectez votre agent de codage{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Comment mettre REA à jour ?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA publie fréquemment, y compris des corrections de bogues. Si vous avez " +"installé le modèle CLI avec le modèle npm :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Terminal * installé sur le CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Suivez la commande d'actualisation de la configuration imprimée par la mise " +"à jour. Si vous configurez votre agent via {ph0}, cours:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Terminal * configuration de l'agent d'actualisation" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Vérifiez les changements et redémarrez votre agent. La connexion à REA " +"utilise une version précise du paquet : relancez la configuration pour " +"passer à la nouvelle version. Pour une commande CLI ponctuelle, ajoutez la " +"commande après {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Installe la compétence à partir de skills.sh assez?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"La compétence donne des instructions d'enquête à votre agent. Courir {ph0} " +"Configuration du modèle REA{ph1} pour connecter le serveur MCP et installer " +"la compétence correspondante, redémarrez votre agent afin qu'il puisse " +"appeler les outils." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Analyse" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "Que puis-je analyser avec REA ?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Commencez avec le type de logiciel que vous avez:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Exécutables et bibliothèques natifs{ph1}: fonctions, assembleur, " +"pseudocode et références." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Applications pour les modèles JavaScript et Electron{ph1}: modules, " +"importations, IPC et emplacements sources." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Pages du navigateur{ph1}: scripts, requêtes et observations " +"d'exécution." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA dispose également de flux de travail pour les assemblys gérés, les APK " +"Android, les micrologiciels et les ressources packagées. {ph0}Voir les " +"études de cas{ph1} pour des enquêtes travaillées." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Ai-je besoin des modèles Hopper , Ghidra ou IDA ?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"L'analyse approfondie des programmes en code machine utilise l'un d'entre " +"eux. L'inspection statique JavaScript et. NET fonctionne avec les fichiers " +"fournis et ne nécessite pas d'analyse du moteur des programmes de code " +"machine." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Connectez votre installation Ghidra ou IDA existante, ou laissez le " +"programme d'installation détecter Hopper et proposer une installation. Votre" +" hôte et votre cible déterminent quel fournisseur peut être utilisé. " +"{ph0}Mettre en place une analyse des programmes en code machine{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Puis-je utiliser REA sans agent de codage?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Oui. Le CLI utilise les mêmes workflows d'analyse. Pour une application " +"locale JavaScript ou Electron :" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Terminal * analyse statique des applications" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Remplacez le chemin d'accès par un dossier d'application extrait ou un " +"fichier ASAR. {ph0}Utilisez le modèle CLI {ph1} pour les options " +"d'installation." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "Quel code REA renvoie-t-il ?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"L’analyse native renvoie de l’assembleur et du pseudocode, avec les appels " +"de fonctions, les références et les constantes utiles. L’analyse JavaScript " +"renvoie les modules, leurs relations et les emplacements dans le code " +"source." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Votre agent utilise ces résultats pour expliquer le comportement ou écrire " +"et tester une implémentation. Les {ph0} Calcul du DX-Ball{ph1} et " +"{ph2}Vérificateur de drapeau CTF{ph3} montrez comment ce processus " +"fonctionne." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "Que demander à mon agent ?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Donnez-lui une cible locale et un comportement à étudier. Pour une " +"application JavaScript ou Electron :" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Remplacez le chemin par votre cible. Les {ph0}guides touristiques{ph1} " +"fournissez des invites pour des exemples natifs, Electron et de navigateur." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Dépannage" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Pourquoi mon agent ne peut-il pas voir les outils REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Redémarrez ou reconnectez votre agent après la configuration. Vérifiez son " +"enregistrement REA avec {ph0}; pour le modèle Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Terminal * vérifiez un client" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Remplacer {ph0} avec votre identifiant client, tel que {ph1} ou {ph2}. Si le" +" rapport indique un enregistrement manquant ou périmé, exécutez la " +"configuration pour ce client:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Terminal * réparer la configuration d'un client" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Passez en revue son plan et redémarrez le client. Si l'enregistrement est " +"correct mais que les outils restent absents, vérifiez l'erreur de connexion " +"MCP du client. {ph0}Plus de diagnostics de configuration{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Dois-je d'abord démarrer Hopper?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA démarre Hopper lorsqu'une opération en a besoin. Sur macOS, effectuez le" +" choix de la première exécution du mode de démonstration ou de l'activation " +"de la licence avant l'analyse sans surveillance. {ph0}Voir configuration du " +"fournisseur natif{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Que faire si je rencontre un bug ?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Mise à Jour REA{ph1}, redémarrez votre agent et réessayez la même " +"tâche. Une version récente peut déjà résoudre le problème." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"S'il persiste, {ph0}ouvrir un problème{ph1} avec votre version REA, système " +"d'exploitation, type de cible, étapes à reproduire et sortie d'erreur. " +"Incluez le nom du fournisseur lorsque le problème implique l'analyse de " +"programmes en code machine." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Données et partage" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "Est-ce que REA télécharge mon application?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA analyse les cibles sur votre machine. Votre agent reçoit les résultats " +"et la politique de données de son fournisseur modèle s'applique à ces " +"résultats." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Comment puis-je partager un exemple ou contribuer?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Vous avez un exemple REA utile? On adorerait le voir. Partagez la cible, " +"votre question, les résultats et comment vous les avez vérifiés dans un " +"{ph0}problème{ph1} ou {ph2}demande d'extraction{ph3}. De courts extraits de " +"code et des chiffres aident les autres à suivre l'enquête." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Les rapports de bogues, les demandes de fonctionnalités, la documentation et" +" les améliorations de code sont également les bienvenus. Vous pouvez " +"également discuter d'un exemple dans le {ph0}communauté{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "FAQ REA: Configuration, mises à jour et dépannage" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Réponses aux questions courantes sur REA: installation, mises à jour, outils" +" d'analyse, agents de codage, dépannage et exemples de partage." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Questions fréquemment posées sur REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Copier la commande d'installation REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Copier la commande de mise à jour REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Commande d'actualisation de la configuration de l'agent de copie" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Copier la commande d'analyse REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Copier l'exemple d'invite d'analyse" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Commande de diagnostic de client de copie" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Copier la commande d'installation étendue" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Accueil{ph1} / Votre première enquête" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Découvrez où{ph0}les notes exportées disparaissent." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Utilisez REA pour inspecter une petite application, suivez son bouton " +"Exporter les notes et vérifiez vous-même un détail." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "Dans cet exercice" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Mettre en place{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Renseignez - vous sur l'exportation{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Suivez la réponse{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Vérifier une prédiction{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Poser une autre question{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Connectez votre agent à REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Copier" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Ou exécutez cette commande dans votre terminal:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Passez en revue le plan, approuvez la configuration, puis redémarrez votre " +"agent. Déjà connecté? Continuez ci-dessous." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Demandez où le CSV est écrit" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"L'exemple est une application Electron à six fichiers avec un {ph0}Exporter " +"des notes{ph1} bouton. Votre agent peut inspecter son code sans installer ni" +" lancer Electron ." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Votre agent télécharge les fichiers et remet le dossier décompressé à REA " +"pour inspection." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Télécharger un exemple de ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Si votre agent ne peut pas télécharger de fichiers, décompressez cette " +"archive vous-même. Donnez-lui le chemin vers le {ph0} dossier et la même " +"question d'exportation." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Suivez la réponse jusqu'au code" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "" +"Recherchez une brève explication avec des références de fichier et de ligne:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Le bouton envoie un {ph0} message. Le processus principal formate les notes " +"en CSV et écrit {ph1} dans le dossier Téléchargements de l'utilisateur. Les " +"colonnes sont {ph2} et {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Du bouton au rédacteur de fichiers" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"L'analyse statique de REA associe le message à son gestionnaire. La " +"destination est lue à partir du code." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Le chemin du fichier, le formateur et l'appel d'écriture sont ensemble dans " +"ce gestionnaire. Demandez à votre agent de montrer ces lignes si sa réponse " +"les laisse de côté." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" +"{ph0}Voir la trace complète du code et le résultat REA enregistré{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Vérifier une prédiction" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Une virgule sépare les colonnes CSV. Que se passe-t-il lorsqu'un titre de " +"note contient lui-même une virgule ou des guillemets?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Exécutez le chèque vous-même" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Ouvrez un terminal dans le déballé {ph0} dossier:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Cette commande utilise un shell avec un support here-document, tel que Bash " +"ou Zsh. Votre agent peut exécuter le même JavaScript dans le shell de votre " +"plate-forme." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Poser une autre question" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Essayez un suivi dans la même conversation:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"Que se passe-t-il si le fichier ne peut pas être écrit? Suivez l'erreur pour" +" revenir à la page." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Ou donnez à votre agent votre propre application et posez des questions sur " +"un bouton, un fichier ou un comportement." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Comment Notion copie du texte et du code HTML{ph1}{ph2}Suivez une " +"fonctionnalité de presse-papiers dans une application Electron " +"packagée.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Comment DX-Ball calcule le positionnement du son stéréo{ph1}{ph2}Lisez " +"les instructions originales et les chèques de reconstruction.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Dépannage de la configuration ou de l'analyse{ph1}{ph2}Mettez à jour " +"REA et vérifiez la connexion si vous êtes bloqué.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Votre Première Enquête d'Ingénierie Inverse-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Essayez REA sur une application de petites notes. Configurez votre agent, " +"demandez où vont les notes exportées et vérifiez le formateur CSV avec un " +"exemple de titre." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "Votre première enquête sur le REA" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Copier l'invite d'installation de REA" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Commande Copier le programme d'installation" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Invite d'enquête sur les notes de copie" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Copier l'invite de vérification CSV" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Commande de vérification du formateur de copie" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Accueil{ph1} / Commencer" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Configurez le modèle REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Connectez REA à votre agent de codage ou inspectez une application locale à " +"partir de votre terminal." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Ouvrez un terminal et vérifiez:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Borne" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Copier" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell)est également compatible avec:{ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows PowerShell pour ordinateur portable" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Tapez Y si on vous demande d'accepter les conditions. Fermez PowerShell, " +"ouvrez-le à nouveau, puis exécutez {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Si PowerShell dit plus tard {ph0}\"L'exécution de scripts est désactivée sur" +" ce système\"{ph1} quand tu cours {ph2}, exécutez ceci une fois et " +"réessayez:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Si vous utilisez le modèle Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Autrement:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Fermez le Terminal, ouvrez-le à nouveau, puis:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"L'installateur a besoin {ph0} et {ph1} (sur Debian / Ubuntu: {ph2}). Fermez " +"le terminal, ouvrez-le à nouveau, puis:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Votre propre distribution {ph0} le paquet est souvent plus ancien que 22.19," +" alors vérifiez {ph1} si vous l'utilisez à la place." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Vous préférez un installateur régulier? Téléchargez la version LTS à partir " +"de {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Options de configuration" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Connectez votre agent de codage{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Utilisez le modèle CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Mettre en place une analyse des programmes en code machine{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Obtenir de l'aide{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Connectez votre agent de codage" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Exécutez la configuration pour vous connecter REA à votre agent de codage. " +"Les choix des clients comprennent Claude Code, Codex, Cursor, Gemini CLI, " +"Windsurf, Grok Build, et d'autres pris en charge MCP clients. Le connecteur " +"de Grok Bot est ajouté à partir de son chat." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Nouveau sur les agents de codage?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Un agent de codage est un assistant IA qui fonctionne sur votre ordinateur " +"plutôt que dans un onglet de navigateur. Il peut lire des fichiers et " +"exécuter des commandes, et il demande avant d'apporter des modifications. " +"REA lui donne des outils de rétro-ingénierie." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Si vous n'en avez pas encore, choisissez-en un, suivez sa page " +"d'installation et connectez-vous:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1}Claude Code{ph2}{ph3} par Anthropic. A besoin d'un payé Claude " +"plan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1}Codex{ph2}{ph3} par OpenAI. Connectez-vous avec votre compte " +"ChatGPT." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, code source ouvert. Connectez le fournisseur " +"de modèle de votre choix." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Ensuite, ouvrez-le et copiez l'invite ci-dessous dedans. L'agent exécute la " +"configuration de REA et vous montre le plan avant de modifier quoi que ce " +"soit." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Ou exécutez la configuration vous-même" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Comment ouvrir un terminal?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0}Windows:{ph1} ouvrez le menu Démarrer, tapez {ph2}PowerShell{ph3} et " +"appuyez sur Entrée." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0}macOS:{ph1} presse {ph2} {ph3}, type {ph4}Borne{ph5} et appuyez sur " +"Entrée." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0}Linux:{ph1} presse {ph2} {ph3} {ph4} sur la plupart des ordinateurs de " +"bureau." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Collez une commande avec {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminaux: " +"{ph4} {ph5} {ph6}), puis appuyez sur Entrée." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Choisissez votre client et consultez le plan d'installation. REA ajoute sa " +"connexion MCP et la compétence d'investigation correspondante, en conservant" +" une sauvegarde de la configuration existante. Il demande avant d'appliquer " +"les modifications." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Redémarrez votre client une fois la configuration terminée." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Comment puis-je redémarrer mon client?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Applications de bureau{ph1} (Claude Bureau, Cursor, Windsurf, VS Code):" +" quittez complètement l'application, puis ouvrez-la à nouveau. Fermer la " +"fenêtre ne suffit pas. Sur macOS presse {ph2} {ph3}; sur Windows, quittez " +"également l'icône de la barre d'état s'il y en a une." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Agents terminaux{ph1} (Claude Code, Codex, Gemini CLI): quittez la " +"session et recommencez-la." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Donnez à votre agent un chemin cible et une question spécifique. Pour une " +"application JavaScript ou Electron, vous pouvez commencer par:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Regarde {ph0} et découvrez comment il exporte les données. Affichez les " +"points d'entrée, les appels et les dépendances impliqués, avec les " +"emplacements sources de vos résultats." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Remplacez le chemin par votre cible locale." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Comment puis-je obtenir le chemin d'accès complet d'un dossier?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1} dans l'Explorateur de fichiers, cliquez avec le bouton " +"droit sur le dossier et choisissez {ph2}Copier comme chemin{ph3}. Sur " +"Windows 10, maintenez la touche Maj enfoncée tout en cliquant avec le bouton" +" droit." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0}macOS:{ph1} dans le Finder, cliquez avec le bouton droit sur le " +"dossier, maintenez l'option enfoncée et choisissez {ph2}Copiez \" ... \" " +"comme chemin d'accès{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Tout système:{ph1} faites glisser le dossier dans une fenêtre de " +"terminal et son chemin apparaît." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" +"Dans un terminal, mettez des guillemets autour d'un chemin qui contient des " +"espaces." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Utilisez le modèle CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Analysez un dossier d'application JavaScript ou Electron ou une archive ASAR" +" sans exécuter l'application:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Analyse statique des applications" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Remplacez le chemin par le répertoire de votre application extraite ou {ph0}" +" dossier. Sur Windows, un chemin tel que {ph1} travaille ici." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Où puis-je trouver une application .fichier asar?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "" +"Les applications Electron le conservent généralement dans un {ph0} dossier:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0}Windows:{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0}macOS:{ph1} {ph2} (faites un clic droit sur l'application et choisissez" +" {ph3}Afficher Le Contenu de l'Emballage{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0}Linux:{ph1} souvent {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Certaines applications s'installent ailleurs. Recherchez le dossier de " +"l'application pour {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Le résultat identifie l'application, montre les connexions entre les modules" +" et donne leurs emplacements sources. Les connexions que REA ne peut pas " +"résoudre sont marquées dans le résultat." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Si vous souhaitez un permanent {ph0} commande dans votre shell:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Installez le CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Continuez avec le guide d'application JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Mettre en place une analyse des programmes en code machine" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Les programmes en code machine ont besoin d'un outil d'analyse local. " +"Choisissez et configurez-en un ci-dessous, puis donnez à REA votre " +"exécutable ou bibliothèque." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Choisissez un outil: Ghidra, Hopper ou IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Utilisez un Ghidra 12.1 existant.installation x et un JDK 64 bits 21 ou plus" +" récent sur Linux ou macOS, sur x64 ou arm64. Votre installation Ghidra " +"nécessite un décompilateur natif pour votre architecture hôte. Définissez " +"les chemins avant d'exécuter le programme d'installation:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Connectez votre installation de Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra de la connexion · macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Remplacez les deux chemins par vos installations existantes. Le programme " +"d'installation les vérifie et enregistre les paramètres valides pour le " +"client sélectionné. Sur Linux arm64, vous devrez peut-être créer séparément " +"le décompilateur natif de Ghidra." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Connectez le modèle Ghidra sur le modèle Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 a un support expérimental en lecture seule pour les applications" +" et DLL natives x86 et x64 PE sur des lecteurs NTFS locaux fixes. Utilisez " +"un Ghidra 12.1 existant.installation x et un JDK 64 bits 21 ou plus récent:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra connexion · Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Remplacez les deux chemins par vos installations, puis passez en revue le " +"plan de configuration." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Connectez Hopper sur macOS ou Linux. Exécutez la commande d'installation ci-" +"dessus; il détecte une installation existante ou propose un plan " +"d'installation pour votre approbation." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"Sur macOS, effectuez le choix de première exécution de Hopper entre le mode " +"de démonstration ou l'activation de la licence avant une analyse sans " +"surveillance." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"Les configurations IDA vérifiées utilisent Windows, avec un enregistrement " +"MCP existant pour une interface graphique attachée ou une base de données " +"sans en-tête. Les analyses sans tête Linux et macOS restent non vérifiées." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Connecter un enregistrement IDA existant à un MCP" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Maintenir le fonctionnement du serveur en amont {ph0}, {ph1} et facultatif " +"{ph2} dans un fichier JSON. Un existant {ph3} objet avec un {ph4} l'entrée " +"est également acceptée. Pointez REA sur ce fichier avant l'installation:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA connexion · Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"Le profil joint utilise des outils hérités 1.4.0 en amont avec le binaire " +"d'origine déjà ouvert dans IDA . Le profil sans tête utilise l'API de " +"superviseur de base de données en amont et un enregistrement auprès de " +"{ph0}; la vérification réelle couvre un superviseur IDA 9.3 Windows x64. Le " +"médecin vérifie l'enregistrement sans démarrer IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Donnez à REA le chemin de l'exécutable d'origine, avec {ph0} dans une " +"requête CLI. Pour un agent, inclure {ph1} dans l'environnement " +"d'enregistrement de REA et sélectionnez IDA lors de l'ouverture du binaire." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "Pour une configuration Ghidra existante, inspectez une fonction avec:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Analyse de fonction" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "" +"Remplacer {ph0} avec le nom ou l'adresse de la fonction que vous souhaitez " +"inspecter." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "" +"Fonctionnement de l'analyse des sessions de programmes en code machine" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Chaque commande CLI importe et analyse le binaire, puis ferme sa session. " +"Les requêtes MCP de votre agent réutilisent le binaire importé pendant que " +"cette session est ouverte." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Suivez un exemple d'analyse de programmes en code machine{ph1} pour " +"voir comment le résultat de la fonction conduit à un calcul récupéré." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Obtenir de l'aide" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Si votre agent ne voit pas REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Redémarrez ou reconnectez le client après l'installation. Vérifiez sa " +"connexion REA avec {ph0}; pour le modèle Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Vérifiez un client" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Si un fournisseur a besoin d'attention" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Vérifiez le fournisseur que vous utilisez. Pour Ghidra:" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Vérifiez un fournisseur" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" +"Le rapport indique l'échec de la vérification et une suggestion d'étape " +"suivante." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} FAQ SUR le modèle REA{ph1}{ph2}Réponses rapides sur les mises à jour, " +"les agents et les analyses.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Choisissez un guide d'enquête{ph1}{ph2}Exemples travaillés pour un " +"binaire, une application Electron et un navigateur.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Problèmes liés à GitHub{ph1}{ph2}Signalez un problème avec la commande" +" et les diagnostics.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} Communauté de REA{ph1}{ph2}Questions, enquêtes et travaux en " +"cours.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Installez REA et Configurez Votre Agent de codage" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Connectez REA à votre agent de codage ou inspectez une application locale " +"JavaScript ou Electron à partir du terminal. Configuration, premières " +"questions et guides du fournisseur natif." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Copier la vérification de la version Node.js" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Copier Node.js commande d'installation pour Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Copier la commande de stratégie d'exécution PowerShell" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Copier Homebrew Node.js commande d'installation" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Copier la commande d'installation fnm pour macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Copier Node.js 24 commandes pour macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Copier la commande d'installation fnm pour Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Copier Node.js 24 commandes pour Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "Guide de démarrage du REA" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Copier l'invite d'installation de REA" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Commande de configuration de l'agent de copie" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Copier la commande d'analyse JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Copier la commande d'installation de CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Copier la connexion ghidra · macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Copiez la connexion Ghidra pour le PowerShell Windows" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Copiez la connexion IDA pour le PowerShell Windows" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Copier la commande d'analyse de fonction native" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Commande de diagnostic de client de copie" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Commande de diagnostic du fournisseur de copie" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "" +"{ph0}Accueil{ph1} / {ph2}Guides Touristiques{ph3} / Observation du " +"navigateur" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Voyez ce qui se passe{ph0}lorsque vous cliquez." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Utilisez une petite application de navigateur pour connecter une action, sa " +"demande réseau et le JavaScript qui génère un téléchargement." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "Dans ce guide" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}L'exemple{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Ouvrez le navigateur{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Demandez à votre agent{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Capture à partir de CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Lire la requête et le script{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Que se passe-t-il lorsque vous cliquez sur Exporter?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"Les {ph0}Exemple de navigateur de notes{ph1} a une {ph2}Exporter des " +"notes{ph3} bouton. Cliquer dessus se charge {ph4}, formate les deux notes en" +" CSV et lance un téléchargement." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Du clic au téléchargement CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * Vous{ph1}{ph2}Cliquez sur Exporter les notes{ph3}{ph4}Effectuez " +"l'action dans votre navigateur pendant que la capture est en cours " +"d'exécution.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 · REA{ph1}{ph2}Enregistrer la demande{ph3}{ph4}Capturez l'URL de la " +"demande, l'état de la réponse et la structure JSON de la page " +"sélectionnée.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 · Votre agent{ph1}{ph2}Lire le code d'exportation{ph3}{ph4}Connectez" +" la requête observée à {ph5} dans {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Démarrez la capture avant de cliquer sur Exporter les notes." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Ouvrez Chrome avec le débogage à distance" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Ouvrez l'exemple hosted Notes avec un profil de navigateur distinct et un " +"port de débogage local. Sur le modèle Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Démarrez l'exemple de navigateur" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Copier" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Utilisez le chemin d'accès exécutable de votre navigateur installé sur macOS" +" ou Windows . Vous pouvez remplacer l'URL de la page par une autre page que " +"vous souhaitez inspecter." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA se connecte à ce navigateur existant. Vous gardez le contrôle de la " +"page, effectuez l'action et fermez le navigateur lorsque vous avez terminé." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Demandez à votre agent de regarder une action" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour inspecter cette page pendant que je clique" +" sur Exporter les notes. Quelle demande fait-il et comment le CSV est-il " +"construit?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Exemple d'invite. Donnez à votre agent le point de terminaison de débogage, " +"{ph0}, et l'URL de la page. Laissez-le démarrer la capture avant de cliquer." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Votre agent découvre la cible de la page, démarre une fenêtre d'observation " +"et lit les preuves résultantes. Il peut ensuite inspecter le script derrière" +" l'exportation." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Ou capture depuis le terminal" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Trouver l'ID cible de la page:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Trouver la page" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Choisissez la cible avec l'URL de l'exemple de Notes. Remplacer {ph0} ci-" +"dessous avec son identifiant, puis exécutez:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Capturez les dix prochaines secondes" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Laissez la commande se connecter pendant quelques secondes, puis cliquez sur" +" {ph0}Exporter des notes{ph1} dans ce navigateur. Le résultat arrive après " +"la fin de la fenêtre d'observation." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Le résultat capturé inclut la page sélectionnée, l'activité réseau au cours " +"de cette fenêtre et la forme de la réponse JSON. Les demandes antérieures " +"sont en dehors de cette capture." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Lire la requête et exporter le script" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Enregistré avec REA 4.1.0 sur l'exemple des notes locales" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Fait capturé" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Valeur" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Demande" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Réponse" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Initiateur de la demande" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * scénario" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Structure de la réponse" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} avec {ph1} et {ph2} champs" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Lire les scripts chargés" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"La demande identifie la source de données et les enregistrements REA {ph0} " +"comme son initiateur. Lisez la source du script capturé pour voir comment " +"les données sont utilisées:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"Le téléchargement est construit dans la page à l'aide de la réponse JSON. " +"L'étape de formatage CSV provient du script; la capture réseau établit que " +"ce clic demandé {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Trouvez le script qui demande {ph0}. Comment échappe-t-il les titres " +"contenant des virgules ou des guillemets?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Pour une application JavaScript ou Electron installée, continuez avec le " +"{ph0}flux de travail de l'application{ph1} pour suivre les limites des " +"fichiers et des processus." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Analyse du navigateur et du réseau-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Observez une exportation de notes avec REA : sélectionnez une page de " +"navigateur, capturez un clic, inspectez la demande et suivez le script " +"d'exportation." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Observation du navigateur" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Copier démarrez l'exemple de navigateur" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Copier l'exemple d'invite" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Copier trouver la page" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Copie capture les dix prochaines secondes" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Copier lire les scripts chargés" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Accueil{ph1} / Guides" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "Guides d'utilisation REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Analysez une fonction native, un export Electron ou une requête de " +"navigateur. Chaque guide comprend une invite, un code et des résultats." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Première enquête" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Mettre en place REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Connectez votre agent de codage ou utilisez REA à partir du terminal." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Premiers pas avec REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Programmes en code machine" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Récupérer un calcul de la position du son gauche/droite" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Commencez avec un exécutable de jeu Windows. Inspectez les instructions, " +"suivez un appelant, lisez les constantes numériques et vérifiez le C " +"récupéré." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Guide d'analyse des programmes en code machine" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Suivre une exportation CSV" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Une application de petites notes répartit une fonctionnalité sur le moteur " +"de rendu, le préchargement et le processus principal. Utilisez REA pour " +"connecter l'API, le canal IPC et le graveur de fichiers." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "Guide des modèles JavaScript et Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Pour une application packagée plus grande, suivez {ph0} Pont de presse-" +"papiers de Notion{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Comportement du navigateur" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Observez un clic" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Ouvrez un exemple de notes de travail, capturez une demande d'exportation et" +" recherchez le code qui transforme sa réponse en téléchargement." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Guide d'observation du navigateur" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Guides d'ingénierie inverse-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Apprenez REA à travers de courts exemples travaillés: un calcul natif, un " +"export Electron CSV et une requête de navigateur." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "" +"{ph0}Accueil{ph1} / {ph2}Guides Touristiques{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Tracer un Electron{ph0}CSV exporter." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Suivez un clic de bouton depuis l'API de la page, via Electron IPC, vers le " +"graveur de fichiers CSV." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "Dans ce guide" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}L'exemple{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Demandez à votre agent{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Tracer le code d'exportation{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Essayez l'exemple{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Inspectez le graveur CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "Où va “Exporter les notes\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Ce guide utilise une petite application Electron. En cliquant {ph0}Exporter " +"des notes{ph1} appelle une API dans la page, traverse le processus principal" +" et écrit un CSV . Le comportement est réparti sur plusieurs fichiers." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "L'exportation de CSV à travers les processus Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Moteur de rendu → préchargement{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} appelle " +"l'API exposée par {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Entre les processus{ph1}{ph2}{ph3}{ph4}{ph5}La précharge appelle un " +"canal IPC: un message nommé au processus principal.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Processus principal{ph1}{ph2}Un gestionnaire " +"d'exportation{ph3}{ph4}{ph5} gère ce canal et appelle l'écrivain CSV.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} formate les notes → {ph1} écrit {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA fait correspondre l'appel IPC littéral à son gestionnaire et identifie " +"l'API exposée. Le chemin est déduit du code; une capture d'exécution peut " +"vérifier ce qui s'exécute." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Renseignez - vous sur l'exportation CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Connectez votre agent à REA {ph1} et donnez-lui le répertoire de " +"l'application ou le fichier ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Copier" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour savoir ce qui se passe lorsque j'exporte " +"des notes dans cette application. Où est créé le CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "" +"Exemple d'invite. Inclure le chemin absolu vers le dossier de l'application " +"ou {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA lit les fichiers d'application et construit une carte des points " +"d'entrée, des modules et des limites de processus. Votre agent utilise cette" +" carte pour restreindre l'enquête à la fonction d'exportation." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Tracer le code d'exportation" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "La page appelle une petite API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"La page connaît le nom de la méthode. L'implémentation vit dans la " +"précharge, ce qui l'expose au moteur de rendu." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"Enregistrements REA {ph0} et le canal littéral {ph1}. Il associe cette " +"invocation au seul gestionnaire correspondant dans le processus principal." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"La lecture du gestionnaire répond à la question initiale: {ph0} formate les " +"notes et le processus principal écrit {ph1} dans le dossier Téléchargements " +"de l'utilisateur." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Enregistré par REA 4.1.0 sur l'exemple téléchargeable ci-dessous. Les " +"emplacements sources accompagnent les résultats de l'API, du canal et du " +"gestionnaire." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Analysez l'exemple vous-même" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Télécharger un exemple de ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Parcourez les six fichiers sources" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Analyse statique des applications" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Remplacez le chemin par le dossier que vous avez décompressé. Vous devriez " +"trouver un canal IPC et un gestionnaire correspondant dans {ph0}. Les " +"emplacements sources sont en {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Pour votre propre application, utilisez la même commande avec son répertoire" +" ou son chemin ASAR. Un agent peut suivre une chaîne littérale, un nom d'API" +" ou un canal IPC avec les outils de traçage des fonctionnalités de REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Inspectez le graveur CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Suivre {ph0} à son gestionnaire. Quelles entrées atteignent le graveur CSV " +"et que se passe-t-il si l'écriture du fichier échoue?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Utilisez les emplacements sources pour inspecter ces détails. Les noms de " +"canaux calculés et les gestionnaires ambigus peuvent rester non résolus; les" +" observations d'exécution vous donnent un autre moyen de les étudier." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Suivez le pont du presse-papiers de Notion{ph1} {ph2}Appliquez la même " +"approche à une application Electron packagée.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Observer une exportation de navigateur{ph1}{ph2}Capturez un vrai clic " +"et voyez quelle demande il fait.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Suivre une fonction native{ph1}{ph2}Continuez dans un binaire " +"lorsqu'une fonctionnalité dépend du code natif.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "JavaScript et Electron Analyse — REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Tracez une exportation de Notes CSV via une API de rendu, un préchargement " +"et un gestionnaire IPC avec REA . Inclut des fichiers d'exemple " +"téléchargeables et un résultat d'analyse vérifié." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Copier l'exemple d'invite" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Copie de l'analyse statique des applications" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Accueil{ph1} / {ph2}Guides Touristiques{ph3} / Analyse de programmes en" +" code machine" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "" +"Récupérez les DX-Ball{ph0}calcul de la position sonore gauche / droite." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Inspectez les instructions d'origine, identifiez l'entrée et les constantes," +" puis vérifiez le C récupéré." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "Dans ce guide" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}L'exemple{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Demandez à votre agent{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Lire les résultats du REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Récupérer et vérifier{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Utilisez votre propre binaire{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Calculer le positionnement du son stéréo gauche/droite" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"Dans DX-Ball, un coup de brique fournit une position horizontale de l'écran." +" Le code sonore le transforme en une valeur panoramique gauche/droite." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"La fonction de démarrage, {ph0}, a un court résultat de décompilateur: un " +"appel à {ph1}. REA renvoie également ses instructions et ses appelants, ce " +"qui donne à l'agent un moyen d'enquêter sur l'arithmétique manquante." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Nouveau dans ces conditions?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Instructions:{ph1} les étapes exécutées par le processeur, affichées " +"sous une forme lisible telle que {ph2} ou {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Résultat du décompilateur / pseudocode:{ph1} la tentative d'un outil " +"d'analyse de transformer les instructions en code de type C. Il peut manquer" +" des parties, comme dans cet exemple." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Appelant:{ph1} une fonction qui appelle celui-ci. Il montre quelles " +"valeurs sont transmises." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Adresse:{ph1} un emplacement dans le programme, écrit en hexadécimal, " +"tel que {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Constantes:{ph1} nombres fixes stockés dans le programme, lus sous " +"forme d'octets bruts et décodés." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Trois éléments de preuve, un calcul" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * Instructions d'utilisation{ph1}{ph2}Une entrée " +"entière{ph3}{ph4}Une lecture de pile fournit la valeur utilisée par les " +"instructions à virgule flottante.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 · Appelant{ph1}{ph2}Une coordonnée d'écran{ph3}{ph4}L'appelant " +"frappé par la brique passe {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * Octets de données{ph1}{ph2}Les constantes numériques{ph3}{ph4}Les " +"octets référencés décodent en {ph5}, {ph6} et une valeur d'échelle.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA fournit les instructions, la relation fonction-appel et les octets. " +"L'agent les interprète ensemble." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Renseignez-vous sur le comportement" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Après {ph0}connexion de REA à votre agent{ph1} et {ph2}mise en place d'un " +"outil d'analyse des programmes en code machine{ph3}, fournir l'exécutable " +"local et une question:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Quel outil d'analyse dois-je utiliser?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA a besoin de l'un d'entre eux pour lire des programmes natifs:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0}Hopper{ph1} (macOS ou Linux): REAle programme d'installation le détecte" +" ou propose de l'installer. Sur macOS, ouvert Hopper une fois et choisissez " +"le mode démo ou activez une licence avant votre première analyse." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0}Ghidra{ph1} (macOS ou Linux; expérimental sur Windows): gratuit, mais " +"nécessite un existant Ghidra 12.1.installation x et un JDK 64 bits 21 ou " +"plus récent." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0}IDA{ph1} (Windows): pour un existant IDA configuration avec un MCP " +"inscription." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Voir {ph0}Mettre en place une analyse des programmes en code machine{ph1} " +"pour les étapes." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Copier" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour savoir comment DX-Ball calcule le " +"positionnement du son stéréo. Expliquez le calcul et montrez le " +"code.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Exemple d'invite. Donnez à votre agent le chemin d'accès à votre exécutable " +"DX-Ball 1.07 local. REA n'inclut pas DX-Ball , alors utilisez votre propre " +"copie ou posez le même genre de question à propos d'un autre petit programme" +" Windows que vous avez." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Comment puis-je obtenir le chemin complet d'un fichier?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1} dans l'Explorateur de fichiers, cliquez avec le bouton " +"droit sur le fichier et choisissez {ph2}Copier comme chemin{ph3}. Sur " +"Windows 10, maintenez la touche Maj enfoncée tout en cliquant avec le bouton" +" droit." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0}macOS:{ph1} dans le Finder, cliquez avec le bouton droit sur le " +"fichier, maintenez l'option enfoncée et choisissez {ph2}Copiez \" ... \" " +"comme chemin d'accès{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Tout système:{ph1} faites glisser le fichier dans une fenêtre de " +"terminal et son chemin apparaît." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Lire les résultats du REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Lire l'entrée" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Les instructions chargent un argument entier et le convertissent en " +"arithmétique à virgule flottante. C'est l'entrée absente de la première vue " +"pseudocode." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Suivez l'appelant" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA identifie l'appelant touché par la brique. Ses instructions précédentes " +"multiplient la coordonnée de la tuile par 30; en ajoutant {ph0} (20) donne " +"la position de l'écran de la brique." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Lire les constantes référencées" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"L'arithmétique fait référence à ces adresses. La lecture des octets fournit " +"les valeurs réelles; l'ordre des instructions indique à l'agent comment " +"elles sont utilisées." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Écrivez et vérifiez la fonction récupérée" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"Avec une échelle de 1,0, les positions d'écran 0, 320 et 640 correspondent à" +" -500, 0 et 500 avant la conversion d'entiers. Le calcul place le centre de " +"l'écran au centre du champ stéréo." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"L'agent a utilisé les résultats de REA pour écrire le C. Des vérifications " +"séparées ont comparé 3 205 entrées à la fonction x86 d'origine et reproduit " +"les 63 octets compilés de la fonction complète." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}Voir l'enquête complète et la comparaison assemblage-C{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Essayez-le avec votre propre binaire" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Connecter un fournisseur d'analyse de programmes en code machine{ph1}, " +"puis donnez à votre agent un exécutable ou une bibliothèque locale et une " +"fonctionnalité à étudier. Les questions de départ utiles incluent “Comment " +"ce fichier est-il analysé?“ou \" Quelle fonction gère cette action de menu?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Si vous connaissez déjà un nom ou une adresse de fonction, vous pouvez " +"l'interroger à partir du terminal. Pour une installation Ghidra configurée:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Analyse de fonction" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Remplacer le chemin cible et {ph0} avec votre propre nom de fonction ou " +"adresse. Chaque appel CLI importe et analyse le binaire, puis ferme sa " +"session. Les requêtes MCP de votre agent réutilisent le binaire importé " +"pendant que cette session est ouverte." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Lisez le pseudocode à côté des instructions et des références. Lorsqu'un " +"résultat laisse un appel ou une valeur non résolu, utilisez cet emplacement " +"comme question suivante." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Analyse Binaire Native — REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Récupérez un calcul natif avec REA: inspectez les instructions, suivez un " +"appelant, lisez les constantes et vérifiez le C reconstruit." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Analyse de programmes en code machine" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Copier l'exemple d'invite" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Analyse de la fonction de copie" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Mettre en place REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Mettre en place REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}Qu'est-ce que RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Comment REA vous aide{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Jeu de dinosaure{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Calculatrice{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Essayez le modèle REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Aller plus loin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Aide et commentaires{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Communauté{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Ingénierie inverse, avec votre agent de codage" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Découvrez comment{ph0}fonctionne un logiciel." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA donne à votre agent de programmation les outils pour examiner un " +"programme et expliquer son fonctionnement." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "Vous connaissez déjà RE? {ph0}Passer aux guides d'analyse →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Vous voulez aller plus loin? {ph0}Lire le Blog →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Copiez ce prompt dans votre agent de programmation :" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Copier" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Ou exécutez cette commande dans le terminal :" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "" +"Vérifiez et approuvez les changements prévus, puis redémarrez votre agent." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Qu’est-ce que la rétro-ingénierie ?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Comprendre le fonctionnement d’un logiciel en {ph0}examinant le programme " +"lui-même.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"L'objectif: comprendre suffisamment bien une fonctionnalité pour " +"{ph0}explique-le{ph1}, {ph2}changez-le{ph3} ou {ph4}reconstruisez-le.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "Avant REA · Vous enquêtez {ph0}vous-même{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Décoder les branches" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Tracer les appels" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Récupérer la règle" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Instructions d'origine x64 · sélectionnées{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * Quelle branche?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Deux sauts au même endroit. De quels opérateurs " +"s'agit-il?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Recherchez les identifiants de commande, puis étiquetez la branche." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Diviser ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Multiplier ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Que font les fonctions appelées ?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 est clair. Les appels ne sont que des adresses. {ph0}Lequel divise? " +"Quelle valeur entre?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Inspectez les fonctions d'assistance et tracez les valeurs stockées." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Diviser" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * Quelle est la règle?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Ce chemin se multiplie par l'autre entrée. Donc {ph0}10% signifie 10% de " +"200{ph1} après +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "Nommez les opérandes et vérifiez les deux chemins d'opérateur." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Raisonnement d'expert illustratif" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Vous décodez les instructions, suivez les appels de fonction et " +"reconstruisez le calcul.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "Avec REA · Vous demandez à {ph0}votre agent{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Un seul prompt." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Posez votre question à l’agent {ph0}avec des mots simples.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemple d'invite * Calculatrice" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Exemple de réponse · basé sur les résultats" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "" +"Après +, le bouton % prend {ph0}un pourcentage du premier nombre.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA fournit" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Les instructions du gestionnaire, le code décompilé et les appels." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Votre agent explique" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "" +"Quelle branche s'applique, ce qu'elle calcule et comment la reconstruire." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Assemblage sélectionné à partir de la DLL de calculatrice installée. Les " +"réflexions et la réponse illustrent les résultats. {ph0}Continuez avec " +"l'exemple de la calculatrice ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Essayons deux exemples.{ph1} Modifiez la vitesse d'un jeu, puis revenez" +" à la calculatrice et reconstruisez son bouton%." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Exemple 01 * Jeu de dinosaures de Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Pourquoi le dinosaure accélère-t-il ?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Objectif" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Reconstruisez le jeu avec {ph0}vitesse réglable.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Pourquoi faire de l'ingénierie inverse?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Pour reproduire son accélération, il nous faut {ph0}la règle dans le jeu de " +"course{ph1}: à quelle vitesse il démarre, combien il augmente et quand il " +"s'arrête." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Jouer à la reconstruction" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Jouer" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Sauter ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Recommencer" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Vitesse" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Utilisez la règle d'accélération récupérée" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Règle d'origine: commencez à 6, puis augmentez vers 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Déplacez le curseur pour définir votre propre vitesse. L'espace ou le saut " +"efface un cactus." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Activez JavaScript pour lire la reconstruction. Le code et l'explication ci-" +"dessus restent lisibles." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA a renvoyé" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Le script en cours d'exécution dans la page.{ph1} L'agent lit sa " +"fonction de mise à jour et ses paramètres de vitesse, puis utilise cette " +"règle dans un nouveau jeu." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemple d'invite · Jeu de dinosaure" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour inspecter ce jeu de dinosaures. Pourquoi " +"ça va plus vite? Affichez la règle de vitesse, puis créez une petite version" +" avec une vitesse réglable.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Cible inspectée: {ph0}édition de navigateur dérivée du Chromium de " +"wayou{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Commencez à 6 heures.{ph1} Ajouter {ph2}0.001{ph3} chaque mise à jour " +"sans collision, alors que la vitesse est inférieure {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Ouvrir le laboratoire de vitesse →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Ce que fait chaque partie" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 · REA{ph1}{ph2}Lire le script du jeu en cours " +"d'exécution{ph3}{ph4}Renvoyez son code et ses paramètres réels à " +"l'agent.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 · Votre agent{ph1}{ph2}Reconstruire la règle, ajouter un " +"contrôle{ph3}{ph4}Utilisez l'accélération récupérée dans un petit jeu avec " +"un curseur de vitesse.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * Vous{ph1}{ph2}Changez la vitesse et jouez{ph3}{ph4}Essayez " +"l'accélération d'origine, puis choisissez votre propre rythme.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Voir le script, les vérifications et comment essayer l'analyse" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA a inspecté l'édition du navigateur HTTP via une connexion de débogage " +"locale et a renvoyé le fichier chargé {ph0}, y compris sa source et son " +"résumé." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Nous avons appelé la fonction de mise à jour du jeu d'origine dans une " +"vérification contrôlée du navigateur, avec les obstacles et la planification" +" automatique désactivés. Après 4 000 mises à jour, la vitesse était de 10,0;" +" après 10 000, elle était de 13,0, arrondie à une décimale." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"Le nouveau mini-jeu conserve cette règle de vitesse. Son code de dessin, de " +"saut et de collision est une petite implémentation pédagogique. {ph0}Ouvrir " +"le laboratoire{ph1} pour voir le nouveau code et exécuter le même contrôle " +"de vitesse." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Pour inspecter la cible vous-même, suivez les instructions {ph0}étapes de " +"connexion du navigateur{ph1} en utilisant {ph2}la page des dinosaures{ph3}. " +"Donnez à votre agent cette URL de page et votre point de terminaison de " +"débogage local, puis copiez l'invite ci-dessus." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Code de vitesse inspecté{ph1} · {ph2} Auteurs de Chromium * Licence " +"BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Exemple 02 · Windows Calculatrice" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Recréez le bouton % de la calculatrice." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"Construisez une petite calculatrice qui gère {ph0}les deux + et × " +"correctement.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Le même bouton utilise {ph0}règles différentes après + et ×.{ph1} Nous " +"inspectons l'application installée pour trouver à quel numéro le pourcentage" +" est appliqué." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Essayez le calcul" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Réinitialiser" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% de 200 = 20. Alors 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Illustration interactive de la règle du pourcentage inspecté." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Une branche se divise par 100. L'autre multiplie également par le " +"premier nombre.{ph1} L'agent utilise les deux pour recréer le bouton%." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Pour cet exemple, {ph0} et {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemple d'invite * Reconstruire le " +"bouton %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour inspecter le bouton % de la calculatrice " +"Windows. Récupérez les règles après + et×, puis créez une petite " +"calculatrice qui utilise les deux.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Avec +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Prenez 10% du premier nombre.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Avec ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Transformez 10% en 0,1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "De l'application installée à un bouton % fonctionnel" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA lit la bibliothèque{ph1}{ph2}Renvoie le code du gestionnaire %" +" {ph3}{ph4}La fonction vérifie l'opérateur et utilise la constante " +"{ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * Votre agent l'interprète{ph1}{ph2}Expliquer et reproduire les " +"règles{ph3}{ph4}Vérifiez la branche avec la source de Microsoft, puis " +"essayez + et × ci-dessus.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Voir le vrai code et comment la réponse a été vérifiée" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Inspecté avec la version 4.1.0 de REA: Calculatrice 11.2508.4.0, x64 de " +"Windows. Le résumé lisible utilise des noms de la source publique de " +"Microsoft pour expliquer la branche récupérée." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Pourcentage de mise en œuvre{ph1} · {ph2}Scénarios de test de " +"Microsoft{ph3} · {ph4}Guide de configuration natif{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Votre première enquête" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Essayez REA sur une petite application." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Téléchargez notre exemple de Notes, tracez son exportation CSV et vérifiez " +"une entrée modifiée." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Essayez l'exemple guidé" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Vous voulez aller plus loin ?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Dites à votre agent ce que vous voulez comprendre ou construire. Avec REA, " +"vous pouvez travailler ensemble sur n'importe quoi à partir de {ph0}clonage " +"de ce site Web{ph1} à {ph2}reconstruire un jeu à partir de son " +"exécutable.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemple d'invite * Site Web" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Oui, celui-ci." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemple d'invite * Reconstruction du" +" jeu" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour reconstruire ce jeu à partir de son " +"exécutable. Récupérez la logique de jeu en C et testez-la par rapport à " +"l'original.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Voir l'étude de cas DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "" +"Pour les étapes de configuration et d'analyse, choisissez votre cible:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Programmes en code machine" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Inspectez les fonctions, les chaînes, les références et les relations " +"d'appel de fonction dans les exécutables et les bibliothèques." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Guide d'analyse des programmes en code machine" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Mappez les modules, les routes, l'IPC et les dépendances natives à partir " +"d'un dossier d'application ou d'une archive ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Flux de travail des applications" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Activité du navigateur et de l'exécution" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Capturez l'activité du navigateur ou du processus sélectionné, puis comparez" +" les résultats entre les exécutions." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Guide d'observation du navigateur" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Des questions ?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Lire la FAQ{ph1}, {ph2}discutez avec nous sur Discord {ph3}, ou " +"{ph4}ouvrir un problème GitHub{ph5} pour les bugs et les demandes de " +"fonctionnalités." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Rejoindre la communauté" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Partagez des enquêtes et obtenez de l'aide d'autres utilisateurs de REA sur " +"Discord . Suivez REA sur X pour les mises à jour du projet." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-Ingénierie inverse pour Votre Agent de codage" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Rétroconcevoir les applications, les binaires et le comportement du " +"navigateur avec votre agent de codage. Suivez des guides clairs et essayez " +"des exemples interactifs avec REA ." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Copier l'invite d'installation de REA" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Commande Copier le programme d'installation" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Suivez l'analyse manuelle de la calculatrice" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Question sur le pourcentage de la calculatrice de copie" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Mini-jeu de dinosaure. Utilisez le bouton de saut ou appuyez sur Espace " +"pendant que le jeu est concentré." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Copie de l'invite d'analyse des dinosaures" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Choisissez le calcul" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Invite d'analyse de la calculatrice de copie" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Copier l'invite de projet de site Web" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Copie de l'invite de reconstruction du jeu" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Accueil{ph1} / {ph2}Vitrines{ph3} / Androïde" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Étude de cas · Authentificateur Aegis" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "" +"Comment fonctionne un authentificateur{ph0}générer un code de connexion?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Un code à six chiffres change toutes les 30 secondes. Utilisez REA pour " +"trouver le calcul dans un Android APK , puis reconstruisez-le avec une " +"horloge que vous pouvez contrôler." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 · Android * Version officielle APK · 6,9 Mo" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Voir le modèle Aegis sur le modèle GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "D'un APK à un code que vous pouvez reproduire" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * Localisez la fonctionnalité{ph1}{ph2}3 077 classes → méthodes de " +"génération{ph3}{ph4} REA recherche le package et trace le code utilisé par " +"les actions d'affichage et de copie.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * Lire le calcul{ph1}{ph2}Heure + clé de compte → six " +"chiffres{ph3}{ph4} REA renvoie les méthodes et les valeurs par défaut. " +"L'agent explique comment ils s'emboîtent.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * Reconstruire et vérifier{ph1}{ph2}Change l'horloge. Regarde le " +"code.{ph3}{ph4}Une nouvelle démo de navigateur reproduit la règle et la " +"compare à des cas de référence publics.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "Dans cette étude de cas" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Demandez à votre agent{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Essayez le générateur de code{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Trouver le code avec REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Lire le calcul{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Vérifiez la reconstruction{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Inspectez vous-même le APK{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Demandez à votre agent" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"L'application affiche un code de connexion changeant. Nous voulons trouver " +"{ph0}ce qui le fait changer{ph1} et reproduisez ce comportement." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Copier" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Un exemple d'invite pour le APK téléchargé, avec l'analyse Android de REA " +"configurée. {ph0}Obtenez le APK et la configuration de l'analyse ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Essayez le générateur de code" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"L'application regroupe le temps en {ph0}blocs de 30 secondes.{ph1} Il " +"combine le numéro de bloc avec la clé de compte pour générer un code. La " +"même clé et le même bloc produisent le même code." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Déplacez l'horloge sur 60 secondes" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Temps" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "secondes" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Notre horloge d'exemple réglable" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "bloc de 30 secondes" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Bloquer" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 secondes{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Code généré" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Clé de compte + bloc → six chiffres" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Exemple de temps, en secondes" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 secondes" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 secondes" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"À 59 secondes: {ph0}287082.{ph1} À 60 secondes: {ph2}359152.{ph3} Le " +"déplacement à l'intérieur d'un bloc laisse le code inchangé." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"La clé est fixe, publique {ph0}Données de test RFC 6238{ph1}. La démo " +"implémente le calcul récupéré à partir du APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"Le diagramme montre le résultat à 59 secondes. Activez JavaScript pour " +"changer l'horloge." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Trouver le code avec REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Limitez le APK à trois classes" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} est le calcul candidat; les deux autres concernent la barre de " +"progression et les comptes importés. TOTP signifie un mot de passe à usage " +"unique basé sur le temps." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Connectez le générateur à l'écran de l'application" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA identifie la surcharge d'horodatage et trouve les appelants de la " +"méthode de base. Inspection {ph0} puis affiche l'appel d'affichage {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Les requêtes affichent un chemin d'entrée raccourci. Les noms de classe de " +"résultat omettent le commun {ph0} préfixe." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Lire le calcul" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"Retours sur le REA {ph0}la conversion d'horloge, les paramètres par défaut " +"et les méthodes de génération.{ph1} Les constructeurs définissent un " +"intervalle de 30 secondes et six chiffres; la méthode d'horodatage " +"transforme les secondes en un numéro de bloc." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Bloc de temps" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Clé + bloc" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Six chiffres" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Le temps choisit le bloc.{ph1} Les secondes 30 à 59 donnent toutes le " +"bloc 1. À 60 secondes, le bloc devient 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}La clé compte aussi.{ph1} Le générateur combine la clé de compte avec " +"le bloc. Un compte avec une clé différente peut afficher un code différent " +"en même temps." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Gardez six chiffres.{ph1} Le reste après division par 1 000 000 est " +"complété par des zéros si nécessaire, de sorte qu'un code peut commencer par" +" 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Extraits de plusieurs méthodes inspectées, avec retour à la ligne pour " +"l'affichage. Le panneau de droite est un résumé explicatif. {ph0} Le code " +"Aegis est sous licence GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "À l'intérieur du générateur" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"Les mises APK publiées {ph0} dans {ph1}. REA suit l'appel de {ph2} et " +"renvoie ce corps; la source d'origine appelle l'assistant {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"Le dernier octet de hachage sélectionne une position. Quatre octets à cette " +"position fournissent un nombre positif de 31 bits; le formatage le réduit au" +" nombre de chiffres demandé. Le dernier argument du constructeur sélectionne" +" la branche de formatage de code introduite par la compilation." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Comparer avec la source de publication correspondante{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Vérifiez la reconstruction" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Nous avons assemblé les méthodes Java REA sélectionnées dans un petit " +"programme de test. Leur sortie correspondait à une reconstruction " +"indépendante sur {ph0}133 cas de test{ph1}, y compris les limites des blocs " +"de temps et les codes commençant par zéro." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Exemple de temps" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Code à six chiffres" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 secondes" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1 111 111 109 secondes" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Le générateur correspond également aux six cas de référence SHA-1 publiés " +"dans {ph0}Référence RFC 6238{ph1}. Vérifiez l'implémentation du navigateur " +"par rapport à eux:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Exécuter des vérifications des références" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Lire le calcul de la démo" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"Les cas de référence utilisent huit chiffres. La vérification vérifie " +"également leurs résultats à six chiffres." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"La vérification exécute les méthodes Java extraites et la nouvelle démo. " +"L'Android APK a été inspecté statiquement." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Inspectez vous-même le APK" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Mettre en place REA{ph1} sur macOS ou Linux, puis téléchargez ces deux " +"fichiers dans le même dossier. Sur Windows, utilisez un Linux environnement " +"tel que WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"L'analyse Android nécessite un JDK 17 complet ou une version ultérieure. " +"Sélectionnez-le avec {ph0} ou {ph1}. Cette affaire utilisait JDK 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Pointez REA sur le fichier fournisseur et inspectez le APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "Modèle: macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Votre agent peut continuer via le REA de CLI en utilisant l'invite ci-" +"dessus. Pour le modèle MCP, ajoutez {ph0} à l'environnement du serveur REA " +"et reconnectez-le." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Une question suivante: {ph0}que se passe-t-il lorsqu'un compte utilise huit " +"chiffres ou un intervalle de temps différent?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Sources" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Version officielle de Aegis 3.4.3{ph1} · {ph2}Validation de la source " +"correspondante{ph3} · {ph4}Licence GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" +"{ph0}Cas de référence RFC 6238{ph1} · {ph2}Données de test de " +"démonstration{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Inspecté avec REA 6.1.0 le 9 octobre 2026. Les extraits décompilés sont " +"crédités à Aegis ; le diagramme, le résumé lisible et la reconstruction du " +"navigateur sont de nouveaux supports pédagogiques." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK Ingénierie inverse: Codes de connexion-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Inspectez le Aegis Android APK avec REA, récupérez son calcul de code de " +"connexion à six chiffres et essayez une reconstruction avec une horloge " +"réglable." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK étude de cas" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Copier l'invite d'exemple Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Suivez le calcul du code de connexion" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Copie de la commande d'inspection APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Accueil{ph1} / {ph2}Vitrines{ph3} / FCT" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Étude de cas * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Trouvez le drapeau dans{ph0}un binaire CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Utilisez REA pour inspecter un petit vérificateur d'indicateurs, transformer" +" ses règles en équations et trouver une entrée qui fait imprimer le " +"programme d'origine {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "vérificateur de drapeau carrés masqués * Facile * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Voir le défi original" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "D'une réponse binaire à une réponse vérifiée" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * Trouver le chèque{ph1}{ph2}Chaînes → fonctions de " +"vérification{ph3}{ph4} REA trouve l'invite, ses références et le code qui " +"accepte ou rejette une entrée.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * Extraire les règles{ph1}{ph2}36 caractères · 26 sommes{ph3}{ph4} " +"REA renvoie les instructions et les données derrière chaque vérification. " +"L'agent les transforme en équations.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * Résoudre et exécuter{ph1}{ph2}Drapeau récupéré → " +"Correct!{ph3}{ph4}Un script Python résout les équations. REA capture le " +"programme d'origine acceptant le résultat.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"Le défi est de joseph, publié dans le référentiel officiel de DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "Dans cette étude de cas" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Trouver le code de vérification{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Lire un masque{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Assemblage en code lisible{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Résoudre les équations{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Vérifiez la réponse{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Essayez-le vous-même{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Trouver le code de vérification" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Le document est un exécutable de 15 Ko. Il demande un drapeau, puis imprime " +"{ph0} ou {ph1}. Commencez par une simple demande à votre agent." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Copier" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour analyser ms_flag_checker et trouver " +"l'indicateur. Expliquez le fonctionnement des vérifications, puis vérifiez " +"la réponse avec le programme d'origine.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Un exemple d'invite, avec le défi téléchargé disponible localement et une " +"analyse du fournisseur de programmes en code machine connecté." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Suivez l'invite de saisie jusqu'à sa fonction" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"La référence donne à l'agent un endroit pour enquêter, même si les noms de " +"fonctions d'origine de l'exécutable ont été supprimés." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Lire le vérificateur et ses deux aides" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"La première boucle copie 36 codes de caractères. La boucle de contrôle " +"décode un masque, additionne les codes sélectionnés et compare le résultat " +"avec un nombre stocké. Ses {ph0}- étapes d'octets à travers {ph1} les octets" +" donnent 26 masques." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Ce sont des résultats sélectionnés à partir d'une nouvelle analyse REA. Le " +"chemin cible local est raccourci pour l'affichage; les adresses se réfèrent " +"à l'image importée de REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Un chèque révèle un caractère" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Le vérificateur organise l'entrée dans une grille 6×6. Un masque choisit " +"quelles cellules contribuent à une somme. Son codage compact utilise des " +"nombres négatifs pour sauter les cellules et des nombres positifs pour les " +"sélectionner." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" +"La septième vérification sélectionne une seule position. {ph0}Figure " +"ouverte{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Lire le masque et sa cible à partir du binaire" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"L'instruction {ph0} lit les octets du masque en tant que valeurs signées. " +"C'est pourquoi {ph1} signifie -21. La cible est un entier little-endian. " +"Ensemble, ces octets indiquent à l'agent que {ph2}, donc ce personnage est " +"{ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Des instructions à un chèque lisible" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Sélectionnez une étape pour connecter l'assistant de sommation et son " +"appelant à la même règle en C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Démarrer" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Sélectionner" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Ajouter" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Avance" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Comparer" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * instructions d'origine sélectionnées" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Résumé lisible de C * one-check" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * Commencez à zéro.{ph1} {ph2} détient la somme courante." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * Vérifiez la cellule du masque.{ph1} Une valeur nulle ignore le " +"caractère; une valeur différente de zéro l'inclut." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * Ajouter un code de caractère.{ph1} L'entier de l'entrée au même " +"décalage est ajouté à la somme." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * Passez à la cellule suivante.{ph1} La boucle d'origine avance de " +"quatre octets par entier et visite six rangées de six cellules." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * Comparer avec la cible stockée.{ph1} L'appelant reçoit la somme en" +" {ph2}. Un décalage saute à {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Les instructions proviennent de l'assistant de sommation et de son appelant." +" Le C est un résumé explicatif avec des noms descriptifs et une boucle " +"aplatie de 36 cellules." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Résoudre les 26 équations" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"La plupart des masques sélectionnent plusieurs cellules. Par exemple, la " +"première vérification ajoute 16 codes de caractères et nécessite un total de" +" 1441. Les sélections qui se chevauchent donnent des équations qu'un petit " +"script Python peut résoudre ensemble." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Extrait du solveur Python ·" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 est un solveur qui trouve des valeurs satisfaisant ces équations. Cet " +"extrait utilise les vérifications extraites et suppose une {ph0} drapeau " +"avec des lettres, des chiffres, des traits de soulignement et des accolades." +" Le téléchargement complet comprend les 26 masques et cibles." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Télécharger le solveur complet" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Vérifiez la réponse avec le programme d'origine" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"La capture de processus de REA enregistre l'exécutable d'origine acceptant " +"l'indicateur résolu. Changer un caractère sélectionné à partir de {ph0} à " +"{ph1} fait la première somme 1440 au lieu de 1441, et le programme la " +"rejette." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Entrée" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Production observée" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Code de sortie" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Drapeau du solveur" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Un personnage a changé" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Afficher l'indicateur récupéré et la sortie capturée" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * sortie du programme d'origine" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Copier l'indicateur" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"La valeur récupérée correspond également au drapeau dans les métadonnées de " +"défi publiées par les organisateurs, vérifiées après la résolution du " +"binaire." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Détails de la source, de l'identité de la cible et de l'analyse" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Nouvelle analyse et deux captures de processus le 8 octobre 2026, en " +"utilisant REA 4.1.0 avec Ghidra 12.1.4 sur Linux x64. Le binaire est un ELF " +"x86-64 dépouillé, 15 248 octets." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Les références de chaîne, les fonctions et les constantes ont été inspectées" +" avant de lire la source ou la solution des organisateurs. Le solveur Python" +" et le diagramme ont été construits à partir de ces résultats REA." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Comparez avec la source des organisateurs{ph1} · {ph2}Contester les " +"métadonnées et l'indicateur{ph3} · {ph4}REA notes de preuve{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Essayez-le vous-même" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Téléchargez le défi d'origine et le solveur dans un seul dossier. Utilisez " +"l'invite ci-dessus pour enquêter avec votre agent ou exécutez le script " +"inclus." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Terminal * résoudre et exécuter" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Le script imprime un drapeau candidat; collez-le à l'invite du programme. La" +" résolution des besoins Python et {ph0}. L'exécution de l'exécutable " +"d'origine nécessite Linux x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Configurez REA avec votre agent de codage" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "Ingénierie inverse CTF: Vérificateur de drapeau DownUnderCTF-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Utilisez REA pour résoudre le vérificateur d'indicateur de carrés masqués de" +" DownUnderCTF. Retrouvez les fonctions de vérification, extrayez les masques" +" et comparez un drapeau récupéré avec le programme d'origine." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "Étude de cas sur le vérificateur de drapeau de la FCT" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Copier l'invite d'exemple CTF" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "" +"Équation du masque CTF; faites défiler horizontalement sur des écrans plus " +"petits" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"Le septième masque saute 21 cellules, sélectionne la position 21, puis saute" +" 14. Seule cette cellule contribue à la somme. Son code de caractère requis " +"est 55, ce qui signifie que le caractère est 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Suivez la vérification du FCT" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Copier l'assemblage de la FCT" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Copier le chèque CTF lisible" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Copier l'extrait du solveur CTF" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Copier l'indicateur récupéré" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Copier les commandes du solveur CTF" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Accueil{ph1} / {ph2}Vitrines{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Étude de cas * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Reconstruction DX-Ball{ph0}de son exécutable." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"L'objectif est une version C maintenable du jeu Windows de 1996. REA aide " +"l'agent à inspecter l'original, une fonction à la fois." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 · D · REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Une fonction, de l'exécutable au vérifié C. REA fournit les instructions, " +"les appelants et les lectures de données; le projet de reconstruction " +"implémente et teste le résultat. {ph0}Figure ouverte{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "Dans cette étude de cas" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Le projet{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Panoramique sonore{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Vérification du résultat{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Continuer le travail{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "fonctions C maintenues" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "comparaisons avec le code d'origine" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "fonctions avec octets compilés correspondants" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Point de contrôle du projet: 7 octobre 2026. {ph0}Registre de " +"progression{ph1} · {ph2}Couverture des tests{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Le projet à ce jour" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Le code récupéré couvre la gestion des cartes et des ressources, les coups " +"de briques, les animations, les particules et la production de bonus. Les " +"versions actuelles fournissent des utilitaires d'inspection et une " +"bibliothèque d'analyse. Le travail sur le jeu jouable se poursuit avec la " +"physique de la balle et de la pagaie, la manipulation de la mise sous " +"tension et l'intégration de Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Trouver le calcul de la position sonore gauche / droite" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Lorsqu'une brique est touchée, sa position horizontale est transmise au code" +" sonore. L'enquête nécessaire pour récupérer comment cette coordonnée " +"d'écran devient une valeur de panoramique gauche / droite." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Copier" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour savoir comment DX-Ball calcule le " +"positionnement du son stéréo. Expliquez le calcul et montrez le " +"code.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Un exemple d'invite pour votre agent de codage, avec l'exécutable local " +"disponible. L'enquête ci-dessous montre les requêtes REA et les preuves " +"derrière la réponse." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"L'agent a utilisé REA pour inspecter la fonction, suivre son appelant et " +"lire les constantes de l'exécutable. Ces résultats ont fourni l'entrée et " +"l'arithmétique nécessaires pour écrire la fonction C ci-dessous." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"Le premier résultat de la fonction pour {ph0} déclaration de pseudocode " +"incluse {ph1} et appeler {ph2}. Sa vue d'instruction montrait une entrée de " +"pile et des opérations en virgule flottante. Cet écart a donné à l'agent une" +" raison concrète de continuer à enquêter." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "La première vue du décompilateur" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"La sortie affiche un appel de conversion. La lecture des instructions ci-" +"dessous révèle l'entrée et le calcul alimentant cet appel." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Réponses à trois questions via REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Récupérer l'entrée manquante" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"Le résultat de la fonction inclut des instructions à côté du pseudocode et " +"des appelants. Ici, {ph0} expose l'entrée entière manquante dans la vue du " +"décompilateur." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Suivez l'appelant pour comprendre l'entrée" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA a identifié cet appelant dans le premier résultat. Son échelle " +"d'instructions précédente {ph0} par 30; l'ajout de 20 donne les coordonnées " +"de l'écran de la brique, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Lire les valeurs derrière les adresses mémoire" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Les octets renvoyés établissent les deux constantes arithmétiques et " +"l'échelle panoramique initiale. L'agent a maintenant les valeurs nécessaires" +" pour l'expression C." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "Des découvertes de REA à C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Suivez les cinq étapes ci-dessous. Chaque sélection met en évidence les " +"instructions d'origine et les lignes C qu'elles ont renseignées." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Entrée" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Multiplier" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Soustraire" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Échelle" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Retour" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Extrait original x86 ·" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "C Reconstruit" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * Lire l'entrée.{ph1} La vue d'instruction dans le résultat de la " +"fonction de REA lit {ph2} et utilisations {ph3} pour charger l'entier. " +"Suivre son appelant via REA établit la signification des coordonnées d'écran" +" du paramètre C {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * Multiplier par 1,5625.{ph1} {ph2} lit le double à {ph3}. Les " +"octets renvoyés par REA {ph4} décoder à {ph5}; le C utilise la même " +"constante." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * Soustraire 500,0.{ph1} {ph2} lit le double à {ph3}. Le résultat " +"de l'octet de REA décode en {ph4}, déplacement du centre du calcul vers les " +"coordonnées de l'écran {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * Appliquez l'échelle mémorisée.{ph1} Le deuxième {ph2} lit {ph3}. " +"Ce global est nommé {ph4} dans la source maintenue. La lecture du deuxième " +"octet de REA établit sa valeur initiale de {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * Renvoie un entier.{ph1} L'appel à {ph2} atteint {ph3}, identifié " +"dans les résultats de l'appelé de REA. Le C convertit le résultat en {ph4}; " +"les comparaisons originales-x86 vérifient la valeur renvoyée." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"L'extrait d'assemblage sélectionne les instructions d'entrée, d'arithmétique" +" et de retour. La liste complète ci-dessous comprend également les magasins " +"intermédiaires et la configuration et le nettoyage des fonctions." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Assemblage complet et preuves à l'appui" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA résultat · 0x406400–0x40643f" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Ce que l'appelant fournit" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"La fonction de frappe de brique à {ph0} met à l'échelle sa coordonnée de " +"tuile de 30, ajoute 20, puis la pousse avant l'appel:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Ce que les données lisent établissent" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA lectures d'octets, décodées en doubles little-endian" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Adresse" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Valeur" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Utilisé pour" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Première multiplication" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Soustraction" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} initialement" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Échelle de casserole stockée" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Enregistré avec REA 4.1.0 pour la cible DX-Ball 1.07 épinglée au hachage. " +"Les notes d'enquête liées conservent les identifiants de preuve." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Source maintenue{ph1} · {ph2}Notes d'enquête et références des éléments" +" de preuve{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Vérification de la fonction récupérée" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"La fonction récupérée passe deux vérifications: ses valeurs de retour " +"correspondent à l'original et ses octets compilés correspondent à " +"l'exécutable." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3 205 cas de comportement" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Les tests exécutent la fonction x86 d'origine et comparent sa valeur de " +"retour avec le C maintenu. Ils couvrent chaque position entière de 0 à 640 à" +" cinq échelles panoramiques: 0, 0,5, 1, 20 et -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 octets correspondants" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"La fonction C est compilée avec la chaîne d'outils VC4.0 épinglée. La " +"relecture du compilateur correspond à la fonction complète après avoir " +"appliqué les relocalisations examinées et vérifié les constantes " +"référencées." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"Sur une échelle de 1, le calcul récupéré renvoie -500 sur le bord gauche, 0 " +"au centre et 500 sur le bord droit. La prochaine partie du travail audio " +"consiste à intégrer cette valeur au backend sonore du jeu." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Lire les détails de la relecture du compilateur{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Poursuivre l'enquête" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"La même approche est utilisée pour les mises à jour de particules, les files" +" d'attente d'explosion et la génération de bonus: inspectez les fonctions " +"pertinentes, récupérez leur état et leurs dépendances, puis comparez " +"l'implémentation avec l'original." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Pour inspecter vous-même la fonction sound-pan, suivez les instructions de " +"configuration du projet DX-Ball et fournissez sa cible d'origine " +"correspondante. Puis cours:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "Dans la caisse de DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} Référentiel DX-Ball{ph1}{ph2}Source actuelle, progression et " +"configuration locale.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} Flux de travail d'analyse REA{ph1}{ph2}Suivez le calcul, puis utilisez" +" la même approche avec votre propre binaire.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Production de particules et de bonus{ph1}{ph2}Une enquête plus large " +"sur l'état, les files d'attente et les écritures de pixels.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "Ingénierie inverse DX-Ball: Panoramique du son — REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Suivez une reconstruction DX-Ball de l'analyse binaire à REA en passant par " +"le C maintenu, les tests x86 d'origine et les octets de fonction compilés " +"correspondants." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball étude panoramique du son; défilement horizontal sur des écrans plus " +"petits" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.La fonction EXE 0x00406400 est inspectée avec REA . Un appelant " +"frappé par une brique fournit 20 plus 30 fois tile_x. Instructions chargez " +"x, multipliez par 1,5625, soustrayez 500,0, appliquez pan_scale et renvoyez " +"un entier. Le C maintenu est vérifié indépendamment par rapport au x86 " +"d'origine dans 3 205 cas et par relecture du compilateur VC4.0 correspondant" +" à 63 octets." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "Étude de cas sur la reconstruction du DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Copier l'exemple d'invite" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Suivez le calcul de la position sonore gauche / droite" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Copier l'extrait original de l'assemblage" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Fonction Copier le son-panoramique" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Copier l'assemblage complet du panoramique sonore" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Copier la commande d'analyse DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Accueil{ph1} / Vitrines" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "Études de cas REA." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, jeux, Electron et un défi CTF, avec code, chiffres et résultats " +"vérifiés." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Pour Android · APK analyse" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Comment un authentificateur génère un code de connexion" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Retrouvez le calcul du code à six chiffres de Aegis dans son APK publié. " +"Tracez les méthodes de génération avec REA, puis déplacez une horloge de " +"démonstration pour voir pourquoi le code change toutes les 30 secondes." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Lire l'étude de cas Android" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * Analyse des programmes en code machine" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Résoudre un vérificateur de drapeau CTF" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Inspectez un défi de DownUnderCTF facile avec REA . Trouvez ses fonctions de" +" vérification, transformez les masques et les sommes en équations, puis " +"vérifiez le drapeau résolu avec le programme d'origine." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Lire l'étude de cas de la FCT" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Reconstruction indigène ·" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "Calcul de la position sonore gauche/droite de DX-Ball" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Récupérez un calcul de la position sonore gauche / droite d'un jeu Windows " +"de 1996. Les instructions, les références de l'appelant et les constantes " +"numériques de REA conduisent à une petite fonction C, vérifiée par rapport " +"au comportement d'origine et aux 63 octets compilés." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Lire l'étude de cas DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * Traçage des fonctionnalités" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Comment Notion copie du texte et du code HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Tracez une API orientée page via le JavaScript emballé de Notion . Suivez " +"ses enveloppes IPC dans le presse-papiers du système, puis voyez comment un " +"petit marqueur HTML maintient les données de bloc riches connectées à une " +"copie." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Lire l'étude de cas Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 pour la reconstruction" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Comment TH04 vise un anneau de balles" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Inspectez l'assistant d'angle 16 bits d'origine avec REA . Associez ses " +"opérations de multiplication, de division et de coordination à du C ++ " +"lisible, puis voyez comment elles produisent un anneau destiné au joueur." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Lire l'étude de cas TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Guides étape par étape" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Les guides parcourent un calcul natif, une exportation Electron et une " +"requête de navigateur. Chacun commence par une invite et une cible concrète." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Lire les guides" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Études de cas d'Ingénierie Inverse-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Suivez les enquêtes de REA à travers du code, des chiffres et des démos: un " +"authentificateur Android, DX-Ball, Notion, TH04 et un vérificateur de " +"drapeau DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Accueil{ph1} / {ph2}Vitrines{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Étude de cas · Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Comment se copie Notion{ph0}texte et HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Tracez un appel de presse-papiers depuis l'API de page de Notion, via le " +"préchargement et le processus principal, vers le rédacteur de presse-papiers" +" de Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion Bureau 7.6.1 · JavaScript · REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Le pont à l'intérieur du package de bureau de Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * API orientée page{ph1} {ph2}{ph3}{ph4} {ph5}Le préchargement " +"expose une méthode appelable.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * Emballage de précharge{ph1} {ph2}{ph3}{ph4} {ph5}Le wrapper envoie" +" le canal et les arguments.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * Gestionnaire de processus principal{ph1} {ph2}{ph3}{ph4} {ph5}Le " +"destinataire vérifie quelle page l'a envoyé.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * Presse-papiers du système{ph1} {ph2}{ph3}{ph4} {ph5} Electron " +"écrit le texte et le code HTML fournis.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Un canal relie les deux côtés: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Le code empaqueté utilise le même canal dans le préchargement et le " +"processus principal. La résolution des wrappers révèle les appels Electron " +"derrière ces noms." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "Dans cette étude de cas" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Suivez le pont du presse-papiers{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Conserver la structure d'un bloc{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Plus d'exemples et de sources{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Où va l'opération de copie?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"La page voit une méthode appelée {ph0}. Son implémentation dans la précharge" +" est un wrapper. La question utile est de savoir ce que ce wrapper envoie et" +" quel code le reçoit." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Copier" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour déterminer comment Notion copie du texte " +"et du code HTML dans le presse-papiers du système. Affichez le code à chaque" +" étape.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Un exemple d'invite avec le package d'application local de Notion disponible" +" pour votre agent de codage." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA trouve par où commencer la lecture" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"L'analyse du préchargement de l'onglet avec REA localise l'API exposée à la " +"page et l'appel qui envoie une requête IPC. Les deux résultats sont fournis " +"avec des plages de sources dans le bundle minifié:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "Résultats REA → deux endroits pour ouvrir" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Champs sélectionnés à partir d'un nouveau {ph0} résultat sur la précharge de" +" l'onglet de Notion, enregistré avec REA 4.1.0. Les positions utilisent la " +"ligne et la colonne de base zéro du bundle d'origine." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"L'agent ouvre ces emplacements, trouve le membre du presse-papiers dans " +"l'API assemblée et lit {ph0}. Son site d'appel approvisionne {ph1}. Ce nom " +"donne à l'agent quelque chose de précis à rechercher dans le paquet " +"principal. Les quatre extraits ci-dessous montrent l'itinéraire qu'il relie." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Quatre courts morceaux de code" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Simplifié à partir du JavaScript emballé, avec des noms de variables " +"lisibles. Les membres non apparentés sont omis." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Commencez par l'API exposée à la page" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Ce membre fournit le nom du canal. La mise en œuvre de {ph0} nous indique " +"comment la demande quitte le processus de la page." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Résoudre le wrapper de la précharge" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"La fonction renvoyée transmet les arguments via l'IPC de requête et de " +"réponse de Electron. Nous pouvons maintenant chercher {ph0} du côté du " +"processus principal." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Vérifiez comment le destinataire est enregistré" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Le processus principal utilise un autre wrapper. Ses {ph0} la méthode " +"enregistre un {ph1} récepteur pour ce canal." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Trouver l'écriture et sa vérification de l'expéditeur" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"C'est la destination. Après avoir vérifié l'expéditeur, le gestionnaire " +"transmet les données fournies à l'API du presse-papiers de Electron. Le " +"canal et les deux wrappers résolus connectent la méthode exposée à cet " +"appel." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Comment un bloc copié conserve-t-il sa structure?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"L'éditeur Web de Notion envoie du texte et du HTML via {ph0}. Il conserve " +"les données de bloc localement et place un identifiant dans le code HTML " +"copié pour les connecter." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "Liens HTML vers les données de bloc enregistrées" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Lire l'identifiant HTML" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Trouver le même identifiant local" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Restaurer les données de bloc Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Texte illustratif et identifiant. Le test de module enregistré restaure les " +"données de bloc lorsque les identifiants correspondent; une entrée périmée " +"ne renvoie que du texte et du HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"Lors du collage, Notion recherche l'ID HTML et le compare à la copie " +"enregistrée. Les identifiants correspondants restaurent les données de bloc." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Format du presse-papiers enregistré à partir des ressources Web mises en " +"cache le 13 juillet 2026." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Plus d'exemples et de sources" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Un autre exemple: les tables de démarques" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion analyse la démarque en données de bloc. Cet exemple montre comment " +"une table devient des lignes d'en-tête et de données." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Un tableau via l'analyseur de démarque de Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Sortie enregistrée à partir d'un analyseur Markdown extrait. Le tableau " +"devient des lignes et des cellules." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Un autre chemin: la connexion SQLite hors ligne" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Requêtes de rendu de Notion {ph0} par l'intermédiaire de l'IPC. Le processus" +" principal crée un canal de message et donne un port au moteur de rendu et " +"l'autre à un processus utilitaire SQLite. Les lots de relevés suivants et " +"les résultats transitent par ce port." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"Suite à ce transfert, explique où le travail de base de données s'exécute et" +" pourquoi le suivi uniquement de la demande IPC initiale manque la " +"conversation ultérieure." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Sources et comment lire les extraits" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Le pont du presse-papiers provient de Notion Desktop 7.6.1 {ph0}: le " +"préchargement de l'onglet et {ph1}. Les extraits développent les noms de " +"variables minifiés et omettent le code non lié; l'assistant de vérification " +"de l'expéditeur est affiché avec son sous-jacent {ph2} appelle." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Les exemples de presse-papiers virtuels et de démarque proviennent d'actifs " +"Web mis en cache le 13 juillet 2026, y compris des modules {ph0}, {ph1}, " +"{ph2} et {ph3}. Ces actifs ont leur propre version. Les sondes enregistrées " +"exécutaient des modules extraits et de petits harnais; leurs sorties " +"décrivent ces sondes plutôt qu'une session d'interface utilisateur de bureau" +" capturée." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"Le résultat REA présenté ici est une analyse ciblée du préchargement de " +"l'onglet enregistré, enregistré avec le package REA 4.1.0 publié. Il " +"localise l'API et appelle l'opération. L'élément de presse-papiers et le " +"récepteur correspondant sont connectés en lisant leurs implémentations " +"wrapper dans le package." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"L'exemple Markdown utilise le module analyseur {ph0}. Les tests des modules " +"enregistrés montrent que les filtres de page et de discussion conservent " +"cette table. Les analyseurs paste/import, Markdown structuré et AI/chat ont " +"des points d'entrée et des formats intermédiaires distincts." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} Guide d'application pour le modèle JavaScript{ph1}{ph2}Suivez la " +"fonction d'exportation d'une petite application Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Suivez les instructions natives d'une " +"fonction C vérifiée.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron Ingénierie inverse: Presse-papiers — REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Suivez l'API du presse-papiers de Notion à travers le préchargement, les " +"wrappers IPC et le processus principal de Electron, avec de courts extraits " +"de code et un aperçu de son riche format de presse-papiers." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron étude de cas" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Copier l'invite d'analyse Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Copier l'extrait de préchargement Notion" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Copier l'extrait d'enveloppe d'invocation Notion" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Copier l'extrait de wrapper du gestionnaire Notion" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Copier l'extrait du récepteur du presse-papiers Notion" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Restauration des données riches du presse-papiers sur coller" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Aller au contenu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Accueil{ph1} / {ph2}Vitrines{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Étude de cas · Touhou 4: L'histoire de Lotus Land" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Reconstruction TH04's{ph0}motifs de balles." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Un anneau de balles commence par un court calcul d'angle. Utilisez REA pour " +"inspecter la fonction DOS d'origine, puis suivez ses instructions en C ++ " +"lisible." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 * DOS 16 bits * C++ et assemblage" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Voir le TH04 reconstruction" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Des instructions originales à la source vérifiée" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * Jeu original{ph1}{ph2}PRINCIPALE.EXE{ph3}{ph4}L'exécutable PC-98 " +"et son assistant d'angle de balle.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * Inspecter avec le modèle REA {ph1}{ph2}Instructions + " +"références{ph3}{ph4}Vérifiez le code DOS chargé et lisez le calcul de " +"l'angle à partir de l'exécutable.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * Lire le C++{ph1}{ph2}Espace → viser → tourner{ph3}{ph4}Reliez " +"chaque opération à la reconstruction maintenue.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * Vérifiez la source{ph1}{ph2}2 139 octets " +"correspondants{ph3}{ph4}Les vérifications du compilateur enregistrées " +"couvrent le code de génération de puces qui contient cette aide.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA renvoie le code d'origine et ses preuves d'analyse. Le projet TH04 " +"fournit les vérifications de source et de compilateur maintenues." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "Dans cette étude de cas" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}L'anneau de balle{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}Quels sont les retours de REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Assemblage en C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Vérification de la source{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Le projet complet{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Comment un anneau vise le joueur" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"L'attaque d'Elly demande un anneau visé avec un compte initial de 16. Un " +"assistant calcule la direction de chaque balle. Le même anneau peut faire " +"face à une direction fixe ou se tourner vers le joueur." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Votre agent de codage" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Copier" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour découvrir comment TH04 crée un anneau de " +"balles et le dirige vers le joueur. Expliquez le calcul et montrez le " +"code.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Un exemple d'invite, avec l'exécutable d'origine et la récupération de " +"reconstruction disponibles localement." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 stocke un tour complet dans le sens des aiguilles d'une montre en 256 " +"unités d'angle. Pour 16 puces, chaque index ajoute 16 unités: {ph0}. L'ajout" +" de la direction du joueur fait pivoter ces positions ensemble." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Une illustration des calculs d'angle récupérés pour le compte 16, la " +"direction du joueur 40 et la rotation du gabarit 0. {ph0}Figure ouverte{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Le modèle de tir dans la source récupérée" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "L'attaque de l'anneau d'Elly * extrait de la source" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Ces lignes sélectionnent le motif avant le réglage de la difficulté et des " +"performances. {ph0}Lire la source de l'attaque{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "Quels sont les retours de REA" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Nous inspectons {ph0}, la fonction qui définit la vitesse et l'angle de " +"chaque balle. REA renvoie ses instructions, son pseudocode et ses " +"références. Trois parties de ce résultat expliquent le schéma." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Vérifiez l'image DOS avant de lire son code" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"La vérification lie le code chargé et les enregistrements de relocalisation " +"à l'exécutable fourni. Le chemin ci-dessus est raccourci pour l'affichage." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Lire la multiplication et la division de l'anneau" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} tient l'index de la balle. Le décalage le multiplie par 256, puis la " +"division utilise le décompte lu à partir de {ph1}. Les noms de source " +"conservés dans ce champ {ph2}. La séquence complète apparaît ci-dessous." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Trouvez où le motif se tourne vers le joueur" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Les opérandes d'instruction exposent deux différences de coordonnées et un " +"assistant de direction. Sa valeur de retour est ajoutée à l'angle relatif de" +" l'anneau. Les noms de source rendent ces adresses lisibles; REA permet à " +"l'agent de vérifier les opérations d'origine derrière elles." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "De l'assemblage au C++lisible" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Sélectionnez une étape pour faire correspondre les instructions d'origine " +"avec le calcul de l'angle. Ce résumé suit le chemin de l'anneau visé; la " +"source complète gère également les spreads, les piles et les motifs " +"aléatoires." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Indice" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Espace" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Objectif" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Tourner" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Magasin" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * instructions 16 bits d'origine" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Résumé lisible de l'anneau visé C++ ·" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * Lire l'index des puces.{ph1} L'argument de pile est chargé dans " +"{ph2}. Dans un anneau à 16 puces, cet indice de membre va de 0 à 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Espacez les directions autour d'un tour complet.{ph1} {ph2} " +"multiplie par 256. Le nombre est égal à zéro-étendu en un mot, puis {ph3} " +"divise le produit par ce nombre. Pour le compte 16, chaque index avance de " +"16 unités d'angle." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * Ajoutez la direction du joueur.{ph1} Les deux soustractions " +"forment les coordonnées d'origine du joueur-moins. L'assistant de direction " +"renvoie un angle dans {ph2}; en l'ajoutant, il tourne tout l'anneau vers le " +"joueur." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * Ajouter la rotation du motif.{ph1} {ph2} ajoute l'angle du modèle." +" Le modèle initial d'Elly le met à zéro; d'autres modèles peuvent utiliser " +"le même assistant avec une rotation." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Gardez l'angle final dans un octet.{ph1} Le magasin écrit {ph2} au" +" champ d'angle d'apparition. Les valeurs s'enroulent après 255, tout comme " +"le cast d'octets non signés. La source environnante convertit également cet " +"angle et cette vitesse en vitesse." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"L'ensemble sélectionne la branche de la bague visée, le calcul de la visée " +"et la mémorisation finale. Le C++ ci-dessus est un résumé lisible. Les " +"vérifications du compilateur ci-dessous s'appliquent à la source maintenue " +"dans le projet lié." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Lire l'anneau maintenu et la source de visée" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Macro d'anneau{ph1} · {ph2}Source de visée et de vélocité{ph3} · " +"{ph4}Représentation angulaire{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Vérification de la source maintenue" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"Les vérifications enregistrées du projet TH04 compilent le code de " +"génération de puces, y compris cet assistant, avec sa chaîne d'outils Turbo " +"C++ 4.0 J épinglée." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2 139 octets correspondants" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Le code de génération de puces compilé correspond à une section de 2 139 " +"octets de l'exécutable d'origine." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Deux constructions propres" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Deux builds distincts produisent les mêmes octets correspondants. Les " +"hachages d'entrée enregistrés correspondent à la source maintenue illustrée " +"ici." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Enregistré le 3 octobre 2026. {ph0}Lire les vérifications du " +"compilateur{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Identité cible et portée de l'analyse" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Cible d'origine" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156 258 octets, sous-titres MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Entrée d'aide" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} dans l'image chargée de REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Décalage du fichier d'origine" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, retourné par {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Inspection du code enregistré" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 · 7 octobre 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Les vérifications du compilateur couvrent la section complète d'ajout de " +"puces de code, y compris cette aide. Ils comparent également sa contribution" +" à la CARTE et sa relocalisation qui se chevauchent." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA a vérifié l'image de charge DOS statique au segment de charge {ph0}. Ses" +" adresses décrivent cette image d'analyse. Le résultat de la fonction " +"rapporte 503 octets de corps dans deux plages sur une étendue de 517 octets;" +" les instructions sélectionnées ci-dessus se trouvent dans ces plages " +"rapportées." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Les noms des sources et les vérifications du compilateur proviennent du " +"point de contrôle TH04 {ph0}. Les observations de reconstruction antérieures" +" utilisaient les propres scripts d'analyse du projet; cette page ajoute une " +"nouvelle inspection REA de la même cible d'origine. L'identité du jeu fourni" +" est épinglée par son manifeste de référentiel, avec une provenance de " +"vidage vierge indépendante toujours ouverte." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"La figure illustre le calcul de l'angle. Les contrôles complets du jeu, le " +"timing et le comportement du matériel PC-98 ont des vérifications " +"d'exécution distinctes dans le projet de reconstruction." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "La reconstruction complète du TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Le projet construit les quatre produits DOS du jeu à partir de C++ et " +"d'assembly maintenus. Au-delà de la génération de puces, la source couvre " +"les étapes, les boss, le rendu, la saisie, les menus, les fins et la gestion" +" des partitions." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Explorez le référentiel TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Source de génération de balles{ph1}{ph2}L'assistant complet, d'autres " +"types de motifs et le réglage des modèles.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}Guide de construction et d'exécution DOS{ph1}{ph2}Créez la source et " +"testez-la dans le flux de travail de l'émulateur PC-98 du projet.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}État actuel du projet{ph1}{ph2}Vérification DOS et port x64 natif " +"séparé.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "Ingénierie inverse TH04: Modèles de puces DOS-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Inspectez le code DOS 16 bits d'origine de TH04 avec REA . Suivez " +"l'assemblage et le C ++ récupéré pour voir comment un anneau de balles est " +"espacé et dirigé vers le joueur." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "Sur cette page" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04 étude de cas de modèle de balle" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Copier l'invite d'exemple TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 anneaux de balle fixes et ciblés; faites défiler horizontalement sur " +"des écrans plus petits" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Deux diagrammes d'un anneau de 16 balles. L'anneau fixe commence à l'angle " +"zéro. L'ajout d'une direction de joueur de 40 fait pivoter toutes les " +"directions de la même quantité; la première puce en surbrillance pointe vers" +" le joueur. Les deux conservent un espacement de 16 unités d'angle, soit " +"22,5 degrés." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Copier le modèle de cuisson TH04" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Suivez le calcul de la bague de visée TH04" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Copier l'extrait d'assemblage TH04" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Copier le calcul de l'anneau visé lisible" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Haut de page" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Copier" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Copié" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Sélectionné" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Code copié dans le presse-papiers." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Code sélectionné. Utilisez votre clavier pour le copier." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "Pour REA sur GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Distance {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Frappez un cactus. Essayez une autre vitesse." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Espace ou saut ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Rejouer" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Jouer" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Pause" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Appuyez sur Lecture, puis sautez par-dessus le cactus." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Frappez un cactus. Appuyez à nouveau sur Lecture ou modifiez la vitesse et " +"redémarrez." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Courir. L'espace ou le saut efface un cactus." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Pause. Appuyez sur Lecture pour continuer." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Vitesse fixe: {speed}. L'espace ou le saut efface un cactus." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Vitesse fixe: {speed}. Appuyez sur Lecture pour l'essayer." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Règle récupérée: commencez à 6, puis augmentez vers 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Vitesse fixe: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Rejoué la règle récupérée. Les quatre valeurs correspondent à la " +"vérification contrôlée du jeu d'origine lorsqu'elles sont arrondies à trois " +"décimales." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"La rediffusion diffère des valeurs enregistrées du jeu original. Comparez la" +" règle de vitesse et les paramètres ci-dessus." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} secondes" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} secondes, bloc de temps {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Le calcul interactif n'est pas disponible dans ce navigateur. L'exemple " +"montre le code à 59 secondes." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Vérification…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} vérifications réussies (six cas de référence, à six et " +"huit chiffres)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "" +"Impossible d'exécuter les vérifications des références. Essaie encore." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Un analyste pense à un ordinateur" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Un chèque révèle un caractère" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"Le septième masque sélectionne uniquement la position 21 dans la grille " +"d'entrée six par six. Son code de caractère doit être égal à 55, donc le " +"caractère est 7. Les autres masques sélectionnent différentes positions et " +"donnent d'autres équations." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" +"Le septième chèque. Les étiquettes de cellule sont des positions d'entrée, " +"commençant à 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Masque codé: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Sauter 21 cellules. Sélectionnez 1. Sauter 14. Arrêtez à 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Une seule cellule contribue à cette somme" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "La position 21 dans le drapeau doit contenir 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Sélectionné: une cellule" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 masques donnent 26 équations." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Résolvez-les ensemble pour trouver le drapeau." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "Enquête sur le panoramique du son DX-Ball" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA fournit l'instruction, l'appelant et la preuve de lecture d'octets pour " +"une fonction DX-Ball. Une entrée de pile est multipliée par 1,5625, décalée " +"de 500, mise à l'échelle et convertie en entier. Le C maintenu est vérifié " +"dans 3 205 cas d'origine-x86 et une relecture séparée du compilateur de 63 " +"octets." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Pile" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "entrée x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "Entier" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "retour" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Fonction reconstruite" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "C reconstruit" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Appel de collision" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Code original" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "comparaison" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3 205 tests" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Build VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 octets égaux" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "Écoulement d'enquête de REA" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Posez une question sur une cible locale. REA inspecte et trace via des " +"adaptateurs d'analyse locaux, renvoie des preuves et prend en charge les " +"questions de suivi pendant que votre agent explique, implémente et teste." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Demander" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Agent + cible locale" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "App / fichier / navigateur" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Inspecter et tracer" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Lire les preuves" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Code / références /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "inconnues" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Appliquer" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Votre agent" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Expliquer / créer / tester" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Outils d’analyse" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Adaptateurs locaux" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Question suivante" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: espacement et visée d'un anneau de balles" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Un tour complet dans le sens des aiguilles d'une montre comporte 256 unités " +"d'angle. Seize balles commencent aux angles zéro, seize, trente-deux, " +"jusqu'à 240. L'ajout d'un exemple de direction de joueur de quarante tourne " +"les seize directions ensemble; la première puce pointe vers le joueur. La " +"rotation du modèle est nulle." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Anneau fixe" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Première balle: angle 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Bague visée" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Première balle: direction du joueur" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Centre" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Joueur" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Même espacement: 256 ÷ 16 = 16 unités d'angle = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Études de cas" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Démarrer" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Guides" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Code source" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Licence MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Rejoindre la communauté" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Nous suivre sur X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * source de script sélectionnée" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Code source" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Sortie attendue du formateur" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Instructions" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Appelant" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Constantes" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Fonction C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Bouton" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "API de préchargement" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "CIB" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSV fichier" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Votre clic" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Demande capturée" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Exporter le script" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "Résultat de REA * résumé.extrait de la CIB" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "Extrait d'instruction REA · 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "Extrait de l'appelant REA · 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "Résultats d'octets REA * interprétés comme des doubles little-endian" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Extrait C · récupéré" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Voir comment fonctionne REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Guide d’installation" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Vitrines →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Paramètres sélectionnés à partir du script inspecté" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Résumé lisible du gestionnaire %" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * instructions d'origine sélectionnées" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "Identifiants de l'opérateur * Source de Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Suivez @ reatools sur X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → agent · résultats sélectionnés" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → méthodes et appelants de l'agent ·" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * Java décompilé sélectionné" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Résumé lisible * interprétation de l'agent" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * Générez OTP, corps complet" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Télécharger Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Télécharger le fournisseur d'analyse Android" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → agent · résultats sélectionnés" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → agent * instructions sélectionnées" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Agent → REA * lire_octets" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → agent * septième entrées" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Fichier exécutable d'origine * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Télécharger le défi original" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Télécharger le solveur" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA résultat * extrait de pseudocode" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agent → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → extrait d'instructions de l'agent ·" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → extrait de l'agent * appelant" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Agent → REA * deux {ph0} demandes" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "Résultats des octets REA * décodés en doubles" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Commencez par votre propre cible" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Génération de code" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Règle récupérée" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Horloge réglable" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Binaire" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Vérification du code" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Équations" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "C'est vrai!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Exécutable" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "Résultats de la REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "C Récupéré" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Validation" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Application packagée" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "API exposée" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "Enveloppes IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Presse-papiers" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Code de DOS d'origine" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "Instructions pour le modèle REA" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Calcul de l'angle" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Anneau de balle" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "API de page exposée" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Appel IPC du moteur de rendu" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Envoyé au presse-papiers du système" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Enregistré localement par Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Entrée de démarque" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Sortie de l'analyseur structuré * extrait" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Analysez votre propre application" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → agent * champs sélectionnés" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agent → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → extrait d'instructions de l'agent ·" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Même fonction résultat · extrait de but" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "C++maintenu correspondant" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Macro annulaire * Branche TH04, extrait" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Angle et vélocité · extrait de la source" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Appuyez sur % pour voir ce qui arrive à 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% de 200 est égal à 20. Appuyez sur = pour l'ajouter." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "" +"Pour la multiplication, 10 devient 0,1. Appuyez sur = pour multiplier." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"La traduction est en cours de mise à jour. Lisez cette page en anglais pour " +"l'instant." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour analyser {ph3} et expliquez comment il " +"exporte les données. Affichez les emplacements de code et de source " +"pertinents.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installe REA et connecte-le à cet agent de programmation " +"avec {ph3}. Présente-moi d’abord les changements prévus et attends mon " +"accord. Vérifie ensuite l’installation.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}Télécharger {ph3} dans un nouveau dossier d'exemple et " +"décompressez-le. Utilisez REA pour savoir ce qui se passe lorsque je clique " +"sur Exporter des notes. Montrer où {ph4} est écrit, les champs qu'il " +"contient, ainsi que les fichiers et lignes pertinents.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installe REA et connecte-le à cet agent de programmation " +"avec {ph3}. Présente-moi d’abord les changements prévus et attends mon " +"accord. Vérifie ensuite l’installation.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installe REA et connecte-le à cet agent de programmation " +"avec {ph3}. Présente-moi d’abord les changements prévus et attends mon " +"accord. Vérifie ensuite l’installation.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisez REA pour inspecter {ph3}. Clonez ce site pour " +"moi.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Reconstruction · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"Avec {ph0} et npm disponibles, exécutez la configuration, choisissez votre " +"agent de codage et examinez les modifications proposées." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Un exemple fourni · {ph0} et npm · Votre agent de codage" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Utilisez un agent de codage tel que Claude Code, Codex ou Cursor. Vous aurez" +" besoin de {ph0} et npm; le {ph1}le guide d'installation répertorie les " +"versions prises en charge{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Page Suivante · {ph1}{ph2}{ph3}Exporter des notes{ph4}{ph5}Appels " +"{ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Pont · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Envoie un message nommé au " +"processus principal.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Gestionnaire · {ph1}{ph2}{ph3}Écrire {ph4}{ph5}{ph6}Appelle le " +"formateur dans {ph7} et écrit le fichier.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * lignes 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Prédire le CSV pour une note avec l'id 1 et le titre {ph3}. " +"Ensuite, exécutez l'exemple {ph4} formateur avec {ph5} pour le vérifier. " +"Afficher la prédiction et la sortie réelle.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Le titre reste dans un champ entre guillemets; chaque guillemet est doublé. " +"Cela vérifie le formateur directement avec {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV formateur" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Vous aurez besoin de {ph0} 22 (22.19+), 24 (24.11+) ou 26+. Le modèle npm " +"est livré avec {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "Vous n'avez pas {ph0}, ou vous n'êtes pas sûr?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Si {ph0} imprime v22. 19+, v24. 11 + ou v26+, vous êtes prêt. S'il imprime " +"une ancienne version ou \"non reconnu\" / \"commande introuvable\", " +"installez {ph1} 24 LITRES:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * exemple d'extrait de source" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Ouvrez l'exemple{ph1} · {ph2}Télécharger {ph3}{ph4} · {ph5}Télécharger " +"{ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * exemple de source" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Téléchargez l'exemple et décompressez-le. L'archive contient l'intégralité " +"{ph0} dossier. Analysez-le avec {ph1} et npm; Electron n'est pas nécessaire " +"pour cet exemple." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Première fois, ou manquant {ph0} ou un agent de codage? {ph1}Suivez le guide" +" de configuration étape par étape →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "" +"Par exemple : {ph0}pourquoi la calculatrice donne-t-elle 220 pour {ph1} " +"?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisation REA pour inspecter Windows Calculatrice. " +"Pourquoi {ph3} donne-t-il 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * chargé {ph0} * lignes sélectionnées" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Nous avons vu pourquoi {ph0}{ph1} donne 220.{ph2} Récupérons maintenant les " +"règles pour + et×, et essayons-les." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA lit {ph1}{ph2}{ph3}Il lance l'application " +"Calculatrice{ph4}{ph5}Le code s'ouvre {ph6}. L'agent sélectionne ensuite la " +"bibliothèque de l'application installée.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilisation REA pour inspecter aegis-v3.4.{ph3}. Découvrez " +"comment il génère le code de connexion à six chiffres, expliquez pourquoi il" +" change toutes les 30 secondes et reconstruisez une petite démo où je peux " +"changer l'heure.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "affichage des onglets/{ph0} * Membre de l'API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "affichage des onglets/{ph0} * Assistant IPC" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "principale/{ph0} * aide-manutentionnaire" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "principale/{ph0} * récepteur de presse-papiers" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Reconstruction * dino-vitesse · j" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Avec Node.js et npm disponibles, exécutez la configuration, choisissez votre" +#~ " agent de codage et examinez les modifications proposées." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Un exemple fourni · Node.js et npm · Votre agent de codage" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Utilisez un agent de codage tel que Claude Code, Codex ou Cursor. Vous aurez" +#~ " besoin de Node.js et npm; le {ph0}le guide d'installation répertorie les " +#~ "versions prises en charge{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Moteur de rendu de page·.j{ph1}{ph2}Exporter des notes{ph3}{ph4}Appels " +#~ "{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Pont * précharge.j{ph1}{ph2}{ph3}{ph4}{ph5}Envoie un message nommé au " +#~ "processus principal.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Gestionnaire * principal.j{ph1}{ph2}Écrivez des notes.fichier " +#~ "csv{ph3}{ph4}Appelle le formateur dans {ph5} et écrit le fichier.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Prédire le CSV pour une note avec l'id 1 et le titre " +#~ "Bonjour,\"REA\". Ensuite, exécutez le formateur toCsv de l'exemple avec " +#~ "Node.js pour le vérifier. Afficher la prédiction et la sortie " +#~ "réelle.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Le titre reste dans un champ entre guillemets; chaque guillemet est doublé. " +#~ "Cela vérifie le formateur directement avec Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV formateur" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Vous aurez besoin de Node.js 22 (22.19+), 24 (24.11+) ou 26+. npm est livré " +#~ "avec Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "Vous n'avez pas Node.js, ou vous n'êtes pas sûr?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Si {ph0} imprime v22. 19+, v24. 11 + ou v26+, vous êtes prêt. S'il imprime " +#~ "une ancienne version ou \"non reconnu\" / \"commande introuvable\", " +#~ "installez Node.js 24 LITRES:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Ouvrez l'exemple{ph1} · {ph2}Télécharger l'exportation.j{ph3} · " +#~ "{ph4}Télécharger les notes.au format json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Téléchargez l'exemple et décompressez-le. L'archive contient l'intégralité " +#~ "{ph0} dossier. Analysez-le avec Node.js et npm; Electron n'est pas " +#~ "nécessaire pour cet exemple." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Première fois, ou manquant Node.js ou un agent de codage? {ph0}Suivez le " +#~ "guide de configuration étape par étape →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "" +#~ "Par exemple : {ph0}pourquoi la calculatrice donne-t-elle 220 pour 200 + 10% " +#~ "?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilisation REA pour inspecter Windows Calculatrice. " +#~ "Pourquoi 200 + 10% donne-t-il 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Nous avons vu pourquoi {ph0}200 + 10% donne 220.{ph1} Récupérons maintenant " +#~ "les règles pour + et×, et essayons-les." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA lit calc.exe{ph1}{ph2}Il lance l'application " +#~ "Calculatrice{ph3}{ph4}Le code s'ouvre {ph5}. L'agent sélectionne ensuite la " +#~ "bibliothèque de l'application installée.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilisation REA pour inspecter aegis-v3.4.3.apk. Découvrez " +#~ "comment il génère le code de connexion à six chiffres, expliquez pourquoi il" +#~ " change toutes les 30 secondes et reconstruisez une petite démo où je peux " +#~ "changer l'heure.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "onglet afficher/précharger.membre de l'API js · " + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "onglet afficher/précharger.aide js * CIB" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "page d'accueil / index.assistant de gestion js · " + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "page d'accueil / index.récepteur de presse-papiers js · " + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "principale.js * lignes 8 à 12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "exporter.js * exemple d'extrait de source" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "moteur de rendu.js · exemple de source" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "précharge.js · exemple de source" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "principale.js · exemple de source" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * index chargé.js * lignes sélectionnées" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilisation REA pour analyser /absolute / path / to / app et" +#~ " expliquer comment il exporte les données. Affichez les emplacements de code" +#~ " et de source pertinents.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installer REA et connectez-le à cet agent de codage en " +#~ "utilisant npx rea-agents@dernière configuration. Montrez - moi le plan " +#~ "d'installation pour approbation, puis vérifiez " +#~ "l'installation.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Télécharger https://rea.tools/examples/notes-example.zip " +#~ "dans un nouveau dossier d'exemple et décompressez-le. Utilisation REA pour " +#~ "savoir ce qui se passe lorsque je clique sur Exporter des notes. Afficher où" +#~ " les notes.csv est écrit, quels champs il contient, ainsi que les fichiers " +#~ "et lignes pertinents.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installer REA et connectez-le à cet agent de codage en " +#~ "utilisant npx rea-agents@dernière configuration. Montrez - moi le plan " +#~ "d'installation pour approbation, puis vérifiez " +#~ "l'installation.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installer REA et connectez-le à cet agent de codage en " +#~ "utilisant npx rea-agents@dernière configuration. Montrez - moi le plan " +#~ "d'installation pour approbation, puis vérifiez " +#~ "l'installation.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilisation REA pour inspecter https://rea.tools/. Clonez ce" +#~ " site pour moi.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "référence[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "numéro 00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× échelle panoramique" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0} REA {ph1} {ph2}Désosser n'importe quoi{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/id/messages.po b/website/locales/id/messages.po new file mode 100644 index 000000000..5f64183f9 --- /dev/null +++ b/website/locales/id/messages.po @@ -0,0 +1,13406 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Rumah{ph1} / Blog" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blog." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Pemikiran tentang rekayasa terbalik." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Rekonstruksi permainan{ph0}Esai" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "Revolusi industri dalam rekayasa terbalik" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"Apa yang diajarkan manual dan rekonstruksi TH08, TH095, dan TH04 kepada saya" +" tentang agen, verifikasi, dan pengetahuan yang digabungkan di seluruh " +"proyek." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Baca artikelnya" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Oleh N0zoM1z0 · 10 Oktober 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Atas" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "Blog REA-Pemikiran tentang Rekayasa Balik" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Pemikiran tentang rekayasa balik, berdasarkan pengalaman praktis dengan agen" +" REA dan AI." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-Cari tahu cara kerja perangkat lunak. Rekayasa balik dengan agen " +"pengkodean Anda." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Beranda REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Navigasi utama" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA di GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Gabung REA di Discord" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Ikuti REA di X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Rumah{ph1} / {ph2}Blog{ph3} / Rekonstruksi Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Essay * Rekonstruksi Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "Revolusi industri dalam rekayasa terbalik." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Oleh N0zoM1z0 · 10 Oktober 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Poin utama" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Berikan otonomi kepada agen atas penyelidikan.{ph1} Tetapkan tujuan dan" +" kriteria penerimaan yang jelas, lalu biarkan agen memutuskan apa yang akan " +"dicoba selanjutnya." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Gunakan repositori dan Git sebagai memori kerja.{ph1} Pertahankan " +"alasannya dengan kodenya. Titik pemeriksaan Git memungkinkan sesi berikutnya" +" berlanjut setelah percakapan berakhir." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Biarkan bukti memutuskan apa yang Anda klaim.{ph1} Penjelasan yang " +"meyakinkan masih perlu diuji. \"Tidak diketahui\" adalah jawaban yang valid " +"jika buktinya tidak lengkap." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Uji referensi verifikasi (oracle) juga.{ph1} Coba kasus yang harus " +"ditolak. Jika melewatkan bug, kunjungi kembali hasil sebelumnya yang " +"bergantung padanya." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Kita berada di masa-masa awal revolusi industri RE.{ph1} Metodenya " +"masih terbentuk. Ada banyak hal yang tersisa untuk dijelajahi." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Bagaimana pengalaman senyawa" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Arah manusia{ph1} * Tujuan dan kriteria penerimaan" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Otonomi" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Agen" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Pilih eksperimen.{ph0}Mengajukan hipotesis." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Verifikasi" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Acuan verifikasi" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Uji terhadap a{ph0}referensi konkret." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Repositori" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Memori kerja" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Kode, bukti,{ph0}cek dan pelajaran." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Ketidakcocokan{ph0}{ph1}Merevisi hipotesis{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Yang lebih baik{ph0}{ph1}titik awal{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Penggunaan kembali" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Lulus{ph1} * Simpan hasil dan buktinya" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Setiap proyek meninggalkan proyek berikutnya dengan titik awal yang lebih " +"baik. Itu termasuk memperbaiki pemeriksaan saat kami menemukan celah." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "Dalam artikel ini" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Agustus 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08: kelanjutan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Dua pendekatan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095: penggabungan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: lintas arsitektur{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}Dari tepat hingga dapat dibaca{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Pergeseran industri{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Apa yang menjadi mungkin{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Apa yang berubah pada Agustus 2026" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Sebelum pekerjaan ini, saya telah melakukan banyak rekayasa balik manual. " +"Saya akan memeriksa suatu fungsi sampai saya memiliki penjelasan, lalu " +"menguji penjelasan itu terhadap program. Melangkah lebih jauh berarti " +"menghabiskan lebih banyak waktu saya sendiri untuk acara berikutnya. Itu " +"juga berarti menyimpan gambaran yang semakin besar di kepala saya." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"Sebagian besar pekerjaan saya adalah pada permainan. Saya merekonstruksinya " +"sehingga perilakunya dapat dipahami dan akhirnya dibawa ke port perangkat " +"lunak atau mod. Itulah pengalaman di balik artikel ini. Metode ini dapat " +"berguna di tempat lain, tetapi setiap bidang perlu menetapkan apa yang dapat" +" diperiksa terhadap referensi yang andal." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"Pada Agustus 2026, saya mulai serius mengeksplorasi RE yang digerakkan oleh " +"agen. Saya ingin melihat seberapa jauh seorang agen dapat memperoleh akses " +"ke program dan alat pengembangan biasa. Rekonstruksi Touhou memberi saya " +"sebuah proyek besar untuk mencari tahu." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Kemajuan awal sangat mengejutkan. Penyelidikan bisa terus berjalan tanpa " +"saya memilih setiap langkah individu. Perbandingan yang gagal mungkin " +"mengirim agen ke penelepon lain. Itu bisa menulis diagnostik kecil dan " +"menggunakan hasilnya untuk memutuskan apa yang harus dicoba selanjutnya. " +"Memberikan kebebasan itu membuat perbedaan: Saya dapat memberikan lebih " +"banyak perhatian pada arah proyek dan apakah pemeriksaannya dapat dipercaya." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"Langkahnya menarik perhatian saya terlebih dahulu. Kemudian saya mulai " +"bertanya-tanya apa yang akan bertahan di luar proyek saat ini. Akankah " +"pertandingan berikutnya mendapat manfaat dari semua yang baru saja kita " +"pelajari?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: membangun pekerjaan manusia" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08 {ph1}, Malam yang Tidak Dapat Binasa, dimulai sebagai kelanjutan " +"dari {ph2} Rekonstruksi GensokyoClub{ph3}. Sumber publik mereka memberi saya" +" landasan yang kuat. Itu datang dengan pengetahuan tentang bangunan dan " +"sejarah kontribusi yang saya simpan dalam kelanjutannya." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"Riwayat yang diimpor berakhir di pos pemeriksaan publik 10 Agustus. " +"Kelanjutan independen saya dimulai pada 13 Agustus. Pada 19 Agustus, buku " +"besar mencatat sumber untuk semua 1.107 fungsi permainan yang " +"teridentifikasi." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Port rekonstruksi Linux yang dapat dimainkan dilakukan pada 24 Agustus, " +"kira-kira sebelas hari setelah kelanjutan dimulai. Edisi Web menyusul. Rilis" +" asli Linux 64-bit tiba pada 30 Agustus." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Yang mengejutkan saya adalah bahwa pekerjaan itu telah mencapai program yang" +" dapat dijalankan oleh orang-orang. Untuk sampai ke sana diperlukan masalah-" +"masalah berikut di luar fungsi individu. Bahkan ketika dua fungsi terlihat " +"benar secara terpisah, mereka dapat secara tidak sengaja menggunakan salinan" +" status terpisah yang seharusnya dibagikan." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Ini membuat pemeriksaan referensi menjadi pusat pekerjaan. Saya menyebutnya " +"mereka {ph0}referensi verifikasi (orakel){ph1}. Perbandingan kode dapat " +"memberi tahu kita apakah fungsi yang direkonstruksi mereproduksi instruksi " +"asli. Pemeriksaan runtime dapat memberi tahu kami apakah rute yang " +"dijalankan mencapai status yang diharapkan. Agen mengusulkan penjelasan dan " +"mengujinya; ketidakcocokan memberinya sesuatu yang spesifik untuk " +"diselidiki." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Pencocokan tepat dengan konstanta yang salah" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Referensi verifikasi (oracle) adalah perangkat lunak yang ditulis seseorang." +" TH08 memberi saya pengingat yang jelas tentang seberapa banyak yang dapat " +"bergantung pada perangkat lunak itu." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"Pada bulan September, bug yang dilaporkan oleh port Sakelar hilir " +"menyebabkan kembali ke pengumpulan otomatis item. Sumber yang direkonstruksi" +" memeriksa kekuatan pemain terhadap {ph0}. Yang asli digunakan {ph1}, ambang" +" batas daya maksimum." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"Daya normal adalah non-negatif, sehingga pemeriksaan daya yang " +"direkonstruksi secara efektif selalu terpenuhi. Di atas garis koleksi, game " +"dapat menarik item tanpa membutuhkan daya maksimum. Pengecualian lain dalam " +"kondisi itu benar. Konstanta yang satu ini mengubah perilakunya." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "" +"{ph0}Namun fungsi tersebut telah melewati perbandingan yang tepat.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Pembangunan kembali dapat menempatkan konstanta di alamat yang berbeda. Alat" +" perbandingan memperhitungkannya dengan menyesuaikan alamat dalam instruksi " +"yang dikompilasi sebelum membandingkannya dengan aslinya. Tapi itu tidak " +"pernah memeriksa nilai floating-point yang disimpan di alamat yang " +"direferensikan." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Itu meninggalkan lubang di cek. Itu bisa mengarahkan instruksi yang " +"direkonstruksi ke instruksi aslinya {ph0} sementara sumbernya masih " +"mengatakan {ph1}. Byte instruksi cocok. Sumbernya berarti sesuatu yang " +"berbeda." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"The {ph0}Perbaikan 2 September{ph1} mengoreksi sumber dan membuat " +"perbandingan memeriksa byte aktual konstanta yang direferensikan. A " +"{ph2}audit yang lebih luas{ph3} kemudian diperiksa 1.548 referensi konstanta" +" floating-point. Itu menemukan dua belas referensi yang salah di lima fungsi" +" yang diterima." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"Perbandingan sekarang memeriksa setiap konstanta floating-point tersebut. " +"Pengujiannya mencakup nilai yang sengaja salah untuk memastikannya ditolak. " +"Kami juga harus meninjau kembali hasil yang telah lolos dari pemeriksaan " +"yang lebih lemah." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}Referensi verifikasi (oracle) juga perlu direkonstruksi.{ph1} " +"Memperbaikinya adalah bagian dari memperbaiki permainan." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Itu penting ketika tim sebagian besar terdiri dari satu orang yang bekerja " +"dengan agen. Saya tidak dapat secara pribadi memeriksa setiap lini yang " +"mereka hasilkan, begitu banyak kepercayaan diri saya terletak pada " +"pemeriksaan mereka. Titik buta referensi verifikasi bersama (oracle) dapat " +"memengaruhi banyak penyelidikan sebelum saya menyadarinya. Saya harus " +"memahami apa yang sebenarnya diverifikasi oleh pemeriksa dan mengujinya " +"terhadap kasus-kasus yang seharusnya gagal." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"Saat pekerjaan berlanjut, pemeriksaan tersebut menjadi bagian dari " +"repositori. Begitu pula alasan perubahan sumber dan catatan yang " +"memungkinkan sesi selanjutnya dilanjutkan di tempat sesi sebelumnya " +"dihentikan. {ph0}Repositori kode sumber menjadi memori kerja proyek.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Batch yang berhasil memberi kami kode yang dipulihkan dan lingkungan " +"yang lebih baik untuk batch berikutnya.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Dua gagasan rekonstruksi yang berbeda" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub {ph0}README publik{ph1} membuat ketidaksetujuannya dengan jenis" +" pekerjaan ini menjadi eksplisit. Pemberitahuan tersebut mengumumkan bahwa " +"pengembangan lebih lanjut akan dilakukan secara pribadi hingga selesai. Satu" +" bagian berbunyi:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"Munculnya grifters (AI decompilations and ports) di ruang ini yang diambil " +"dari pekerjaan kami memberikan gambaran yang buruk untuk upaya dekompilasi " +"di masa mendatang…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"Pemberitahuan tersebut juga menjelaskan dampak psikologis pada pengelola. " +"Kebijakan kontribusi mereka mengecualikan permintaan tarik yang dihasilkan " +"terutama dengan AI. Mereka telah mencurahkan waktu luang mereka untuk " +"pekerjaan yang sulit, dan pekerjaan itu membantu memungkinkan kelanjutan " +"saya. Saya menghargai upaya di baliknya. Ketidaksepakatan yang ingin saya " +"diskusikan adalah tentang bagaimana rekonstruksi harus dilanjutkan dan " +"bagaimana kontribusi harus dinilai." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"Dalam alur kerja manual yang saya ketahui, mengembangkan pemahaman tentang " +"suatu fungsi dan merekonstruksinya biasanya jatuh ke tangan orang yang sama." +" Sebuah proyek sangat bergantung pada keahlian orang tersebut. Kepercayaan " +"pada kontributor menjadi penting karena begitu banyak alasan yang terjadi " +"saat mereka bekerja." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Proyek yang ada sudah menyimpan pengetahuan dalam sumber dan alat " +"pembuatannya. Apa yang berubah bagi saya adalah bahwa seorang agen dapat " +"menggunakan pengetahuan itu untuk melanjutkan penyelidikan berikutnya dengan" +" sendirinya." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"Dalam kelanjutan saya, saya memutuskan tujuan dan standar untuk menerima " +"suatu hasil. Agen memiliki kebebasan luas untuk menyelidiki. Rekonstruksi " +"yang diusulkan kemudian harus bertahan dari pemeriksaan yang relevan. Saya " +"ingin orang lain dapat memeriksa mengapa kami memilih implementasi, bahkan " +"jika agen melakukan sebagian besar pekerjaan." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Ini bisa menjadi transisi yang sulit. Kerja keras selama bertahun-tahun " +"dapat menjadi dasar bagi kelanjutan yang bergerak jauh lebih cepat. Itu " +"menimbulkan pertanyaan nyata tentang kredit. Ini juga mengubah apa yang " +"perlu diketahui pengelola sebelum menerima kontribusi." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"Analogi industri membantu saya memikirkan hal ini. Dalam sebuah kerajinan, " +"sebagian besar prosesnya bergantung pada keterampilan orang yang " +"melakukannya. Mesin berubah di mana keterampilan itu dibutuhkan. Seseorang " +"masih harus merancang prosesnya dan mengenali kapan hasilnya salah. " +"Komunitas yang berbeda dapat memilih seberapa banyak perubahan yang ingin " +"mereka lakukan." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Pilihan saya adalah melanjutkan secara terbuka, dengan karya warisan " +"dikreditkan dan sejarahnya dilestarikan. Saya ingin karya baru ini dapat " +"ditinjau kembali. Itu memberi kita cara untuk bertanya seberapa jauh " +"pendekatan ini bisa berjalan dan belajar dari apa yang salah di sepanjang " +"jalan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Sumber: GensokyoClub {ph0}Pemberitahuan README{ph1}, diperiksa pada 10 " +"Oktober 2026, dan {ph2}kebijakan kontribusi{ph3}. Kutipannya adalah kutipan " +"singkat. TH08 {ph4}kredit dan asalnya{ph5} catat batas kelanjutannya." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: pengalaman mulai bertambah" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095 {ph1}, Tembak Pelurunya, membuat nilai dari pengalaman itu lebih" +" mudah dilihat. Repositorinya dimulai pada 29 Agustus dengan nol fungsi game" +" yang dikonfirmasi di buku besar. Kami masih harus mempelajari permainannya." +" Tapi kami sudah tahu lebih banyak tentang bagaimana memulai rekonstruksi " +"dan bagaimana membuatnya tetap bergerak." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"Pada 7 September, semua 697 fungsi permainan yang teridentifikasi memiliki " +"sumber. Pada 8 September, 696 telah diterima sebagai perbandingan yang " +"tepat. Seluruh program terhubung pada 9 September. Rekonstruksi Windows i386" +" ditandai dapat dimainkan pada 10 September, sekitar dua belas hari setelah " +"inisialisasi." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Saya menemukan ini lebih menarik daripada kecepatan proyek pertama. Target " +"baru bisa mendapat manfaat dari pekerjaan yang dilakukan di game lain. " +"Pengalaman sudah ada dalam alat dan cara proyek diatur." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Misalnya, TH08 telah mengajari kami untuk memperhatikan program yang dirakit" +" lebih awal. Jika beberapa fungsi yang dipulihkan bergantung pada status " +"yang sama, perbandingannya yang terisolasi akan membuka pertanyaan penting. " +"Kita perlu melihat mereka bekerja sama. Pelajaran itu membantu membentuk " +"cara kami mendekati pembuatan seluruh program TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Pelajaran yang tetap ada di kepala saya berguna saat saya di sana. Setelah " +"menjadi pemeriksaan bahwa sesi lain dapat berjalan, itu dapat terus membantu" +" setelah saya melanjutkan. Agen berikutnya dapat menggunakan hasilnya tanpa " +"mengulangi penyelidikan yang mengarah ke sana." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Bug konstanta floating-point juga termasuk dalam memori itu. Ini menjelaskan" +" mengapa memeriksa referensi juga memerlukan pemeriksaan data di baliknya. " +"Menjaga koreksi itu dengan kode membantu proyek selanjutnya menghindari " +"mewarisi titik buta cek lama." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}Metode tersebut menjadi bagian dari materi awal untuk game " +"selanjutnya.{ph1} Kita dapat menghabiskan lebih banyak upaya proyek " +"berikutnya untuk apa yang sebenarnya baru tentang targetnya." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Manfaat yang sama tersedia untuk orang-orang yang bergabung nanti. Mereka " +"dapat memeriksa keputusan dan menjalankan kembali pemeriksaannya sebelum " +"melanjutkan pekerjaan. Mereka tidak perlu merekonstruksi seluruh sejarah " +"proyek untuk mengetahui mengapa sumbernya terlihat seperti itu." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: alur kerja bertahan dari arsitektur yang berbeda" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04 {ph1}, Lotus Land Story, membawa karya ini ke era DOS PC-98. " +"Targetnya sekarang adalah lingkungan 16-bit dengan empat program yang " +"bekerja sama. Memahami perilaku perangkat kerasnya membutuhkan bukti berbeda" +" dari game Windows. Sudah ada {ph2}ReC98 bekerja{ph3} memberi kami " +"pengetahuan dan sumber materi yang berharga di sini juga." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"Rekonstruksi DOS sekarang berfungsi. Dalam pengujian manual saya, saya " +"memainkan rute Normal lengkap melalui ujungnya dan memeriksa penyimpanan. " +"Pekerjaan saat ini adalah port 64-bit asli. Membuat versi DOS yang berfungsi" +" terlebih dahulu memberikan referensi pada port tersebut." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"Arsitekturnya mengubah apa yang perlu kami selidiki. Itu juga mengubah " +"kompiler dan runtime tempat kami memeriksa pekerjaan kami. Tetapi agen masih" +" bisa mengikuti pertanyaan sampai ke hasil dan membiarkan hasil itu memandu " +"percobaan berikutnya." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Pertimbangkan transisi dari gameplay ke akhir. Kita perlu mengetahui status " +"apa yang melintasi batas itu dan program mana yang bertanggung jawab untuk " +"itu. Itu adalah sesuatu yang dapat kami selidiki terhadap produk DOS. " +"Setelah bukti dan pemeriksaan tersedia, agen dapat mengerjakan pertanyaan " +"tersebut seperti yang dilakukan pada judul Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"Inilah sebabnya mengapa TH04 penting untuk argumen tersebut. Perubahan " +"platform yang substansial tidak memaksa kami untuk memulai kembali dengan " +"cara kerja yang baru. Arsitektur mendefinisikan masalahnya; alur kerja masih" +" memberi kami cara untuk menyelesaikannya." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Untuk port 64-bit, sekarang kita dapat memeriksa implementasi baru terhadap " +"perilaku yang sudah dipulihkan di DOS. Pengetahuan dari rekonstruksi memberi" +" pelabuhan sesuatu untuk dibangun." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Status proyek per 10 Oktober 2026: {ph0}Rekonstruksi DOS dan pengujian " +"manual{ph1} · {ph2}port 64-bit{ph3}. Pelabuhan masih dalam pengembangan." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Dari kode yang tepat hingga kode yang dapat dibaca" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Setelah rekonstruksi berhasil, saya ingin orang lain dapat memahaminya." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Bagi saya, perakitan dan offset mentah bisa terasa seperti teman lama. Saya " +"menyadari ini adalah definisi yang sedikit tidak biasa dari \" dapat " +"dibaca.\"Kebanyakan orang lebih suka mengikuti logika permainan tanpa " +"menyimpan tata letak memori yang dapat dieksekusi di kepala mereka." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"Di situlah tempatnya {ph0}rekonstruksi semantik{ph1} masuk. Bidang yang " +"dipulihkan mungkin masih diketahui terutama dari offset-nya. Kami mengikuti " +"bagaimana permainan menggunakannya sampai kami dapat menjelaskan perannya. " +"Kemudian kita bisa memberinya nama yang bermakna dan tipe yang sesuai dengan" +" buktinya. Kami menyimpan alasannya dengan sumbernya sehingga orang " +"berikutnya dapat melihat dari mana interpretasi itu berasal." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Ini menjadi sangat penting untuk port perangkat lunak. Alamat absolut " +"memberi tahu saya di mana sesuatu tinggal di executable lama. Ini memberikan" +" sedikit bantuan implementasi 64-bit dalam memutuskan objek mana yang harus " +"memiliki status tersebut. Untuk memindahkan perilaku dengan aman, kita perlu" +" memulihkan hubungan di balik akses memori lama." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "Urutan yang sekarang saya gunakan adalah:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Pulihkan garis dasar yang tepat.{ph1} Kompilasi potongan-potongan yang " +"direkonstruksi dengan kompiler sejarah. Bandingkan kode dan data yang " +"relevan dengan executable asli. Catat perbedaan yang belum terselesaikan " +"sehingga fase berikutnya memiliki titik awal yang jelas." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Bangun dan mainkan di platform aslinya.{ph1} Tautkan potongan-potongan " +"itu ke dalam program nyata menggunakan arsitektur dan kompiler asli. Latih " +"jalur gameplay yang penting. Di sinilah kita dapat menemukan masalah dengan " +"status bersama atau inisialisasi yang terlewatkan oleh perbandingan fungsi " +"terisolasi." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Rekonstruksi semantik terhadap kedua referensi tersebut.{ph1} Ambil " +"satu bagian yang koheren dari permainan pada satu waktu dan tentukan apa " +"arti sumber yang dipulihkan. Tingkatkan representasinya sambil " +"mempertahankan perbandingan yang tepat dan bangunan historis yang dapat " +"dimainkan." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Membuat pelabuhan modern.{ph1} Pindahkan perilaku yang sudah ada ke " +"lingkungan baru, seperti build 64-bit asli. Game platform asli yang " +"direkonstruksi tetap menjadi referensi untuk membandingkan bagaimana port " +"berperilaku." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"Build yang dapat dimainkan dari tahap kedua menjadi a {ph0}referensi " +"verifikasi kedua (oracle){ph1} selama yang ketiga. Referensi verifikasi " +"pertama (oracle) memeriksa apakah sumber kami yang diubah masih mereproduksi" +" kode dan data asli yang relevan. Pemeriksaan kedua bahwa program yang " +"direkonstruksi masih dibangun dan berperilaku dengan benar di sepanjang " +"jalur yang kita gunakan." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Mereka menangkap kesalahan yang berbeda. Perubahan tipe dapat mengubah " +"instruksi yang dihasilkan. Perubahan kepemilikan dapat membuat dua bagian " +"permainan menggunakan salinan status yang berbeda. Menjaga kedua pemeriksaan" +" tetap tersedia memberi agen kegagalan nyata untuk menyelidiki sebelum " +"melakukan refactor lebih lanjut." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Sebuah nama membutuhkan buktinya sendiri. Perbandingan yang tepat tidak " +"dapat memberi tahu kita apakah suatu bidang benar-benar berarti \"waktu " +"kekebalan.\"Kita harus menetapkan itu dari cara permainan menulis dan " +"menggunakannya. Jika artinya tetap tidak pasti, nama yang netral lebih " +"bermanfaat bagi pembaca berikutnya daripada tebakan yang percaya diri." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Kami mempelajari pesanan ini melalui proyek. TH08 sudah memiliki port yang " +"dapat dimainkan sebelum beberapa audit platform historisnya di kemudian " +"hari. Itu membuat cacat tertentu lebih sulit dilihat. The {ph0}Alur kerja " +"pabrik saat ini{ph1} menempatkan pembuatan platform asli terlebih dahulu, " +"sehingga pekerjaan semantik dapat menggunakannya sebagai referensi sebelum " +"porting dimulai." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}Rekonstruksi yang tepat memberi kita referensi. Rekonstruksi semantik " +"membuat pengetahuan yang dipulihkan dapat digunakan.{ph1} Sebuah port " +"kemudian dapat dibangun di atas keduanya." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Apa yang membuat ini menjadi pergeseran industri" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Proyek-proyek ini berubah di mana saya menghabiskan perhatian saya. Begitu " +"agen dapat meneruskan banyak penyelidikan, meningkatkan lingkungan kerja " +"mereka menjadi salah satu hal paling berguna yang dapat saya lakukan. Alat " +"yang lebih baik dapat membantu setiap fungsi selanjutnya yang " +"membutuhkannya." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"Otonomi penting di sini. Langkah selanjutnya yang berguna seringkali menjadi" +" jelas hanya setelah percobaan yang gagal. Seorang agen membutuhkan " +"kebebasan yang cukup untuk mengikuti hasil itu di tempat yang tidak terduga." +" Jika harus menunggu saya untuk menentukan setiap langkah, sebagian besar " +"pekerjaan tetap terkait dengan perhatian saya." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Saya berharap agen membuat hipotesis yang salah. Yang penting adalah apakah " +"kita bisa mengujinya dan belajar dari hasilnya. Pemeriksaan yang gagal akan " +"membantunya memahami kesalahan dengan cukup baik untuk mencoba lagi. Saya " +"masih harus memutuskan apakah bukti yang terkumpul mendukung pencapaian " +"proyek." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA memberi agen akses ke alat analisis. Pertanyaan tentang pemanggil fungsi" +" dapat langsung mengarah ke pemeriksaan pemanggil tersebut. Proyek " +"rekonstruksi memasok kompiler dan pemeriksaan referensinya sendiri. Agen " +"dapat menggunakannya untuk menguji sumber yang diusulkannya dan melihat di " +"mana penjelasannya bertahan." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"Bug TH08 menunjukkan mengapa pemeriksaan tersebut layak mendapat perhatian " +"teknik mereka sendiri. Ketika perbandingan yang sama digunakan di ratusan " +"fungsi, kesenjangan di dalamnya dapat menyebar lebih jauh daripada kesalahan" +" dalam satu implementasi. Menguji pemeriksa meningkatkan umpan balik yang " +"tersedia untuk semua pekerjaan selanjutnya." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"Analogi industri memiliki contoh sejarah yang berguna di sini. Boulton dan " +"Watt memperkenalkan {ph0}indikator mesin uap pada tahun 1796{ph1} untuk " +"membantu mengatur katup mesin. Versi rekaman melacak tekanan melalui langkah" +" piston. Itu membuat perilaku internal mesin tersedia untuk diperiksa. Alat " +"pembanding kami memiliki tujuan yang sama: alat tersebut memungkinkan kami " +"memeriksa apa yang dilakukan mesin saat kami memperbaikinya." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Kita berada pada tahap awal pergeseran industri ini.{ph1} Sebagian " +"besar infrastruktur masih belum matang. Agen dapat bergerak lebih cepat " +"daripada yang dirancang untuk didukung oleh pemeriksaan kami, jadi prosesnya" +" harus berkembang bersama mereka. Saat kami menemukan kerusakan pada alat " +"bersama, kami harus memperbaikinya dan meninjau kembali hasil yang " +"terpengaruh. Proyek berikutnya kemudian dapat mewarisi alat yang lebih kuat." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Ada juga batasan praktis untuk satu percakapan. Ini akan berakhir sebelum " +"rekonstruksi besar selesai. Repositori kode sumber harus memungkinkan sesi " +"lain untuk dilanjutkan tanpa kehilangan alasan keputusan terakhir." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"The {ph0}Pabrik Rekonstruksi Touhou{ph1} tumbuh dari kebutuhan itu. Ini " +"memberi proyek cara bersama untuk meneruskan pemeriksaan dan pelajaran " +"mereka. Bekerja pada satu permainan dapat meningkatkan kondisi awal untuk " +"permainan lainnya." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"Itulah yang membuat analogi industri bermakna bagi saya. Pengalaman mulai " +"menjadi bagian dari alat yang dapat digunakan orang lain. Meningkatkan alat " +"tersebut mengubah seberapa banyak orang berikutnya—atau agen " +"berikutnya—dapat menyelesaikannya." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Proyek-proyek yang sekarang dapat kita pertimbangkan" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Kecepatan itu penting karena mengubah keputusan untuk memulai. Sebuah " +"permainan bisa sangat menarik untuk direkayasa ulang dan masih menuntut " +"lebih banyak perhatian saya sendiri daripada yang bisa saya berikan secara " +"realistis. Banyak proyek akan tetap menjadi ide." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Sekarang saya dapat melihat cara untuk menjaga agar proyek semacam itu tetap" +" berjalan melalui penyelidikan berulang kali. Mendapatkan rekonstruksi yang " +"berfungsi membuat port perangkat lunak lebih praktis. Memulihkan semantik " +"yang dapat dibaca memudahkan orang lain untuk menjelajahi mod. Upaya yang " +"dilakukan untuk memahami permainan dapat terus membuahkan hasil setelah " +"versi pertama berjalan." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Saya sekarang melihat program yang tidak dikenal dan bertanya: {ph0}akses, " +"umpan balik, dan akumulasi pengetahuan apa yang memungkinkan agen " +"mengerjakan ini dengan andal?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Pertanyaan itu membuat saya mempertimbangkan proyek-proyek yang sebelumnya " +"saya tinggalkan sendirian. Masing-masing dapat meningkatkan cara kita " +"mendekati pendekatan berikutnya. Saya ingin terus mengeksplorasi seberapa " +"jauh hal itu dapat membawa kita." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Tonggak dan sumber proyek" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Tanggal tersebut menggambarkan pos pemeriksaan proyek yang direkam, " +"diperiksa terhadap riwayat GitHub publik pada 10 Oktober 2026. Waktu berlalu" +" adalah waktu kalender antara komit. Keberadaan sumber, perbandingan yang " +"tepat, build, dan hasil runtime masing-masing menyebutkan pencapaian yang " +"berbeda." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08 :{ph1} {ph2}13 Agustus lanjutan{ph3}, {ph4}Buku besar sumber 19 " +"Agustus{ph5}, {ph6}24 Agustus Pelabuhan Linux{ph7}, {ph8}Edisi Web 26 " +"Agustus{ph9}, dan {ph10}30 Agustus rilis Linux 64-bit{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} {ph2}Buku besar awal 29 Agustus{ph3}, {ph4}Buku besar " +"sumber 7 September{ph5}, {ph6}Perbandingan 8 September{ph7}, {ph8}Tautan 9 " +"September{ph9}, dan {ph10}10 September dapat dimainkan-buat rekor{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}Penyerahan 10 Oktober{ph3} merekam rekonstruksi DOS " +"yang berfungsi, pengujian rute Normal lengkap pengelola, dan fase 64-bit " +"saat ini." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} Koreksi referensi verifikasi TH08 (oracle) :{ph1} {ph2}bug pengumpulan" +" otomatis yang dilaporkan{ph3}, {ph4}perbaikan sumber dan perbandingan{ph5}," +" dan {ph6}audit konstan titik mengambang penuh{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Rekonstruksi semantik:{ph1} {ph2} Pedoman keterbacaan TH08{ph3} dan " +"{ph4}urutan fase Pabrik dan dua jalur validasi{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Sejarah industri:{ph1} {ph2}catatan indikator mesin uap Grup Museum " +"Sains{ph3} menjelaskan pengenalan tahun 1796 dan mekanisme pencatatan " +"tekanan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Metode:{ph1} pabrik {ph2}otonomi agen{ph3} dan {ph4}pengetahuan lintas-" +"permainan{ph5} dokumen mempertahankan prinsip dan pelajaran kerja." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}Lebih banyak artikel{ph1} · {ph2}Jelajahi investigasi TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Revolusi Industri Rekayasa Balik — REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 merefleksikan rekayasa balik manual, rekonstruksi Touhou dengan " +"agen AI, dan bagaimana pengetahuan menyatu di seluruh TH08, TH095, dan PC-98" +" TH04 ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Pengalaman yang dibawa antar proyek" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Esai rekonstruksi Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Rumah{ph1}{ph2}/{ph3}Lab kecepatan dinosaurus" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Periksa →" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Bangun kembali aturan kecepatan dinosaurus." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Untuk membuat ulang akselerasi game, pertama-tama temukan aturan yang " +"mengontrol kecepatannya. {ph0} REA mengembalikan skrip yang sedang " +"berjalan;{ph1} kami menggunakan aturannya untuk membuat mini-game ini dengan" +" {ph2}kecepatan yang dapat disesuaikan.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Mainkan dan ubah kecepatannya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Baca aturan yang dipulihkan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Periksa rekonstruksi{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Coba analisisnya{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Mainkan dan ubah kecepatannya" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Tekan Putar, lalu lompati kaktus. Gerakkan penggeser kecepatan untuk mencoba" +" permainan yang lebih lambat atau lebih cepat; itu beralih ke kecepatan " +"tetap. Pilih aturan yang dipulihkan untuk memulai dari 6 dan percepat lagi " +"secara bertahap." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Mainkan hasil rekonstruksi" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Main" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Lompat ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Mulai ulang" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Kecepatan" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Gunakan aturan akselerasi yang dipulihkan" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Aturan awal: mulai dari 6, lalu tingkatkan menjadi 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Gerakkan penggeser untuk mengatur kecepatan Anda sendiri. Ruang atau " +"Lompatan membersihkan kaktus." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Aktifkan JavaScript untuk memainkan rekonstruksi. Kode dan penjelasan di " +"atas tetap dapat dibaca." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Baca script REA kembali" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Kami memeriksa {ph0}edisi peramban turunan Chromium wayou{ph1} dengan REA . " +"Itu mengembalikan muatan yang dimuat {ph2}, termasuk cabang ini dalam fungsi" +" pembaruan game:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Pengaturannya adalah {ph0}, {ph1} dan {ph2}. Gim ini menjalankan cabang ini " +"pada pembaruan tanpa tabrakan." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Gunakan aturan yang sama di game baru" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Salin" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Mini-game menggunakan fungsi ini untuk akselerasi otomatis. Memindahkan " +"penggeser memberikan kecepatan tetap sebagai gantinya. Menggambar, fisika " +"lompat, dan pemeriksaan tabrakan persegi panjang adalah kode baru untuk game" +" pengajaran ini; simulasinya maju pada 60 pembaruan per detik." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}Unduh aturan kecepatan{ph1} · {ph2}Baca kode permainannya{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Periksa rekonstruksi" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Kami menyebut fungsi pembaruan game asli dengan rintangan dan penjadwalan " +"otomatis dinonaktifkan. Bandingkan kecepatan yang direkam tersebut dengan " +"pemutaran ulang aturan yang dipulihkan." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Pembaruan" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Game asli" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Aturan yang direkonstruksi" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Jalankan pemeriksaan kecepatan" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Nilai dibulatkan menjadi tiga desimal. Cabang memeriksa sebelum menambahkan," +" sehingga kenaikan terakhir dapat mengambil kecepatan tepat di atas 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Coba analisisnya sendiri" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Siapkan REA {ph1} dengan agen pengodean Anda." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Ikuti {ph0}langkah-langkah koneksi browser{ph1}, menggunakan {ph2} sebagai " +"URL halaman." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Berikan URL halaman dan titik akhir debugging lokal kepada agen Anda, lalu " +"salin perintah ini." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa game dinosaurus ini. Mengapa " +"menjadi lebih cepat? Tampilkan aturan kecepatan, lalu buat versi kecil " +"dengan kecepatan yang dapat disesuaikan.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Ajukan tindak lanjut: {ph0}\"Di mana ketinggian lompatan dihitung? Tambahkan" +" kontrol ketinggian lompatan ke versi baru.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Sumber: {ph0}kode kecepatan yang diperiksa{ph1}, Penulis Chromium. {ph2}Hak " +"cipta dan lisensi BSD{ph3}. REA 4.1.0 memeriksa edisi HTTP yang sedang " +"berjalan di Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Game Dinosaurus Chrome: Bangun Kembali Aturan Kecepatannya-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Baca aturan kecepatan permainan dinosaurus dengan REA, bangun kembali, lalu " +"ubah kecepatan dan mainkan." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Rekonstruksi kecepatan dinosaurus" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Mini-game dinosaurus. Gunakan tombol Lompat atau tekan Spasi saat permainan " +"difokuskan." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Salin aturan kecepatan yang direkonstruksi" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Salin prompt analisis dinosaurus" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Rumah{ph1} / FAQ" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "FAQ REA." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Penyiapan, pembaruan, analisis, dan pemecahan masalah." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Topik" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Penyiapan dan pembaruan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Analisis{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Pemecahan masalah{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Data dan berbagi{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Penyiapan dan pembaruan" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Bagaimana cara memasang REA?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Terminal * penyiapan agen" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Salin" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"Perintah penyiapan mendaftarkan koneksi MCP REA dan memasang skill analisis " +"yang sesuai. Setelah selesai, mulai ulang agen lalu berikan jalur file dan " +"pertanyaan. {ph0}Panduan penyiapan{ph1} menjelaskan kebutuhan awal dan " +"langkah analisis pertama." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Agen pengkodean mana yang dapat menggunakan REA ?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Agen apa pun yang mendukung server MCP lokal. Pengaturan termasuk Claude " +"Code , Desktop Claude, Codex , Cursor , Gemini CLI , Windsurf , Devin , " +"OpenCode , Antigravity , GitHub Copilot CLI , Command Code , Grok Build , " +"OMP , dan VS Code . Konektor Bot Grok ditambahkan dari obrolannya." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Hubungkan agen pengkodean Anda{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Bagaimana cara memperbarui REA ?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA sering dirilis, termasuk perbaikan bug. Jika Anda menginstal CLI dengan " +"npm :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Terminal * terpasang CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Ikuti perintah penyegaran penyiapan yang dicetak oleh pembaruan. Jika Anda " +"mengatur agen Anda melalui {ph0}, lari:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Terminal * pengaturan agen penyegaran" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Periksa perubahan dan mulai ulang agen. Koneksi REA menggunakan versi paket " +"tertentu, jadi jalankan penyiapan lagi agar agen memakai versi baru. Untuk " +"satu kali perintah CLI, tambahkan perintah setelah {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Apakah memasang keterampilan dari skills.sh cukup?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"Keterampilan tersebut memberikan instruksi penyelidikan agen Anda. Lari " +"{ph0} Pengaturan REA{ph1} untuk menghubungkan server MCP dan menginstal " +"keterampilan yang cocok, mulai ulang agen Anda sehingga dapat memanggil " +"alat." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Analisis" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "Apa yang dapat saya analisis dengan REA ?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Mulailah dengan jenis perangkat lunak yang Anda miliki:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Executable dan pustaka asli{ph1}: fungsi, perakitan, pseudocode, dan " +"referensi." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Aplikasi JavaScript dan Electron{ph1}: modul, impor, IPC, dan lokasi " +"sumber." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "{ph0}Halaman browser{ph1}: skrip, permintaan, dan pengamatan runtime." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA juga memiliki alur kerja untuk rakitan terkelola, APK Android, firmware," +" dan sumber daya yang dikemas. {ph0}Lihat studi kasus{ph1} untuk investigasi" +" yang berhasil." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Apakah saya memerlukan Hopper, Ghidra atau IDA ?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"Analisis mendalam terhadap program kode mesin menggunakan salah satunya. " +"Pemeriksaan JavaScript dan. NET statis bekerja dengan file yang disediakan " +"dan tidak memerlukan analisis program kode mesin mesin." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Hubungkan instalasi Ghidra atau IDA Anda yang sudah ada, atau biarkan setup " +"mendeteksi Hopper dan usulkan instalasi. Host dan target Anda menentukan " +"penyedia mana yang dapat digunakan. {ph0}Menyiapkan analisis program kode " +"mesin{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Dapatkah saya menggunakan REA tanpa agen pengkodean?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Ya. CLI menggunakan alur kerja analisis yang sama. Untuk aplikasi JavaScript" +" atau Electron lokal:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Terminal * analisis aplikasi statis" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Ganti jalur dengan folder aplikasi yang diekstraksi atau file ASAR. " +"{ph0}Gunakan CLI {ph1} untuk opsi instalasi." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "Kode apa yang dikembalikan REA?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"Analisis program native mengembalikan assembly dan pseudocode, beserta " +"pemanggilan fungsi, referensi, dan konstanta terkait. Analisis JavaScript " +"mengembalikan modul, hubungan antarmodul, dan lokasi dalam kode sumber." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Agen Anda menggunakan temuan ini untuk menjelaskan perilaku atau menulis dan" +" menguji implementasi. The {ph0} Perhitungan DX-Ball{ph1} dan {ph2}Pemeriksa" +" bendera KKP{ph3} tunjukkan bagaimana proses itu bekerja." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "Apa yang sebaiknya saya tanyakan kepada agen?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Berikan target lokal dan satu perilaku untuk diselidiki. Untuk aplikasi " +"JavaScript atau Electron:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Ganti jalur dengan target Anda. The {ph0}panduan{ph1} berikan petunjuk untuk" +" contoh asli, Electron, dan browser." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Pemecahan masalah" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Mengapa agen saya tidak dapat melihat alat REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Mulai ulang atau sambungkan kembali agen Anda setelah penyiapan. Periksa " +"pendaftaran REA-nya dengan {ph0}; untuk Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Terminal * periksa satu klien" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Ganti {ph0} dengan ID klien Anda, seperti {ph1} atau {ph2}. Jika laporan " +"menunjukkan pendaftaran yang hilang atau kedaluwarsa, jalankan penyiapan " +"untuk klien tersebut:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Terminal * perbaiki pengaturan satu klien" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Tinjau rencananya dan mulai ulang klien. Jika pendaftaran sehat tetapi alat " +"tetap tidak ada, periksa kesalahan koneksi MCP klien. {ph0}Lebih banyak " +"diagnostik pengaturan{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Apakah saya harus memulai Hopper terlebih dahulu?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA memulai Hopper saat operasi membutuhkannya. Pada macOS, selesaikan " +"pilihan mode demo atau aktivasi lisensi yang dijalankan pertama kali sebelum" +" analisis tanpa pengawasan. {ph0}Lihat penyiapan penyedia asli{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Apa yang harus saya lakukan jika menemukan bug?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Perbarui REA {ph1}, mulai ulang agen Anda dan coba lagi tugas yang " +"sama. Rilis terbaru mungkin sudah memperbaiki masalah." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Jika terus berlanjut, {ph0}buka masalah{ph1} dengan versi REA Anda, sistem " +"operasi, jenis target, langkah-langkah untuk mereproduksi, dan keluaran " +"kesalahan. Sertakan nama penyedia saat masalah melibatkan analisis program " +"kode mesin." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Data dan berbagi" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "Apakah REA mengunggah aplikasi saya?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA menganalisis target pada mesin Anda. Agen Anda menerima hasilnya, dan " +"kebijakan data penyedia modelnya berlaku untuk hasil tersebut." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Bagaimana saya bisa membagikan contoh atau berkontribusi?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Punya contoh REA yang berguna? Kami ingin melihatnya. Bagikan target, " +"pertanyaan Anda, temuan, dan cara Anda memeriksanya dalam sebuah " +"{ph0}masalah{ph1} atau {ph2}tarik permintaan{ph3}. Kutipan kode pendek dan " +"angka membantu orang lain mengikuti penyelidikan." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Laporan bug, permintaan fitur, dokumentasi, dan peningkatan kode juga " +"diterima. Anda juga dapat mendiskusikan sebuah contoh di " +"{ph0}komunitas{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "FAQ REA: Penyiapan, Pembaruan, dan Pemecahan Masalah" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Jawaban atas pertanyaan umum REA: instalasi, pembaruan, alat analisis, agen " +"pengkodean, pemecahan masalah, dan contoh berbagi." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Pertanyaan yang sering diajukan tentang REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Salin perintah pengaturan REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Salin perintah pembaruan REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Perintah penyegaran penyiapan agen salin" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Salin perintah analisis REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Salin contoh analisis prompt" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Salin perintah diagnosis klien" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Salin perintah pengaturan cakupan" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Rumah{ph1} / Investigasi pertama Anda" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Cari tahu di mana{ph0}catatan yang diekspor pergi." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Gunakan REA untuk memeriksa aplikasi kecil, ikuti tombol catatan Ekspornya, " +"dan periksa sendiri satu detailnya." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "Dalam latihan ini" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Siapkan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Tanyakan tentang ekspor{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Ikuti jawabannya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Periksa prediksi{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Ajukan pertanyaan lain{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Hubungkan agen Anda ke REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Salin" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Atau jalankan perintah ini di terminal Anda:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Tinjau paket, setujui penyiapan, lalu mulai ulang agen Anda. Sudah " +"terhubung? Lanjutkan di bawah ini." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Tanyakan di mana CSV ditulis" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"Contohnya adalah aplikasi Electron enam file dengan {ph0}Ekspor catatan{ph1}" +" tombol. Agen Anda dapat memeriksa kodenya tanpa menginstal atau meluncurkan" +" Electron ." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Agen Anda mengunduh file dan memberikan folder yang belum dibongkar ke REA " +"untuk diperiksa." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Unduh contoh ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Jika agen Anda tidak dapat mengunduh file, buka zip arsip ini sendiri. " +"Berikan jalan ke {ph0} folder dan pertanyaan ekspor yang sama." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Ikuti jawabannya kembali ke kode" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Cari penjelasan singkat dengan referensi file dan baris:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Tombol tersebut mengirimkan {ph0} pesan. Proses utama memformat catatan " +"sebagai CSV dan menulis {ph1} di folder Unduhan pengguna. Kolomnya adalah " +"{ph2} dan {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Dari tombol ke penulis file" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"Analisis statis REA memasangkan pesan dengan penangannya. Tujuan dibaca dari" +" kode." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Jalur file, pemformat, dan panggilan tulis digabungkan dalam penangan ini. " +"Minta agen Anda untuk menunjukkan baris-baris ini jika jawabannya tidak." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}Lihat jejak kode lengkap dan hasil REA yang direkam{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Periksa prediksi" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Koma memisahkan kolom CSV. Apa yang terjadi jika judul catatan itu sendiri " +"berisi koma atau tanda petik?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Jalankan cek sendiri" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Buka terminal di bagian yang belum dibongkar {ph0} folder:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Perintah ini menggunakan shell dengan dukungan here-document, seperti Bash " +"atau Zsh. Agen Anda dapat menjalankan JavaScript yang sama di shell platform" +" Anda." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Ajukan pertanyaan lain" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Coba tindak lanjut dalam percakapan yang sama:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"Apa yang terjadi jika file tidak dapat ditulis? Ikuti kesalahan kembali ke " +"halaman." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Atau berikan agen Anda aplikasi Anda sendiri dan tanyakan tentang satu " +"tombol, file, atau perilaku." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Bagaimana Notion menyalin teks dan HTML{ph1}{ph2}Ikuti fitur papan klip" +" di aplikasi Electron yang dikemas.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Bagaimana DX-Ball menghitung pemosisian suara stereo{ph1}{ph2}Baca " +"instruksi asli dan cek rekonstruksi.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Memecahkan masalah penyiapan atau analisis{ph1}{ph2}Perbarui REA dan " +"periksa koneksi jika Anda macet.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Investigasi Rekayasa Balik Pertama Anda-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Coba REA di aplikasi Catatan kecil. Siapkan agen Anda, tanyakan ke mana " +"perginya catatan yang diekspor, dan periksa formatter CSV dengan judul " +"sampel." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "Investigasi REA pertama Anda" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Salin prompt instalasi REA" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Salin perintah pengaturan" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Salin Catatan penyelidikan prompt" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Salin prompt pemeriksaan CSV" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Salin perintah pemeriksaan formatter" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Rumah{ph1} / Memulai" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Siapkan REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Hubungkan REA ke agen pengkodean Anda, atau periksa aplikasi lokal dari " +"terminal Anda." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Buka terminal dan periksa:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Terminal" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Salin" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows PowerShell" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Ketik Y jika diminta untuk menerima persyaratan. Tutup PowerShell, buka " +"lagi, lalu jalankan {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Jika PowerShell kemudian mengatakan {ph0}\"menjalankan skrip dinonaktifkan " +"pada sistem ini\"{ph1} saat Anda berlari {ph2}, jalankan ini sekali dan coba" +" lagi:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Jika Anda menggunakan Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Kalau tidak,:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Tutup Terminal, buka lagi, lalu:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"Pemasang membutuhkan {ph0} dan {ph1} (pada Debian / Ubuntu: {ph2}). Tutup " +"terminal, buka lagi, lalu:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Distribusi Anda sendiri {ph0} paket seringkali lebih lama dari 22.19, jadi " +"periksa {ph1} jika Anda menggunakannya sebagai gantinya." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Lebih suka penginstal biasa? Unduh versi LTS dari {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Opsi pengaturan" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Hubungkan agen pengkodean Anda{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Gunakan CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Menyiapkan analisis program kode mesin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Mendapatkan bantuan{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Hubungkan agen pengkodean Anda" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Jalankan pengaturan untuk menghubungkan REA ke agen pengkodean Anda. Pilihan" +" klien termasuk Claude Code, Codex , Cursor , Gemini CLI , Windsurf , Grok " +"Build, dan klien MCP lain yang didukung. Konektor Bot Grok ditambahkan dari " +"obrolannya." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Baru mengenal agen pengkodean?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Agen pengkodean adalah asisten AI yang berfungsi di komputer Anda, bukan di " +"tab browser. Itu dapat membaca file dan menjalankan perintah, dan bertanya " +"sebelum membuat perubahan. REA memberikan alat rekayasa balik." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Jika Anda belum memilikinya, pilih salah satu, ikuti halaman pemasangannya " +"dan masuk:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code {ph2}{ph3} oleh Anthropic . Membutuhkan paket Claude " +"berbayar." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex {ph2}{ph3} oleh OpenAI . Masuk dengan akun ChatGPT Anda." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode {ph2}{ph3}, sumber terbuka. Hubungkan penyedia model " +"pilihan Anda." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Kemudian buka dan salin prompt di bawah ini ke dalamnya. Agen menjalankan " +"pengaturan REA dan menunjukkan kepada Anda rencananya sebelum mengubah apa " +"pun." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Atau jalankan pengaturan sendiri" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Bagaimana cara membuka terminal?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} buka menu Mulai, ketik {ph2}PowerShell{ph3} dan tekan " +"Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} pers {ph2} {ph3}, ketik {ph4}Terminal{ph5} dan tekan " +"Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "{ph0} Linux :{ph1} pers {ph2} {ph3} {ph4} di sebagian besar desktop." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Tempel perintah dengan {ph0} {ph1} (macOS : {ph2} {ph3}; Terminal Linux: " +"{ph4} {ph5} {ph6}), lalu tekan Enter." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Pilih klien Anda dan tinjau rencana penyiapan. REA menambahkan koneksi MCP " +"dan keterampilan investigasi pencocokan, menyimpan cadangan konfigurasi yang" +" ada. Itu bertanya sebelum menerapkan perubahan." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Mulai ulang klien Anda saat penyiapan selesai." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Bagaimana cara memulai ulang klien saya?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Aplikasi desktop{ph1} (Desktop Claude, Cursor, Windsurf, VS Code): " +"keluar dari aplikasi sepenuhnya, lalu buka lagi. Menutup jendela saja tidak " +"cukup. Pada pers macOS {ph2} {ph3}; pada Windows, keluar juga dari ikon baki" +" jika ada." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Agen terminal{ph1} ( Claude Code, Codex, Gemini CLI): keluar dari sesi " +"dan mulai lagi." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Berikan agen Anda jalur target dan pertanyaan spesifik. Untuk aplikasi " +"JavaScript atau Electron, Anda dapat memulai dengan:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Lihat ini {ph0} dan temukan cara mengekspor data. Tampilkan titik masuk, " +"panggilan, dan dependensi yang terlibat, dengan lokasi sumber untuk temuan " +"Anda." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Ganti jalur dengan target lokal Anda." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Bagaimana cara mendapatkan jalur lengkap folder?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} di File Explorer, klik kanan folder tersebut dan pilih " +"{ph2}Salin sebagai jalur{ph3}. Pada Windows 10, tahan Shift sambil mengklik " +"kanan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} di Finder, klik kanan folder, tahan Opsi, dan pilih " +"{ph2}Salin \" ... \" sebagai Nama Jalur{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Sistem apa pun:{ph1} seret folder ke jendela terminal dan jalurnya " +"muncul." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "Di terminal, beri tanda kutip di sekitar jalur yang berisi spasi." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Gunakan CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Analisis folder aplikasi JavaScript atau Electron atau arsip ASAR tanpa " +"menjalankan aplikasi:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Analisis aplikasi statis" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Ganti jalur dengan direktori aplikasi yang Anda ekstrak atau {ph0} berkas. " +"Pada Windows, jalur seperti {ph1} bekerja di sini." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Di mana saya menemukan aplikasi .berkas asar?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Aplikasi Electron biasanya menyimpannya dalam {ph0} folder:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (klik kanan aplikasi dan pilih {ph3}Tampilkan Isi " +"Paket{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} sering {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Beberapa aplikasi dipasang di tempat lain. Cari folder aplikasi untuk {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Hasilnya mengidentifikasi aplikasi, menunjukkan koneksi antar modul, dan " +"memberikan lokasi sumbernya. Koneksi yang tidak dapat diselesaikan oleh REA " +"ditandai dalam hasil." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Jika Anda ingin permanen {ph0} perintah di shell Anda:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Instal CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Lanjutkan dengan panduan aplikasi JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Menyiapkan analisis program kode mesin" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Program kode mesin memerlukan alat analisis lokal. Pilih dan konfigurasikan " +"salah satu di bawah ini, lalu berikan REA executable atau pustaka Anda." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Pilih alat: Ghidra, Hopper atau IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Gunakan Ghidra 12.1 yang ada.instalasi x dan JDK 64-bit 21 atau yang lebih " +"baru pada Linux atau macOS, pada x64 atau arm64. Instalasi Ghidra Anda " +"memerlukan dekompiler asli untuk arsitektur host Anda. Setel jalur sebelum " +"menjalankan penyiapan:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Hubungkan instalasi Ghidra Anda" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Koneksi Ghidra · macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Ganti kedua jalur dengan instalasi Anda yang sudah ada. Pengaturan " +"memeriksanya dan mencatat pengaturan yang valid untuk klien yang Anda pilih." +" Pada Linux arm64, Anda mungkin perlu membuat dekompiler asli Ghidra secara " +"terpisah." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Hubungkan Ghidra di Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 memiliki dukungan eksperimental hanya-baca untuk aplikasi PE x86" +" dan x64 asli dan DLL pada drive NTFS lokal tetap. Gunakan Ghidra 12.1 yang " +"ada.instalasi x dan JDK 64-bit 21 atau yang lebih baru:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Koneksi Ghidra · PowerShell Windows" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Ganti kedua jalur dengan penginstalan Anda, lalu tinjau paket penyiapan." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Hubungkan Hopper ke macOS atau Linux . Jalankan perintah pengaturan di atas;" +" itu mendeteksi instalasi yang ada atau menawarkan rencana instalasi untuk " +"persetujuan Anda." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"Pada macOS, selesaikan pilihan mode demo atau aktivasi lisensi Hopper yang " +"dijalankan pertama kali sebelum analisis tanpa pengawasan." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"Penyiapan IDA yang diverifikasi menggunakan Windows, dengan pendaftaran MCP " +"yang ada untuk GUI terlampir atau basis data tanpa kepala. Analisis tanpa " +"kepala Linux dan macOS tetap belum diverifikasi." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Hubungkan pendaftaran IDA MCP yang ada" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Jaga agar server upstream tetap berfungsi {ph0}, {ph1} dan opsional {ph2} " +"dalam file JSON. Yang sudah ada {ph3} objek dengan sebuah {ph4} entri juga " +"diterima. Arahkan REA ke file itu sebelum pengaturan:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "Koneksi IDA · PowerShell Windows" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"Profil terlampir menggunakan alat upstream legacy 1.4.0 dengan biner asli " +"yang sudah terbuka di IDA . Profil tanpa kepala menggunakan upstream " +"database-supervisor API dan pendaftaran dengan {ph0}; verifikasi nyata " +"mencakup pengawas IDA 9.3 Windows x64. Dokter memeriksa pendaftaran tanpa " +"memulai IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Berikan REA jalur asli yang dapat dieksekusi, dengan {ph0} dalam kueri CLI. " +"Untuk agen, sertakan {ph1} di lingkungan pendaftaran REA dan pilih IDA saat " +"membuka biner." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "Untuk pengaturan Ghidra yang ada, periksa fungsi dengan:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Analisis fungsi" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "Ganti {ph0} dengan nama fungsi atau alamat yang ingin Anda periksa." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "Bagaimana analisis sesi program kode mesin bekerja" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Setiap perintah CLI mengimpor dan menganalisis biner, lalu menutup sesinya. " +"Kueri MCP agen Anda menggunakan kembali biner yang diimpor saat sesi " +"tersebut dibuka." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Ikuti contoh analisis program kode mesin{ph1} untuk melihat bagaimana " +"hasil fungsi mengarah ke perhitungan yang dipulihkan." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Mendapatkan bantuan" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Jika agen Anda tidak melihat REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Mulai ulang atau sambungkan kembali klien setelah pengaturan. Periksa " +"koneksi REA-nya dengan {ph0}; untuk Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Periksa satu klien" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Jika penyedia membutuhkan perhatian" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Periksa penyedia yang Anda gunakan. Untuk Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Periksa satu penyedia" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" +"Laporan tersebut memberikan pemeriksaan yang gagal dan langkah berikutnya " +"yang disarankan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} FAQ REA{ph1}{ph2}Jawaban cepat tentang pembaruan, agen, dan " +"analisis.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Pilih panduan investigasi{ph1}{ph2}Contoh yang berfungsi untuk biner, " +"aplikasi Electron, dan browser.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Masalah GitHub{ph1}{ph2}Laporkan masalah dengan perintah dan " +"diagnostik.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} Komunitas REA{ph1}{ph2}Pertanyaan, investigasi, dan pekerjaan yang " +"sedang berjalan.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Instal REA dan Siapkan Agen Pengkodean Anda" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Hubungkan REA ke agen pengkodean Anda atau periksa aplikasi JavaScript atau " +"Electron lokal dari terminal. Penyiapan, pertanyaan pertama, dan panduan " +"penyedia asli." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Salin pemeriksaan versi Node.js" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Salin perintah instalasi Node.js untuk Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Salin perintah kebijakan eksekusi PowerShell" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Salin perintah instalasi Homebrew Node.js" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Salin perintah instalasi fnm untuk macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Salin perintah Node.js 24 untuk macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Salin perintah instalasi fnm untuk Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Salin perintah Node.js 24 untuk Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "Panduan memulai REA" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Salin prompt instalasi REA" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Salin perintah penyiapan agen" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Salin perintah analisis JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Salin perintah instalasi CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Salin koneksi ghidra * macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Salin koneksi Ghidra untuk PowerShell Windows" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Salin koneksi IDA untuk PowerShell Windows" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Salin perintah analisis fungsi asli" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Salin perintah diagnosis klien" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Salin perintah diagnosis penyedia" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Rumah{ph1} / {ph2}Panduan{ph3} / Pengamatan browser" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Lihat apa yang terjadi{ph0}saat Anda mengklik." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Gunakan aplikasi browser kecil untuk menghubungkan tindakan, permintaan " +"jaringannya, dan JavaScript yang membuat unduhan." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "Dalam panduan ini" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Contohnya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Buka browser{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Tanyakan pada agen Anda{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Tangkap dari CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Baca permintaan dan skrip{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Apa yang terjadi saat Anda mengklik Ekspor?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"The {ph0}Contoh peramban catatan{ph1} memiliki {ph2}Ekspor catatan{ph3} " +"tombol. Mengkliknya akan memuat {ph4}, memformat dua catatan sebagai CSV, " +"dan memulai pengunduhan." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Dari klik ke unduhan CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * Kamu{ph1}{ph2}Klik Ekspor catatan{ph3}{ph4}Lakukan tindakan di " +"browser Anda saat pengambilan sedang berjalan.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA {ph1}{ph2}Catat permintaannya{ph3}{ph4}Tangkap URL permintaan," +" status respons, dan struktur JSON dari halaman yang dipilih.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * Agen Anda{ph1}{ph2}Baca kode ekspor{ph3}{ph4}Hubungkan permintaan " +"yang diamati ke {ph5} dalam {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Mulai pengambilan sebelum mengklik Ekspor catatan." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Buka Chrome dengan debugging jarak jauh" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Buka contoh Catatan yang dihosting dengan profil browser terpisah dan port " +"debugging lokal. Di Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Mulai browser contoh" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Salin" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Gunakan jalur eksekusi browser yang Anda instal di macOS atau Windows . Anda" +" dapat mengganti URL halaman dengan halaman lain yang ingin Anda periksa." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA terhubung ke browser yang ada ini. Anda tetap mengontrol halaman, " +"melakukan tindakan, dan menutup browser setelah selesai." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Minta agen Anda untuk menonton satu aksi" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa halaman ini saat saya mengklik " +"Ekspor catatan. Permintaan apa yang dibuatnya, dan bagaimana CSV " +"dibuat?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Contoh prompt. Berikan agen Anda titik akhir debugging, {ph0}, dan URL " +"halaman. Biarkan mulai menangkap sebelum Anda mengklik." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Agen Anda menemukan target halaman, memulai jendela observasi, dan membaca " +"bukti yang dihasilkan. Itu kemudian dapat memeriksa skrip di balik ekspor." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Atau tangkap dari terminal" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Temukan ID target halaman:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Temukan halamannya" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Pilih target dengan URL contoh Catatan. Ganti {ph0} di bawah ini dengan ID -" +" nya, lalu jalankan:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Abadikan sepuluh detik berikutnya" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Biarkan perintah terhubung selama beberapa detik, lalu klik {ph0}Ekspor " +"catatan{ph1} pada browser tersebut. Hasilnya tiba setelah jendela observasi " +"berakhir." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Hasil yang diambil mencakup halaman yang dipilih, aktivitas jaringan selama " +"jendela tersebut, dan bentuk respons JSON. Permintaan sebelumnya berada di " +"luar tangkapan ini." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Baca skrip permintaan dan ekspor" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Direkam dengan REA 4.1.0 pada contoh Catatan lokal" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Fakta yang ditangkap" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Nilai" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Permintaan" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Tanggapan" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Inisiator permintaan" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * naskah" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Struktur respons" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} dengan {ph1} dan {ph2} bidang" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Baca skrip yang dimuat" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"Permintaan mengidentifikasi sumber data, dan catatan REA {ph0} sebagai " +"inisiatornya. Baca sumber skrip yang diambil untuk melihat bagaimana data " +"digunakan:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"Unduhan dibuat di halaman menggunakan respons JSON. Langkah pemformatan CSV " +"berasal dari skrip; pengambilan jaringan menetapkan bahwa klik ini diminta " +"{ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Temukan skrip yang meminta {ph0}. Bagaimana cara menghindari judul yang " +"mengandung koma atau tanda kutip?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Untuk aplikasi JavaScript atau Electron yang diinstal, lanjutkan dengan " +"{ph0}alur kerja aplikasi{ph1} untuk mengikuti file dan batasan proses." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Analisis Peramban dan Jaringan-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Amati ekspor Catatan dengan REA: pilih halaman browser, tangkap klik, " +"periksa permintaan, dan ikuti skrip ekspor." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Pengamatan browser" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Salin mulai browser contoh" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Salin contoh prompt" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Salin temukan halaman" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Salin tangkap sepuluh detik berikutnya" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Salin baca skrip yang dimuat" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Rumah{ph1} / Panduan" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "Panduan REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Analisis fungsi asli, ekspor Electron, atau permintaan browser. Setiap " +"panduan menyertakan prompt, kode, dan hasil." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Investigasi pertama" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Siapkan REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Hubungkan agen pengkodean Anda atau gunakan REA dari terminal." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Mulai dengan REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Program kode mesin" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Pulihkan perhitungan posisi suara kiri / kanan" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Mulailah dengan game Windows yang dapat dieksekusi. Periksa instruksi, ikuti" +" penelepon, baca konstanta numerik, dan periksa C yang dipulihkan." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Analisis panduan program kode mesin" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Ikuti ekspor CSV" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Aplikasi Catatan kecil menyebarkan satu fitur ke penyaji, pramuat, dan " +"proses utama. Gunakan REA untuk menghubungkan API, saluran IPC, dan penulis " +"file." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "Panduan JavaScript & Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Untuk aplikasi paket yang lebih besar, ikuti {ph0} Jembatan papan klip " +"Notion{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Perilaku peramban" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Amati satu klik" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Buka contoh Catatan kerja, tangkap permintaan ekspor, dan temukan kode yang " +"mengubah responsnya menjadi unduhan." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Panduan pengamatan browser" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Panduan Rekayasa Terbalik-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Pelajari REA melalui contoh singkat yang berhasil: perhitungan asli, ekspor " +"Electron CSV, dan permintaan browser." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}Rumah{ph1} / {ph2}Panduan{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Lacak sebuah Electron {ph0} Ekspor CSV." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Ikuti satu klik tombol dari page API, melalui Electron IPC, ke CSV file " +"writer." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "Dalam panduan ini" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Contohnya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Tanyakan pada agen Anda{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Lacak kode ekspor{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Coba contohnya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Periksa penulis CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "Ke mana perginya \"Catatan ekspor\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Panduan ini menggunakan aplikasi Electron kecil. Mengklik {ph0}Ekspor " +"catatan{ph1} memanggil API di halaman, masuk ke proses utama, dan menulis " +"CSV . Perilaku tersebut tersebar di beberapa file." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "Ekspor CSV di seluruh proses Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Perender → {ph1}{ph2}{ph3}{ph4}{ph5}{ph6} memanggil API yang diekspos " +"oleh {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Antara proses{ph1}{ph2}{ph3}{ph4}{ph5}Preload memanggil saluran IPC: " +"pesan bernama ke proses utama.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Proses utama{ph1}{ph2}Penangan ekspor{ph3}{ph4}{ph5} menangani saluran " +"itu dan memanggil penulis CSV.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} memformat catatan → {ph1} menulis {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA cocok dengan panggilan IPC literal ke penangannya dan mengidentifikasi " +"API yang terbuka. Jalur disimpulkan dari kode; tangkapan waktu proses dapat " +"memeriksa apa yang dijalankan." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Tanyakan tentang ekspor CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Hubungkan agen Anda ke REA {ph1} dan berikan direktori aplikasi atau " +"file ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Salin" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk menemukan apa yang terjadi ketika saya " +"mengekspor catatan di aplikasi ini. Di mana CSV dibuat?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "Contoh prompt. Sertakan jalur absolut ke folder aplikasi atau {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA membaca file aplikasi dan membuat peta titik masuk, modul, dan batas " +"proses. Agen Anda menggunakan peta tersebut untuk mempersempit penyelidikan " +"ke fitur ekspor." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Lacak kode ekspor" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "Halaman tersebut memanggil API kecil" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"Halaman mengetahui nama metode. Implementasinya hidup dalam preload, yang " +"memaparkannya ke penyaji." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"Catatan REA {ph0} dan saluran literal {ph1}. Ini memasangkan pemanggilan itu" +" dengan penangan pencocokan tunggal dalam proses utama." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"Membaca handler menjawab pertanyaan awal: {ph0} memformat catatan, dan " +"proses utama menulis {ph1} ke dalam folder Unduhan pengguna." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Direkam oleh REA 4.1.0 pada contoh yang dapat diunduh di bawah ini. Lokasi " +"sumber menyertai temuan API, saluran, dan penangan." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Analisis sendiri contohnya" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Unduh contoh ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Jelajahi enam file sumber" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Analisis aplikasi statis" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Ganti jalur dengan folder yang Anda buka ritsletingnya. Anda harus menemukan" +" satu saluran IPC dan satu pengendali yang cocok di {ph0}. Lokasi sumber ada" +" di {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Untuk aplikasi Anda sendiri, gunakan perintah yang sama dengan direktori " +"atau jalur ASAR. Agen dapat mengikuti string literal, nama API, atau saluran" +" IPC dengan alat penelusuran fitur REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Periksa penulis CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Ikuti {ph0} untuk pawangnya. Input mana yang mencapai penulis CSV, dan apa " +"yang terjadi jika penulisan file gagal?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Gunakan lokasi sumber untuk memeriksa detail tersebut. Nama saluran yang " +"dihitung dan penangan ambigu dapat tetap tidak terselesaikan; pengamatan " +"runtime memberi Anda cara lain untuk menyelidikinya." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Ikuti jembatan papan klip Notion{ph1} {ph2}Terapkan pendekatan yang " +"sama ke aplikasi Electron yang dikemas.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Amati ekspor browser{ph1}{ph2}Tangkap klik nyata dan lihat permintaan " +"mana yang dibuatnya.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Ikuti fungsi asli{ph1}{ph2}Lanjutkan ke biner saat fitur bergantung " +"pada kode asli.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "Analisis JavaScript dan Electron — REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Lacak ekspor Catatan CSV melalui perender API, pramuat, dan penangan IPC " +"dengan REA . Termasuk file contoh yang dapat diunduh dan hasil analisis yang" +" diverifikasi." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Salin contoh prompt" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Salin analisis aplikasi statis" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "{ph0}Rumah{ph1} / {ph2}Panduan{ph3} / Analisis program kode mesin" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "Recover DX-Ball{ph0}perhitungan posisi suara kiri/kanan." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Periksa instruksi asli, identifikasi input dan konstanta, lalu periksa C " +"yang dipulihkan." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "Dalam panduan ini" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Contohnya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Tanyakan pada agen Anda{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Baca hasil REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Pulihkan dan periksa{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Gunakan biner Anda sendiri{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Hitung posisi suara stereo kiri / kanan" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"Di DX-Ball, pukulan keras memasok posisi layar horizontal. Kode suara " +"mengubahnya menjadi nilai panning kiri/kanan." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"Fungsi awal, {ph0}, memiliki hasil dekompiler singkat: panggilan ke {ph1}. " +"REA juga mengembalikan instruksi dan peneleponnya, yang memberi agen cara " +"untuk menyelidiki aritmatika yang hilang." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Baru mengenal istilah ini?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Instruksi:{ph1} langkah-langkah yang dijalankan prosesor, ditampilkan " +"dalam bentuk yang dapat dibaca seperti {ph2} atau {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Hasil dekompiler / pseudocode:{ph1} upaya alat analisis untuk mengubah " +"instruksi kembali menjadi kode mirip C. Itu bisa kehilangan bagian, seperti " +"dalam contoh ini." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Penelepon:{ph1} sebuah fungsi yang memanggil yang satu ini. Ini " +"menunjukkan nilai mana yang diteruskan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Alamat:{ph1} lokasi dalam program, ditulis dalam heksadesimal, seperti " +"{ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Konstanta:{ph1} nomor tetap yang disimpan dalam program, dibaca sebagai" +" byte mentah dan diterjemahkan." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Tiga bukti, satu perhitungan" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * Instruksi{ph1}{ph2}Masukan bilangan bulat{ph3}{ph4}Pembacaan " +"tumpukan memasok nilai yang digunakan oleh instruksi floating-point.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * Penelepon{ph1}{ph2}Koordinat layar{ph3}{ph4}Penelepon yang dipukul" +" dengan batu bata lolos {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * Byte data{ph1}{ph2}Konstanta numerik{ph3}{ph4}Byte yang " +"direferensikan didekode ke {ph5}, {ph6} dan nilai skala.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA menyediakan instruksi, hubungan panggilan fungsi, dan byte. Agen " +"menafsirkannya bersama-sama." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Tanyakan tentang perilakunya" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Setelah {ph0}menghubungkan REA ke agen Anda{ph1} dan {ph2}menyiapkan alat " +"analisis program kode mesin{ph3}, berikan executable lokal dan pertanyaan:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Alat analisis mana yang harus saya gunakan?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA membutuhkan salah satunya untuk membaca program asli:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} (macOS atau Linux ): Pengaturan REA mendeteksi atau " +"menawarkan untuk menginstalnya. Di macOS, buka Hopper sekali dan pilih mode " +"demo atau aktifkan lisensi sebelum analisis pertama Anda." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} ( macOS atau Linux; eksperimental pada Windows): gratis, " +"tetapi membutuhkan Ghidra 12.1 yang sudah ada.instalasi x dan JDK 64-bit 21 " +"atau yang lebih baru." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA {ph1} ( Windows): untuk pengaturan IDA yang ada dengan pendaftaran" +" MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Lihat {ph0}Menyiapkan analisis program kode mesin{ph1} untuk langkah-" +"langkahnya." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Salin" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk menemukan cara DX-Ball menghitung " +"pemosisian suara stereo. Jelaskan perhitungannya dan tunjukkan " +"kodenya.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Contoh prompt. Berikan agen Anda jalur ke DX-Ball 1.07 lokal Anda yang dapat" +" dieksekusi. REA tidak menyertakan DX-Ball, jadi gunakan salinan Anda " +"sendiri, atau ajukan pertanyaan yang sama tentang program Windows kecil " +"lainnya yang Anda miliki." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Bagaimana cara mendapatkan path lengkap file?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} di File Explorer, klik kanan file tersebut dan pilih " +"{ph2}Salin sebagai jalur{ph3}. Pada Windows 10, tahan Shift sambil mengklik " +"kanan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} di Finder, klik kanan file, tahan Opsi, dan pilih " +"{ph2}Salin \" ... \" sebagai Nama Jalur{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Sistem apa pun:{ph1} seret file ke jendela terminal dan jalurnya " +"muncul." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Baca hasil REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Baca inputnya" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Instruksi memuat argumen integer dan mengubahnya menjadi aritmatika " +"floating-point. Ini adalah input yang tidak ada dari tampilan pseudocode " +"pertama." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Ikuti penelepon" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA mengidentifikasi penelepon yang terkena pukulan keras. Instruksi " +"sebelumnya mengalikan koordinat ubin dengan 30; menambahkan {ph0} (20) " +"memberikan posisi layar bata." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Baca konstanta yang dirujuk" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"Aritmatika mereferensikan alamat-alamat ini. Membaca byte memberikan nilai " +"aktual; urutan instruksi memberi tahu agen bagaimana mereka digunakan." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Tulis dan periksa fungsi yang dipulihkan" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"Dengan skala 1,0, posisi layar 0, 320, dan 640 dipetakan ke -500, 0, dan 500" +" sebelum konversi bilangan bulat. Perhitungan menempatkan bagian tengah " +"layar di tengah bidang stereo." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"Agen menggunakan temuan REA untuk menulis C. Pemeriksaan terpisah " +"membandingkan 3.205 input dengan fungsi x86 asli dan mereproduksi semua 63 " +"byte yang dikompilasi dari fungsi lengkap." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}Lihat investigasi lengkap dan perbandingan assembly-to-C{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Cobalah dengan biner Anda sendiri" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Hubungkan analisis penyedia program kode mesin{ph1}, lalu berikan agen " +"Anda executable atau pustaka lokal dan fitur untuk diselidiki. Pertanyaan " +"awal yang berguna termasuk \"Bagaimana file ini diuraikan?\"atau\" Fungsi " +"mana yang menangani tindakan menu ini?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Jika Anda sudah mengetahui nama atau alamat fungsi, Anda dapat menanyakannya" +" dari terminal. Untuk instalasi Ghidra yang dikonfigurasi:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Analisis fungsi" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Ganti jalur target dan {ph0} dengan nama atau alamat fungsi Anda sendiri. " +"Setiap pemanggilan CLI mengimpor dan menganalisis biner, lalu menutup " +"sesinya. Kueri MCP agen Anda menggunakan kembali biner yang diimpor saat " +"sesi tersebut dibuka." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Baca pseudocode di samping instruksi dan referensi. Saat hasil membuat " +"panggilan atau nilai tidak terselesaikan, gunakan lokasi tersebut sebagai " +"pertanyaan berikutnya." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Analisis Biner Asli-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Pulihkan perhitungan asli dengan REA : periksa instruksi, ikuti penelepon, " +"baca konstanta, dan periksa C yang direkonstruksi." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Analisis program kode mesin" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Salin contoh prompt" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Salin analisis fungsi" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Siapkan REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Siapkan REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}Apa itu RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Bagaimana REA membantu{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Permainan dinosaurus{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Kalkulator{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Coba REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Pelajari lebih lanjut{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Bantuan & umpan balik{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Komunitas{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Rekayasa balik, dengan agen pengkodean Anda" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Cari tahu bagaimana{ph0}perangkat lunak bekerja." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA menyediakan alat bagi agen pemrograman Anda untuk memeriksa program dan " +"menjelaskan cara kerjanya." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "Sudah tahu RE? {ph0}Lewati ke panduan analisis →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Ingin lebih dalam? {ph0}Baca Blognya →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Tempel prompt ini ke agen pemrograman Anda:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Salin" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Atau jalankan perintah ini di terminal:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "Periksa dan setujui rencana perubahan, lalu mulai ulang agen Anda." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Apa itu rekayasa balik?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Memahami cara kerja perangkat lunak dengan {ph0}memeriksa program itu " +"sendiri.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"Tujuannya: memahami fitur dengan cukup baik untuk {ph0}jelaskan{ph1}, " +"{ph2}ubahlah{ph3} atau {ph4}bangun kembali.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "Sebelum REA · Anda menyelidikinya {ph0}sendiri{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Dekode cabang" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Melacak panggilan" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Pulihkan aturan" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}x64 asli * instruksi yang dipilih{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * Cabang mana?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Dua lompatan ke tempat yang sama. Operator mana ini?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Cari ID perintah, lalu beri label pada cabang." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Membagi ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Kalikan ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Apa yang dilakukan fungsi yang dipanggil?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 sudah jelas. Panggilan itu hanya alamat. {ph0}Yang mana yang membelah?" +" Nilai mana yang masuk?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Periksa fungsi pembantu dan lacak nilai yang disimpan." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Membagi" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 · Apa aturannya?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Jalur ini dikalikan dengan masukan lainnya. Jadi {ph0}10% berarti 10% dari" +" 200{ph1} setelah +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "Beri nama operan dan periksa kedua jalur operator." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Penalaran ahli ilustratif" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Anda memecahkan kode instruksi, mengikuti pemanggilan fungsi, dan " +"merekonstruksi perhitungannya.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "Dengan REA · Anda bertanya kepada {ph0}agen Anda{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Cukup satu prompt." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Tanyakan kepada agen Anda {ph0}dengan bahasa sehari-hari.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Contoh prompt * Kalkulator" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Contoh jawaban * berdasarkan temuan" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "" +"Setelah +, tombol % mengambil {ph0}persentase dari angka pertama.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA menyediakan" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Instruksi pawang, kode yang didekompilasi, dan panggilan." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Agen Anda menjelaskan" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "" +"Cabang mana yang berlaku, apa yang menghitungnya, dan bagaimana membangunnya" +" kembali." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Rakitan yang dipilih dari Kalkulator DLL yang diinstal. Pemikiran dan " +"balasannya menggambarkan temuan tersebut. {ph0}Lanjutkan dengan contoh " +"Kalkulator ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Mari kita coba dua contoh.{ph1} Ubah kecepatan permainan, lalu kembali " +"ke Kalkulator dan buat kembali tombol % - nya." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Contoh 01 * Game dinosaurus Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Mengapa dinosaurus semakin cepat?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Tujuan" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "" +"Bangun kembali game dengan {ph0}kecepatan yang dapat disesuaikan.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Mengapa merekayasa baliknya?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Untuk mereproduksi percepatannya, kita membutuhkan {ph0}aturan dalam " +"permainan lari{ph1}: seberapa cepat dimulai, seberapa banyak meningkat dan " +"kapan berhenti." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Mainkan hasil rekonstruksi" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Main" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Lompat ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Mulai ulang" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Kecepatan" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Gunakan aturan akselerasi yang dipulihkan" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Aturan awal: mulai dari 6, lalu tingkatkan menjadi 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Gerakkan penggeser untuk mengatur kecepatan Anda sendiri. Ruang atau " +"Lompatan membersihkan kaktus." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Aktifkan JavaScript untuk memainkan rekonstruksi. Kode dan penjelasan di " +"atas tetap dapat dibaca." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA mengembalikan" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Skrip benar-benar berjalan di halaman.{ph1} Agen membaca fungsi " +"pembaruan dan pengaturan kecepatannya, lalu menggunakan aturan tersebut di " +"game baru." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Contoh prompt * Permainan dinosaurus" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa game dinosaurus ini. Mengapa " +"menjadi lebih cepat? Tampilkan aturan kecepatan, lalu buat versi kecil " +"dengan kecepatan yang dapat disesuaikan.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Target yang diperiksa: {ph0}edisi peramban turunan Chromium wayou{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Mulai dari 6.{ph1} Tambahkan {ph2}0.001{ph3} setiap pembaruan tanpa " +"tabrakan, sementara kecepatan di bawah {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Buka lab kecepatan →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Apa yang dilakukan setiap bagian" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 * REA {ph1}{ph2}Baca skrip game yang sedang " +"berjalan{ph3}{ph4}Kembalikan kode dan pengaturannya yang sebenarnya ke " +"agen.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * Agen Anda{ph1}{ph2}Bangun kembali aturan, tambahkan " +"kontrol{ph3}{ph4}Gunakan akselerasi yang dipulihkan dalam gim kecil dengan " +"penggeser kecepatan.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * Kamu{ph1}{ph2}Mengubah kecepatan dan bermain{ph3}{ph4}Coba " +"akselerasi asli, lalu pilih kecepatan Anda sendiri.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Lihat skrip, cek, dan cara mencoba analisisnya" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA memeriksa edisi browser HTTP melalui koneksi debugging lokal dan " +"mengembalikan yang dimuat {ph0}, termasuk sumber dan intisarinya." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Kami menyebut fungsi pembaruan game asli dalam pemeriksaan browser yang " +"terkontrol, dengan hambatan dan penjadwalan otomatis dinonaktifkan. Setelah " +"4.000 pembaruan, kecepatannya menjadi 10,0; setelah 10.000, kecepatannya " +"menjadi 13,0, dibulatkan menjadi satu desimal." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"Mini-game baru mempertahankan aturan kecepatan itu. Kode menggambar, " +"melompat, dan bertabrakan adalah implementasi pengajaran yang kecil. " +"{ph0}Buka labnya{ph1} untuk melihat kode baru dan menjalankan pemeriksaan " +"kecepatan yang sama." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Untuk memeriksa target sendiri, ikuti {ph0}langkah-langkah koneksi " +"browser{ph1} menggunakan {ph2}halaman dinosaurus{ph3}. Berikan URL halaman " +"tersebut kepada agen Anda dan titik akhir debugging lokal Anda, lalu salin " +"perintah di atas." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Kode kecepatan yang diperiksa{ph1} · {ph2} Penulis Chromium * Lisensi " +"BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Contoh 02 * Kalkulator Windows" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Buat ulang tombol % Kalkulator." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "Buat kalkulator kecil yang menangani {ph0}keduanya + dan × {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Tombol yang sama menggunakan {ph0}aturan berbeda setelah + dan ×{ph1} Kami " +"memeriksa aplikasi yang diinstal untuk menemukan angka persentase yang " +"diterapkan." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Coba perhitungannya" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Reset" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% dari 200 = 20. Kemudian 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Ilustrasi interaktif dari aturan persentase yang diinspeksi." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Satu cabang dibagi dengan 100. Yang lain juga dikalikan dengan angka " +"pertama.{ph1} Agen menggunakan keduanya untuk membuat ulang tombol%." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Untuk contoh ini, {ph0} dan {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Contoh prompt * Bangun kembali " +"tombol %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa tombol % Kalkulator Windows. " +"Pulihkan aturan setelah + dan × {ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Dengan +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Ambil 10% dari angka pertama.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Dengan ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Ubah 10% menjadi 0,1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Dari aplikasi yang diinstal ke tombol % yang berfungsi" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA membaca perpustakaan{ph1}{ph2}Kembalikan kode % " +"handler{ph3}{ph4}Fungsi memeriksa operator dan menggunakan konstanta " +"{ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * Agen Anda menafsirkannya{ph1}{ph2}Menjelaskan dan mereproduksi " +"aturan{ph3}{ph4}Periksa silang cabang dengan sumber Microsoft, lalu coba + " +"dan × {ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Lihat kode sebenarnya dan bagaimana jawabannya diperiksa" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Diperiksa dengan REA 4.1.0: Kalkulator Windows 11.2508.4.0, x64. Ringkasan " +"yang dapat dibaca menggunakan nama dari sumber publik Microsoft untuk " +"menjelaskan cabang yang dipulihkan." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Implementasi persentase{ph1} · {ph2}Kasus uji Microsoft{ph3} · " +"{ph4}Panduan penyiapan asli{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Investigasi pertamamu" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Coba REA di aplikasi kecil." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Unduh contoh Catatan kami, lacak ekspor CSV - nya, dan periksa satu input " +"yang diubah." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Coba contoh terpandu" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Ingin mempelajari lebih lanjut?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Beri tahu agen Anda apa yang ingin Anda pahami atau bangun. Dengan REA, Anda" +" dapat bekerja sama dalam segala hal mulai dari {ph0}mengkloning situs web " +"ini{ph1} untuk {ph2}merekonstruksi game dari executable-nya.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Contoh prompt * Situs web" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Ya, yang ini." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Contoh prompt * Rekonstruksi game" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk merekonstruksi game ini dari yang dapat " +"dieksekusi. Pulihkan logika gameplay di C dan uji dengan " +"aslinya.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Lihat studi kasus DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "Untuk langkah penyiapan dan analisis, pilih target Anda:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Program kode mesin" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Periksa fungsi, string, referensi, dan hubungan pemanggilan fungsi di " +"executable dan pustaka." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Analisis panduan program kode mesin" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Modul peta, rute, IPC, dan dependensi asli dari folder aplikasi atau arsip " +"ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Alur kerja aplikasi" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Aktivitas browser & waktu proses" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Tangkap browser atau aktivitas proses yang dipilih, lalu bandingkan hasilnya" +" di seluruh proses." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Panduan pengamatan browser" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Ada pertanyaan?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Baca FAQ{ph1}, {ph2}ngobrol dengan kami di Discord {ph3}, atau " +"{ph4}buka masalah GitHub{ph5} untuk bug dan permintaan fitur." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Gabung komunitas" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Bagikan investigasi dan dapatkan bantuan dari pengguna REA lainnya di " +"Discord . Ikuti REA di X untuk pembaruan proyek." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-Rekayasa Balik untuk Agen Pengkodean Anda" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Merekayasa balik aplikasi, binari, dan perilaku browser dengan agen " +"pengkodean Anda. Ikuti panduan yang jelas dan coba contoh interaktif dengan " +"REA ." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Salin prompt instalasi REA" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Salin perintah pengaturan" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Ikuti analisis Kalkulator manual" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Salin pertanyaan persentase Kalkulator" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Mini-game dinosaurus. Gunakan tombol Lompat atau tekan Spasi saat permainan " +"difokuskan." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Salin prompt analisis dinosaurus" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Pilih perhitungan" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Salin prompt analisis Kalkulator" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Salin prompt proyek situs web" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Salin prompt rekonstruksi game" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Rumah{ph1} / {ph2}Menampilkan{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Studi kasus * Pengautentikasi Aegis" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Bagaimana cara kerja autentikator{ph0}buat kode masuk?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Kode enam digit berubah setiap 30 detik. Gunakan REA untuk menemukan " +"perhitungan di Android APK, lalu bangun kembali dengan jam yang dapat Anda " +"kendalikan." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * Rilis resmi APK * 6.9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Lihat Aegis di GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "Dari APK ke kode yang dapat Anda reproduksi" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * Temukan fitur tersebut{ph1}{ph2}3.077 kelas → {ph3}{ph4} REA " +"mencari paket dan melacak kode yang digunakan oleh tindakan tampilan dan " +"penyalinan.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * Baca perhitungannya{ph1}{ph2}Waktu + kunci akun → {ph3}{ph4} REA " +"mengembalikan metode dan default. Agen menjelaskan bagaimana mereka cocok " +"bersama.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * Bangun kembali dan periksa{ph1}{ph2}Ganti jam. Perhatikan " +"kodenya.{ph3}{ph4}Demo browser baru mereproduksi aturan dan memeriksanya " +"terhadap kasus referensi publik.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "Dalam studi kasus ini" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Tanyakan pada agen Anda{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Coba pembuat kode{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Temukan kodenya dengan REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Baca perhitungannya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Periksa rekonstruksi{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Periksa sendiri APK{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Tanyakan pada agen Anda" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"Aplikasi ini menampilkan kode login yang berubah. Kami ingin menemukan " +"{ph0}apa yang membuatnya berubah{ph1} dan mereproduksi perilaku itu." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Salin" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Contoh prompt untuk APK yang diunduh, dengan analisis Android REA " +"dikonfigurasi. {ph0}Dapatkan APK dan pengaturan analisis ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Coba pembuat kode" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"Aplikasi mengelompokkan waktu menjadi {ph0}blok 30 detik.{ph1} Ini " +"menggabungkan nomor blok dengan kunci akun untuk menghasilkan kode. Kunci " +"dan blok yang sama menghasilkan kode yang sama." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Pindahkan jam melintasi 60 detik" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Waktu" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "detik" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Jam contoh kami yang dapat disesuaikan" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "blok 30 detik" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Blok" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 detik{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Kode yang dihasilkan" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Kunci akun + blok →" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Contoh waktu, dalam detik" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 detik" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 detik" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"Pada 59 detik: {ph0}287082.{ph1} Pada 60 detik: {ph2}359152.{ph3} Bergerak " +"dalam satu blok membuat kode tidak berubah." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"Kuncinya adalah tetap, publik {ph0}RFC 6238 datasheet{ph1}. Demo " +"mengimplementasikan perhitungan yang dipulihkan dari APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"Diagram menunjukkan hasilnya pada 59 detik. Aktifkan JavaScript untuk " +"mengubah jam." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Temukan kodenya dengan REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Persempit APK menjadi tiga kelas" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} adalah kandidat perhitungan; dua lainnya menyangkut bilah kemajuan dan" +" akun yang diimpor. TOTP berarti kata sandi satu kali berbasis waktu." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Hubungkan generator ke tampilan aplikasi" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA mengidentifikasi kelebihan stempel waktu dan menemukan penelepon metode " +"dasar. Memeriksa {ph0} kemudian menampilkan panggilan tampilan {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Permintaan menunjukkan jalur input yang dipersingkat. Hasil nama kelas " +"menghilangkan yang umum {ph0} awalan." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Baca perhitungannya" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA kembali {ph0}konversi jam, pengaturan default, dan metode " +"pembangkitan.{ph1} Konstruktor menetapkan interval 30 detik dan enam digit; " +"metode stempel waktu mengubah detik menjadi nomor blok." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Blok waktu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Kunci + blok" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Enam digit" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Waktu memilih blok.{ph1} Detik 30 hingga 59 semuanya memberikan blok 1." +" Pada 60 detik, blok menjadi 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}Kuncinya juga penting.{ph1} Generator menggabungkan kunci akun dengan " +"blok. Akun dengan kunci yang berbeda dapat menampilkan kode yang berbeda " +"secara bersamaan." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Simpan enam digit.{ph1} Sisanya setelah pembagian dengan 1.000.000 " +"diisi dengan angka nol bila diperlukan, sehingga kode dapat dimulai dengan " +"0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Kutipan dari beberapa metode yang diinspeksi, dengan pembungkusan garis " +"untuk tampilan. Panel kanan adalah ringkasan penjelasan. {ph0} Kode Aegis " +"adalah GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Di dalam generator" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"APK yang dirilis menempatkan {ph0} dalam {ph1}. REA mengikuti panggilan " +"dari {ph2} dan mengembalikan badan ini; sumber aslinya memanggil helper " +"{ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"Byte hash terakhir memilih posisi. Empat byte pada posisi itu memberikan " +"angka 31-bit positif; pemformatan menguranginya menjadi jumlah digit yang " +"diminta. Argumen terakhir konstruktor memilih cabang pemformatan kode yang " +"diperkenalkan oleh kompilasi." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Bandingkan dengan sumber rilis yang cocok{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Periksa rekonstruksi" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Kami mengumpulkan metode Java yang dikembalikan REA yang dipilih dalam " +"program pengujian kecil. Hasil mereka cocok dengan rekonstruksi independen " +"pada {ph0}133 kasus uji{ph1}, termasuk batas blok waktu dan kode yang " +"dimulai dengan nol." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Contoh waktu" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Kode enam digit" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 detik" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1.111.111.109 detik" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Generator juga cocok dengan enam kasus referensi SHA-1 yang diterbitkan di " +"{ph0}RFC 6238{ph1}. Periksa implementasi browser terhadap mereka:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Jalankan pemeriksaan referensi" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Baca perhitungan demo" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"Kasus referensi menggunakan delapan digit. Cek tersebut juga memverifikasi " +"hasil enam digit mereka." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Verifikasi menjalankan metode Java yang diekstraksi dan demo baru. Android " +"APK diperiksa secara statis." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Periksa sendiri APK" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Siapkan REA {ph1} di macOS atau Linux, lalu unduh kedua file ini ke " +"dalam folder yang sama. Pada Windows, gunakan lingkungan Linux seperti WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Analisis Android membutuhkan JDK 17 lengkap atau lebih baru. Pilih dengan " +"{ph0} atau {ph1}. Kasus ini menggunakan JDK 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Arahkan REA ke file penyedia dan periksa APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Agen Anda dapat melanjutkan melalui REA CLI menggunakan perintah di atas. " +"Untuk MCP, tambahkan {ph0} ke lingkungan server REA dan sambungkan kembali." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Pertanyaan selanjutnya: {ph0}apa yang terjadi jika akun menggunakan delapan " +"digit atau interval waktu yang berbeda?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Sumber" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Rilis resmi Aegis 3.4.3{ph1} · {ph2}Komit sumber yang cocok{ph3} · " +"{ph4}Lisensi GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}Kasus referensi RFC 6238{ph1} · {ph2}Data uji demo{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Diinspeksi dengan REA 6.1.0 pada 9 Oktober 2026. Kutipan yang didekompilasi " +"dikreditkan ke Aegis; diagram, ringkasan yang dapat dibaca, dan rekonstruksi" +" browser adalah bahan ajar baru." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis Rekayasa Balik APK: Kode Masuk-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Periksa Aegis Android APK dengan REA, pulihkan perhitungan kode masuk enam " +"digitnya, dan coba rekonstruksi dengan jam yang dapat disesuaikan." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Studi kasus Aegis APK" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Salin prompt contoh Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Ikuti perhitungan kode masuk" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Salin perintah inspeksi APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Rumah{ph1} / {ph2}Menampilkan{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Studi kasus * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Temukan bendera di{ph0}biner KKP." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Gunakan REA untuk memeriksa pemeriksa bendera kecil, mengubah aturannya " +"menjadi persamaan, dan menemukan masukan yang membuat program asli dicetak " +"{ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "pemeriksa bendera kotak bertopeng * Mudah * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Lihat tantangan aslinya" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "Dari biner ke jawaban yang dicentang" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * Temukan ceknya{ph1}{ph2}String → {ph3}{ph4} REA menemukan prompt, " +"referensinya, dan kode yang menerima atau menolak input.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * Ekstrak aturan{ph1}{ph2}36 karakter · 26 jumlah{ph3}{ph4} REA " +"mengembalikan instruksi dan data di balik setiap pemeriksaan. Agen " +"mengubahnya menjadi persamaan.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * Pecahkan dan jalankan{ph1}{ph2}Bendera yang dipulihkan → " +"{ph3}{ph4}Skrip Python memecahkan persamaan. REA menangkap program asli " +"yang menerima hasilnya.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"Tantangannya adalah oleh joseph, diterbitkan di repositori resmi " +"DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "Dalam studi kasus ini" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Temukan kode pemeriksaan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Baca satu topeng{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Perakitan ke kode yang dapat dibaca{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Selesaikan persamaannya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Periksa jawabannya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Cobalah sendiri{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Temukan kode pemeriksaan" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Handout adalah executable 15 KB. Ia meminta bendera, lalu mencetak {ph0} " +"atau {ph1}. Mulailah dengan permintaan sederhana kepada agen Anda." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Salin" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk menganalisis ms_flag_checker dan menemukan" +" benderanya. Jelaskan cara kerja pemeriksaan, lalu verifikasi jawabannya " +"dengan program aslinya.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Contoh prompt, dengan tantangan yang diunduh tersedia secara lokal dan " +"analisis penyedia program kode mesin terhubung." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Ikuti prompt input ke fungsinya" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"Referensi memberi agen tempat untuk menyelidiki, meskipun nama fungsi asli " +"yang dapat dieksekusi telah dihapus." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Baca pemeriksa dan dua pembantunya" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"Loop pertama menyalin 36 kode karakter. Loop pemeriksaan menerjemahkan " +"topeng, menjumlahkan kode yang dipilih, dan membandingkan hasilnya dengan " +"nomor yang disimpan. Nya {ph0}- langkah byte melintasi {ph1} byte memberikan" +" 26 topeng." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Ini adalah hasil yang dipilih dari analisis REA baru. Jalur target lokal " +"dipersingkat untuk ditampilkan; alamat mengacu pada gambar yang diimpor REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Satu cek mengungkapkan satu karakter" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Pemeriksa mengatur masukan dalam kisi 6× Topeng memilih sel mana yang " +"berkontribusi pada penjumlahan. Pengkodeannya yang ringkas menggunakan angka" +" negatif untuk melewati sel dan angka positif untuk memilihnya." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" +"Pemeriksaan ketujuh hanya memilih satu posisi. {ph0}Sosok terbuka{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Baca topeng dan targetnya dari biner" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"Instruksi {ph0} membaca byte topeng sebagai nilai yang ditandatangani. " +"Inilah mengapa {ph1} artinya -21. Targetnya adalah bilangan bulat little-" +"endian. Bersama-sama, byte ini memberi tahu agen bahwa {ph2}, jadi karakter " +"itu adalah {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Dari instruksi hingga pemeriksaan yang dapat dibaca" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Pilih langkah untuk menghubungkan summing helper dan peneleponnya ke aturan " +"yang sama di C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Mulai" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Pilih" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Tambahkan" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Maju" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Bandingkan" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * instruksi asli yang dipilih" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Ringkasan satu cek C * yang dapat dibaca" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "" +"{ph0}01 * Mulai dari nol.{ph1} {ph2} memegang jumlah yang sedang berjalan." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * Periksa sel topeng.{ph1} Nilai nol melewatkan karakter; nilai " +"bukan nol menyertakannya." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * Tambahkan kode karakter.{ph1} Bilangan bulat input pada offset " +"yang sama ditambahkan ke jumlah." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * Pindah ke sel berikutnya.{ph1} Loop asli memajukan empat byte per " +"bilangan bulat dan mengunjungi enam baris dari enam sel." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * Bandingkan dengan target yang disimpan.{ph1} Penelepon menerima " +"jumlah dalam {ph2}. Ketidakcocokan melompat ke {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Instruksi datang dari pembantu penjumlahan dan peneleponnya. C adalah " +"ringkasan penjelasan dengan nama deskriptif dan loop 36 sel yang diratakan." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Selesaikan 26 persamaan tersebut" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"Sebagian besar topeng memilih beberapa sel. Misalnya, pemeriksaan pertama " +"menambahkan 16 kode karakter dan membutuhkan total 1441. Pilihan yang " +"tumpang tindih memberikan persamaan yang dapat diselesaikan bersama oleh " +"skrip Python kecil." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python * kutipan pemecah" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 adalah pemecah yang menemukan nilai-nilai yang memenuhi persamaan ini. " +"Kutipan ini menggunakan pemeriksaan yang diekstraksi dan mengasumsikan {ph0}" +" bendera dengan huruf, angka,garis bawah, dan tanda kurung. Unduhan lengkap " +"mencakup semua 26 topeng dan target." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Unduh pemecah lengkap" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Periksa jawabannya dengan program aslinya" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"Pengambilan proses REA merekam executable asli yang menerima flag yang " +"diselesaikan. Mengubah satu karakter yang dipilih dari {ph0} untuk {ph1} " +"membuat jumlah pertama 1440, bukan 1441, dan program menolaknya." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Masukan" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Keluaran yang diamati" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Kode keluar" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Bendera pemecah" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Satu karakter berubah" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Tampilkan bendera yang dipulihkan dan keluaran yang diambil" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * keluaran program asli" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Salin bendera" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"Nilai yang dipulihkan juga cocok dengan tanda dalam metadata tantangan yang " +"diterbitkan penyelenggara, dicentang setelah menyelesaikan biner." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Sumber, identitas target, dan detail analisis" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Analisis baru dan dua tangkapan proses pada 8 Oktober 2026, menggunakan REA " +"4.1.0 dengan Ghidra 12.1.4 pada Linux x64. Binernya adalah ELF x86-64 yang " +"dilucuti, 15.248 byte." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Referensi string, fungsi, dan konstanta diperiksa sebelum membaca sumber " +"atau solusi penyelenggara. Pemecah Python dan diagram dibuat dari hasil REA " +"tersebut." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Bandingkan dengan sumber penyelenggara{ph1} · {ph2}Tantang metadata dan" +" bendera{ph3} · {ph4} Catatan bukti REA{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Cobalah sendiri" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Unduh tantangan asli dan pemecah ke dalam satu folder. Gunakan perintah di " +"atas untuk menyelidiki dengan agen Anda, atau jalankan skrip yang " +"disertakan." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Terminal * selesaikan dan jalankan" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Skrip mencetak bendera kandidat; tempelkan pada prompt program. Memecahkan " +"kebutuhan Python dan {ph0}. Menjalankan executable asli membutuhkan Linux " +"x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Siapkan REA dengan agen pengkodean Anda" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "Rekayasa Balik KKP: Pemeriksa Bendera DownUnderCTF-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Gunakan REA untuk menyelesaikan pemeriksa bendera kotak bertopeng " +"DownUnderCTF. Temukan fungsi pemeriksaan, ekstrak mask, dan bandingkan flag " +"yang dipulihkan dengan program asli." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "Studi kasus pemeriksa bendera KKP" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Salin permintaan contoh KKP" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "" +"Persamaan topeng KKP; gulir secara horizontal pada layar yang lebih kecil" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"Topeng ketujuh melompati 21 sel, memilih posisi 21, lalu melompati 14. Hanya" +" sel itu yang berkontribusi pada jumlah tersebut. Kode karakter yang " +"diperlukan adalah 55, yang berarti karakternya adalah 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Ikuti pemeriksaan KKP" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Salin perakitan KKP" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Salin cek KKP yang dapat dibaca" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Salin kutipan pemecah KKP" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Salin bendera yang dipulihkan" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Salin perintah pemecah KKP" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Rumah{ph1} / {ph2}Menampilkan{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Studi kasus * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Membangun kembali DX-Ball {ph0}dari executable-nya." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"Tujuannya adalah versi C yang dapat dipertahankan dari game Windows tahun " +"1996. REA membantu agen memeriksa yang asli, satu fungsi pada satu waktu." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 * C * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Satu fungsi, dari dapat dieksekusi hingga dicentang C. REA menyediakan " +"instruksi, penelepon, dan pembacaan data; proyek rekonstruksi " +"mengimplementasikan dan menguji hasilnya. {ph0}Sosok terbuka{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "Dalam studi kasus ini" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Proyek ini{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Panci suara{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Memeriksa hasilnya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Lanjutkan pekerjaan{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "fungsi C yang dipertahankan" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "perbandingan dengan kode asli" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "fungsi dengan byte terkompilasi yang cocok" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Pos pemeriksaan proyek: 7 Oktober 2026. {ph0}Buku besar kemajuan{ph1} · " +"{ph2}Cakupan pengujian{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Proyek sejauh ini" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Kode yang dipulihkan mencakup penanganan papan dan sumber daya, pukulan " +"bata, animasi, partikel, dan produksi bonus. Build saat ini menyediakan " +"utilitas inspeksi dan pustaka analisis. Pengerjaan game yang dapat dimainkan" +" berlanjut dengan fisika bola dan dayung, penanganan power-up, dan integrasi" +" Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Menemukan perhitungan posisi suara kiri/kanan" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Saat sebuah batu bata dipukul, posisi horizontalnya diteruskan ke kode " +"suara. Penyelidikan diperlukan untuk memulihkan bagaimana koordinat layar " +"tersebut menjadi nilai panning kiri / kanan." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Salin" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk menemukan cara DX-Ball menghitung " +"pemosisian suara stereo. Jelaskan perhitungannya dan tunjukkan " +"kodenya.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Contoh prompt untuk agen pengkodean Anda, dengan executable lokal tersedia. " +"Investigasi di bawah ini menunjukkan pertanyaan REA dan bukti di balik " +"jawabannya." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"Agen menggunakan REA untuk memeriksa fungsi, mengikuti peneleponnya yang " +"rusak dan membaca konstanta dari executable. Hasil tersebut memberikan " +"masukan dan aritmatika yang diperlukan untuk menulis fungsi C di bawah ini." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"Hasil fungsi pertama untuk {ph0} termasuk deklarasi pseudocode {ph1} dan " +"menelepon {ph2}. Tampilan instruksinya menunjukkan input tumpukan dan " +"operasi floating-point. Ketidaksesuaian itu memberi agen alasan konkret " +"untuk terus menyelidiki." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "Tampilan dekompiler pertama" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"Outputnya menunjukkan panggilan konversi. Membaca petunjuk di bawah ini " +"mengungkapkan masukan dan perhitungan yang memanggil panggilan itu." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Tiga pertanyaan dijawab melalui REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Pulihkan input yang hilang" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"Hasil fungsi menyertakan instruksi bersama pseudocode dan penelepon. Di " +"sini, {ph0} memperlihatkan input integer yang hilang dari tampilan " +"decompiler." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Ikuti penelepon untuk memahami masukannya" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA mengidentifikasi penelepon ini pada hasil pertama. Skala instruksi " +"sebelumnya {ph0} sebesar 30; menambahkan 20 memberikan koordinat layar bata," +" {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Baca nilai di balik alamat memori" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Byte yang dikembalikan menetapkan dua konstanta aritmatika dan skala pan " +"awal. Agen sekarang memiliki nilai yang diperlukan untuk ekspresi C." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "Dari temuan REA hingga C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Ikuti lima langkah di bawah ini. Setiap pilihan menyoroti instruksi asli dan" +" baris C yang mereka informasikan." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Masukan" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Lipat gandakan" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Kurangi" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Skala" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Kembali" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "x86 asli · kutipan" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Direkonstruksi C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * Baca inputnya.{ph1} Tampilan instruksi dalam hasil fungsi REA " +"berbunyi {ph2} dan menggunakan {ph3} untuk memuat bilangan bulat. Mengikuti " +"peneleponnya melalui REA menetapkan arti koordinat layar dari parameter C " +"{ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * Kalikan dengan 1,5625.{ph1} {ph2} membaca dobel di {ph3}. Byte " +"yang dikembalikan oleh REA {ph4} dekode ke {ph5}; C menggunakan konstanta " +"yang sama." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * Kurangi 500,0.{ph1} {ph2} membaca dobel di {ph3}. Hasil byte REA " +"diterjemahkan menjadi {ph4}, menggeser pusat perhitungan ke koordinat layar " +"{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * Terapkan skala yang disimpan.{ph1} Yang kedua {ph2} membaca {ph3}." +" Global itu bernama {ph4} dalam sumber yang dipelihara. Pembacaan byte " +"kedua REA menetapkan nilai awalnya dari {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * Mengembalikan bilangan bulat.{ph1} Panggilan di {ph2} jangkauan " +"{ph3}, diidentifikasi dalam hasil callee REA. C memberikan hasil ke {ph4}; " +"perbandingan original-x86 periksa nilai yang dikembalikan." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"Kutipan perakitan memilih input, aritmatika, dan instruksi pengembalian. " +"Daftar lengkap di bawah ini juga mencakup penyimpanan intervensi dan " +"penyiapan serta pembersihan fungsi." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Perakitan lengkap dan bukti pendukung" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "Hasil REA · 0x406400-0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Apa yang disediakan penelepon" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"Fungsi pukulan bata di {ph0} menskalakan koordinat ubinnya sebesar 30, " +"menambahkan 20, lalu mendorongnya sebelum panggilan:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Apa yang dibaca data menetapkan" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "Pembacaan byte REA, diterjemahkan sebagai ganda little-endian" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Alamat" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Nilai" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Digunakan untuk" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Perkalian pertama" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Pengurangan" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} awalnya" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Skala panci tersimpan" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Direkam dengan REA 4.1.0 untuk target DX-Ball 1.07 yang disematkan hash. " +"Catatan investigasi terkait menyimpan ID Bukti." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Sumber yang dipelihara{ph1} · {ph2}Catatan investigasi dan referensi " +"bukti{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Memeriksa fungsi yang dipulihkan" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"Fungsi yang dipulihkan melewati dua pemeriksaan: nilai pengembaliannya cocok" +" dengan aslinya, dan byte yang dikompilasi cocok dengan yang dapat " +"dieksekusi." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3.205 kasus perilaku" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Pengujian menjalankan fungsi x86 asli dan membandingkan nilai " +"pengembaliannya dengan C. Pengujian mencakup setiap posisi bilangan bulat " +"dari 0 hingga 640 pada lima skala panci: 0, 0,5, 1, 20, dan -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 byte yang cocok" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"Fungsi C dikompilasi dengan rantai alat VC4.0 yang disematkan. Replay " +"kompilator cocok dengan fungsi lengkap setelah menerapkan relokasi yang " +"ditinjau dan memeriksa konstanta yang direferensikan." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"Pada skala 1, perhitungan yang dipulihkan mengembalikan -500 di tepi kiri, 0" +" di tengah, dan 500 di tepi kanan. Bagian selanjutnya dari pekerjaan audio " +"adalah mengintegrasikan nilai tersebut dengan backend suara game." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Baca detail pemutaran ulang kompiler{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Lanjutkan penyelidikan" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"Pendekatan yang sama digunakan untuk pembaruan partikel, antrean ledakan, " +"dan pembuatan bonus: periksa fungsi yang relevan, pulihkan status dan " +"dependensinya, lalu bandingkan implementasinya dengan aslinya." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Untuk memeriksa sendiri fungsi sound-pan, ikuti petunjuk penyiapan proyek " +"DX-Ball dan berikan target aslinya yang sesuai. Lalu lari:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "Dalam checkout DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} Repositori DX-Ball{ph1}{ph2}Sumber saat ini, kemajuan, dan pengaturan " +"lokal.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} Alur kerja analisis REA{ph1}{ph2}Ikuti perhitungannya, lalu gunakan " +"pendekatan yang sama dengan biner Anda sendiri.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Partikel dan produksi bonus{ph1}{ph2}Investigasi yang lebih besar " +"terhadap status, antrean, dan penulisan piksel.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "Rekayasa Balik DX-Ball: Panning Suara-REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Ikuti rekonstruksi DX-Ball dari analisis biner melalui REA ke pengujian C, " +"original-x86 yang dipertahankan, dan pencocokan byte fungsi yang " +"dikompilasi." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball sound-pan investigation; gulir secara horizontal pada layar yang " +"lebih kecil" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.Fungsi EXE 0x00406400 diperiksa dengan REA . Penelepon yang terkena " +"batu bata memasok 20 ditambah 30 kali tile_x. Instruksi memuat x, kalikan " +"dengan 1,5625, kurangi 500,0, terapkan pan_scale dan kembalikan bilangan " +"bulat. C yang dipertahankan diperiksa secara independen terhadap x86 asli " +"dalam 3.205 kasus dan oleh replay kompiler VC4. 0 yang cocok dengan 63 byte." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "Studi kasus rekonstruksi DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Salin contoh prompt" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Ikuti perhitungan posisi suara kiri / kanan" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Salin kutipan perakitan asli" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Salin fungsi panci suara" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Salin rakitan panci suara lengkap" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Salin perintah analisis DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Rumah{ph1} / Menampilkan" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "Studi kasus REA." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, game, Electron, dan tantangan KKP, dengan kode, angka, dan hasil " +"yang dicentang." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android * Analisis APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Cara autentikator membuat kode masuk" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Temukan perhitungan kode enam digit Aegis dalam APK yang dirilis . Lacak " +"metode pembuatan dengan REA, lalu pindahkan jam demo untuk melihat mengapa " +"kode berubah setiap 30 detik." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Baca studi kasus Android" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "KKP * Analisis program kode mesin" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Selesaikan pemeriksa bendera KKP" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Periksa tantangan DownUnderCTF yang mudah dengan REA . Temukan fungsi " +"pemeriksaannya, ubah mask dan jumlah menjadi persamaan, lalu verifikasi flag" +" yang diselesaikan dengan program aslinya." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Baca studi kasus KKP" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Asli * Rekonstruksi" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "Perhitungan posisi suara kiri/kanan DX-Ball" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Pulihkan perhitungan posisi suara kiri / kanan dari game Windows 1996. " +"Instruksi REA, referensi pemanggil, dan konstanta numerik mengarah ke fungsi" +" C kecil, diperiksa terhadap perilaku asli dan semua 63 byte yang " +"dikompilasi." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Baca studi kasus DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * Penelusuran fitur" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Bagaimana Notion menyalin teks dan HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Lacak API yang menghadap ke halaman melalui Notion yang dikemas JavaScript ." +" Ikuti pembungkus IPC-nya ke papan klip sistem, lalu lihat bagaimana penanda" +" HTML kecil menyimpan data blok kaya yang terhubung ke salinan." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Baca studi kasus Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS * Rekonstruksi" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Bagaimana TH04 mengarahkan cincin peluru" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Periksa pembantu sudut 16-bit asli dengan REA . Cocokkan operasi perkalian, " +"pembagian, dan koordinatnya dengan C++ yang dapat dibaca, lalu lihat " +"bagaimana mereka menghasilkan cincin yang ditujukan untuk pemain." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Baca studi kasus TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Panduan langkah demi langkah" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Panduan berjalan melalui perhitungan asli, ekspor Electron, dan permintaan " +"browser. Masing-masing dimulai dengan target yang cepat dan konkret." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Baca panduannya" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Studi Kasus Rekayasa Terbalik-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Ikuti investigasi REA melalui kode, angka, dan demo: autentikator Android, " +"DX-Ball , Notion, TH04, dan pemeriksa bendera DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Rumah{ph1} / {ph2}Menampilkan{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Studi kasus * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Bagaimana salinan Notion{ph0}teks dan HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Lacak panggilan papan klip dari API halaman Notion, melalui proses pramuat " +"dan utama, ke penulis papan klip Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion Desktop 7.6.1 * JavaScript · REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Jembatan di dalam paket desktop Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}Preload memperlihatkan " +"metode yang dapat dipanggil.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * Pembungkus pramuat{ph1} {ph2}{ph3}{ph4} {ph5}Pembungkus " +"mengirimkan saluran dan argumen.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * Pengendali proses utama{ph1} {ph2}{ph3}{ph4} {ph5}Penerima " +"memeriksa halaman mana yang mengirimnya.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * Papan klip sistem{ph1} {ph2}{ph3}{ph4} {ph5} Electron menulis teks" +" dan HTML yang disediakan.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Satu saluran bergabung dengan kedua sisi: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Kode yang dikemas menggunakan saluran yang sama dalam proses pramuat dan " +"proses utama. Menyelesaikan pembungkus mengungkapkan panggilan Electron di " +"balik nama-nama itu." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "Dalam studi kasus ini" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Ikuti jembatan papan klip{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Menjaga struktur blok{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Lebih banyak contoh dan sumber{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Ke mana perginya operasi penyalinan?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"Halaman melihat metode yang disebut {ph0}. Implementasinya dalam preload " +"adalah pembungkus. Pertanyaan yang berguna adalah apa yang dikirim oleh " +"pembungkus itu, dan kode mana yang menerimanya." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Salin" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk melacak bagaimana Notion menyalin teks dan" +" HTML ke papan klip sistem. Tunjukkan kode pada setiap " +"langkah.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Contoh prompt dengan paket aplikasi lokal Notion tersedia untuk agen " +"pengkodean Anda." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA menemukan tempat untuk mulai membaca" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Menganalisis preload tab dengan REA menempatkan API yang diekspos ke halaman" +" dan panggilan yang mengirimkan permintaan IPC. Kedua temuan datang dengan " +"rentang sumber dalam bundel yang diperkecil:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "Temuan REA →" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Bidang yang dipilih dari yang baru {ph0} hasil pada preload tab Notion, " +"direkam dengan REA 4.1.0. Posisi menggunakan baris bundel asli dan kolom " +"berbasis nol." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"Agen membuka lokasi tersebut, menemukan anggota papan klip di API rakitan, " +"dan membaca {ph0}. Situs panggilannya memasok {ph1}. Nama itu memberi agen " +"sesuatu yang tepat untuk dicari di bundel utama. Empat kutipan di bawah ini " +"menunjukkan rute yang menghubungkannya." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Empat potongan kode pendek" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Disederhanakan dari JavaScript yang dikemas, dengan nama variabel yang dapat" +" dibaca. Anggota yang tidak terkait dihilangkan." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Mulai dari API yang diekspos ke halaman" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Anggota ini menyediakan nama saluran. Implementasi dari {ph0} memberitahu " +"kita bagaimana permintaan meninggalkan proses halaman." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Selesaikan pembungkus pramuat" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"Fungsi yang dikembalikan meneruskan argumen melalui IPC request-and-respons " +"Electron. Sekarang kita bisa mencari {ph0} di sisi proses utama." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Periksa bagaimana penerima didaftarkan" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Proses utama menggunakan pembungkus lain. Nya {ph0} metode mendaftarkan " +"sebuah {ph1} penerima untuk saluran tersebut." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Temukan tulisan dan cek pengirimnya" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Ini adalah tujuannya. Setelah memeriksa pengirim, penangan meneruskan data " +"yang disediakan ke API papan klip Electron. Saluran dan dua pembungkus yang " +"diselesaikan menghubungkan metode yang diekspos ke panggilan ini." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Bagaimana blok yang disalin mempertahankan strukturnya?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Editor web Notion mengirimkan teks dan HTML melalui {ph0}. Itu menyimpan " +"data blok secara lokal dan menempatkan ID di HTML yang disalin untuk " +"menghubungkannya." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "Tautan HTML ke data blok yang disimpan" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Baca ID HTML-nya" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Temukan ID lokal yang sama" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Pulihkan data blok Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Teks ilustrasi dan ID. Pengujian modul yang direkam mengembalikan data blok " +"saat ID cocok; entri basi hanya mengembalikan teks dan HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"Saat menempel, Notion mencari ID HTML dan memeriksanya terhadap salinan yang" +" disimpan. ID yang cocok mengembalikan data blok." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Format papan klip direkam dari aset web yang di-cache pada 13 Juli 2026." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Lebih banyak contoh dan sumber" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Contoh lain: Tabel penurunan harga" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion mem-parsing Penurunan harga menjadi data blok. Contoh ini menunjukkan" +" bagaimana tabel menjadi header dan baris data." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Tabel melalui parser penurunan harga Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Output yang direkam dari parser Penurunan harga yang diekstraksi. Tabel " +"menjadi baris dan sel." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Jalur lain: koneksi SQLite offline" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Permintaan penyaji Notion {ph0} melalui IPC. Proses utama membuat saluran " +"pesan dan memberikan satu port ke perender dan port lainnya ke proses " +"utilitas SQLite. Kumpulan pernyataan dan hasil selanjutnya melewati port " +"tersebut." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"Mengikuti handoff ini menjelaskan di mana pekerjaan basis data berjalan, dan" +" mengapa hanya melacak permintaan IPC awal yang melewatkan percakapan " +"selanjutnya." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Sumber dan cara membaca kutipannya" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Jembatan papan klip berasal dari Notion Desktop 7.6.1 {ph0}: tab memuat " +"sebelumnya dan {ph1}. Kutipan memperluas nama variabel yang diperkecil dan " +"menghilangkan kode yang tidak terkait; pembantu pemeriksaan pengirim " +"ditampilkan dengan yang mendasarinya {ph2} telepon." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Papan klip virtual dan contoh Penurunan Harga berasal dari aset web yang di-" +"cache pada 13 Juli 2026, termasuk modul {ph0}, {ph1}, {ph2} dan {ph3}. Aset " +"tersebut memiliki versinya masing-masing. Probe yang disimpan menjalankan " +"modul yang diekstraksi dan harness kecil; keluarannya menggambarkan probe " +"tersebut daripada sesi UI desktop yang diambil." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"Hasil REA yang ditampilkan di sini adalah analisis terfokus dari preload tab" +" yang disimpan, yang direkam dengan paket REA 4.1.0 yang diterbitkan. Ini " +"menempatkan operasi API dan memanggil. Anggota clipboard dan penerima yang " +"cocok dihubungkan dengan membaca implementasi pembungkusnya dalam paket." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"Contoh penurunan harga menggunakan modul parser {ph0}. Pengujian modul yang " +"disimpan menunjukkan bahwa filter halaman dan obrolan mempertahankan tabel " +"ini. Pengurai tempel / impor, Penurunan Harga terstruktur, dan AI / obrolan " +"memiliki titik masuk dan format perantara yang terpisah." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} Panduan aplikasi JavaScript{ph1}{ph2}Ikuti fitur ekspor aplikasi " +"Electron kecil.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} Rekonstruksi DX-Ball{ph1}{ph2}Ikuti instruksi asli ke fungsi C yang " +"dicentang.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron Rekayasa Balik: Papan Klip-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Ikuti API papan klip Notion melalui pramuat Electron, pembungkus IPC, dan " +"proses utama, dengan kutipan kode pendek dan tampilan format papan klip yang" +" kaya." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Studi kasus Notion Electron" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Salin prompt analisis Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Salin kutipan pramuat Notion" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Salin kutipan pembungkus pemanggilan Notion" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Salin kutipan pembungkus penangan Notion" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Salin kutipan penerima papan klip Notion" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Memulihkan data papan klip yang kaya saat ditempel" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Lewati ke konten" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Rumah{ph1} / {ph2}Menampilkan{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Studi kasus * Touhou 4: Kisah Tanah Teratai" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Merekonstruksi TH04{ph0}pola peluru." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Cincin peluru dimulai dengan perhitungan sudut pendek. Gunakan REA untuk " +"memeriksa fungsi DOS asli, lalu ikuti instruksinya ke dalam C++yang dapat " +"dibaca." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 * DOS 16-bit * C++ dan perakitan" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Lihat rekonstruksi TH04" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Dari instruksi asli hingga sumber yang dicentang" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * Game asli{ph1}{ph2}UTAMA.EXE{ph3}{ph4}PC-98 dapat dieksekusi dan " +"pembantu sudut pelurunya.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * Periksa dengan REA {ph1}{ph2}Instruksi + " +"referensi{ph3}{ph4}Verifikasi kode DOS yang dimuat dan baca perhitungan " +"sudut dari yang dapat dieksekusi.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * Baca C++{ph1}{ph2}Ruang → {ph3}{ph4}Hubungkan setiap operasi ke " +"rekonstruksi yang dipertahankan.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * Periksa sumbernya{ph1}{ph2}2.139 byte yang " +"cocok{ph3}{ph4}Pemeriksaan kompilator yang direkam mencakup kode pembuatan " +"peluru yang berisi pembantu ini.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA mengembalikan kode asli dan bukti analisisnya. Proyek TH04 menyediakan " +"pemeriksaan sumber dan kompiler yang dipelihara." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "Dalam studi kasus ini" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}Cincin peluru{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}Apa yang dikembalikan REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Perakitan ke C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Memeriksa sumbernya{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Proyek lengkap{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Bagaimana sebuah cincin mengincar pemain" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"Serangan Elly meminta cincin terarah dengan hitungan awal 16. Satu pembantu " +"menghitung arah setiap peluru. Cincin yang sama dapat menghadap ke arah yang" +" tetap atau berbelok ke arah pemain." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Agen pengkodean Anda" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Salin" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk menemukan bagaimana TH04 membuat cincin " +"peluru dan mengarahkannya ke pemain. Jelaskan perhitungannya dan tunjukkan " +"kodenya.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Contoh prompt, dengan eksekusi asli dan checkout rekonstruksi tersedia " +"secara lokal." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 menyimpan putaran searah jarum jam penuh dalam 256 unit sudut. Untuk 16" +" peluru, setiap indeks menambahkan 16 unit: {ph0}. Menambahkan arah pemain " +"memutar posisi tersebut bersama-sama." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Ilustrasi matematika sudut yang dipulihkan untuk hitungan 16, arah pemain " +"40, dan rotasi templat 0. {ph0}Sosok terbuka{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Templat penembakan di sumber yang dipulihkan" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Serangan cincin Elly * kutipan sumber" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Garis-garis ini memilih pola sebelum tingkat kesulitan dan penyetelan " +"kinerja. {ph0}Baca sumber serangan itu{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "Apa yang dikembalikan REA" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Kami memeriksa {ph0}, fungsi yang mengatur kecepatan dan sudut setiap " +"peluru. REA mengembalikan instruksi, pseudocode, dan referensinya. Tiga " +"bagian dari hasil itu menjelaskan polanya." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Periksa gambar DOS sebelum membaca kodenya" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"Pemeriksaan mengikat kode yang dimuat dan catatan relokasi ke executable " +"yang disediakan. Jalur di atas dipersingkat untuk tampilan." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Baca perkalian dan pembagian cincin" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} memegang indeks peluru. Pergeseran mengalikannya dengan 256, kemudian " +"pembagian menggunakan hitungan yang dibaca dari {ph1}. Nama sumber yang " +"dipertahankan bidang itu {ph2}. Urutan lengkapnya muncul di bawah ini." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Temukan di mana polanya mengarah ke pemain" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Operan instruksi mengekspos dua perbedaan koordinat dan pembantu arah. Nilai" +" pengembaliannya ditambahkan ke sudut cincin relatif. Nama sumber membuat " +"alamat tersebut dapat dibaca; REA memungkinkan agen memeriksa operasi asli " +"di belakangnya." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Dari perakitan ke C++yang dapat dibaca" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Pilih langkah untuk mencocokkan instruksi asli dengan perhitungan sudut. " +"Ringkasan ini mengikuti jalur aimed-ring; sumber lengkap juga menangani " +"penyebaran, tumpukan, dan pola acak." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Indeks" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Ruang" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Tujuan" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Putar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Toko" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * instruksi 16-bit asli" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "C++ yang dapat dibaca * ringkasan aimed-ring" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * Baca indeks poin.{ph1} Argumen tumpukan dimuat ke dalam {ph2}. " +"Dalam cincin 16 peluru, indeks anggota ini berjalan dari 0 hingga 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Beri jarak arah di sekitar belokan penuh.{ph1} {ph2} dikalikan " +"dengan 256. Hitungannya nol-diperpanjang menjadi sebuah kata, lalu {ph3} " +"membagi produk dengan hitungan itu. Untuk hitungan 16, setiap indeks " +"memajukan 16 satuan sudut." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * Tambahkan arah pemutar.{ph1} Kedua pengurangan tersebut membentuk " +"koordinat pemain-minus-asal. Helper arah mengembalikan sudut dalam {ph2}; " +"menambahkannya mengubah seluruh cincin ke arah pemain." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * Tambahkan rotasi pola.{ph1} {ph2} menambahkan sudut templat. " +"Templat awal Elly menyetelnya ke nol; pola lain dapat menggunakan helper " +"yang sama dengan rotasi." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Pertahankan sudut akhir dalam satu byte.{ph1} Toko menulis {ph2} " +"ke bidang spawn-angle. Nilai membungkus setelah 255, seperti yang dilakukan " +"oleh pemeran unsigned-byte. Sumber di sekitarnya juga mengubah sudut dan " +"kecepatan ini menjadi kecepatan." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"Majelis memilih cabang aimed-ring, perhitungan aim, dan penyimpanan akhir. " +"C++ di atas adalah ringkasan yang dapat dibaca. Pemeriksaan kompiler di " +"bawah ini berlaku untuk sumber yang dipelihara dalam proyek tertaut." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Baca sumber ring dan aim yang dipelihara" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Ring makro{ph1} · {ph2}Tujuan dan sumber kecepatan{ph3} · " +"{ph4}Representasi sudut{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Memeriksa sumber yang dipelihara" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"Pemeriksaan terekam proyek TH04 mengkompilasi kode pembuatan peluru, " +"termasuk pembantu ini, dengan rantai alat Turbo C++ 4.0 J yang disematkan." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2.139 byte yang cocok" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Kode pembuatan peluru yang dikompilasi cocok dengan bagian 2.139 byte dari " +"executable asli." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Dua bangunan bersih" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Dua build terpisah menghasilkan byte pencocokan yang sama. Hash input yang " +"direkam cocok dengan sumber yang dipelihara yang ditunjukkan di sini." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "Direkam pada 3 Oktober 2026. {ph0}Baca pemeriksaan kompilator{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Identitas target dan ruang lingkup analisis" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Target asli" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156.258 byte, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Entri pembantu" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} dalam gambar yang dimuat REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Offset berkas asli" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, dikembalikan oleh {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Pemeriksaan kode yang direkam" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 Oktober 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Pemeriksaan kompiler mencakup bagian kode bullet-add lengkap, termasuk " +"pembantu ini. Mereka juga membandingkan kontribusi PETANYA dan relokasi yang" +" tumpang tindih." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA memverifikasi gambar beban DOS statis pada segmen beban {ph0}. Alamatnya" +" menggambarkan gambar analisis itu. Hasil fungsi melaporkan 503 byte isi " +"dalam dua rentang dalam rentang 517 byte; instruksi yang dipilih di atas " +"terletak pada rentang yang dilaporkan tersebut." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Nama sumber dan pemeriksaan kompiler berasal dari pos pemeriksaan TH04 " +"{ph0}. Pengamatan rekonstruksi sebelumnya menggunakan skrip analisis proyek " +"itu sendiri; halaman ini menambahkan pemeriksaan REA baru dari target awal " +"yang sama. Identitas game yang disediakan disematkan oleh manifes " +"repositorinya, dengan asal pristine-dump independen masih terbuka." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"Gambar tersebut mengilustrasikan perhitungan sudut. Kontrol permainan " +"lengkap, pengaturan waktu, dan perilaku perangkat keras PC-98 memiliki " +"pemeriksaan runtime terpisah dalam proyek rekonstruksi." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "Rekonstruksi lengkap TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Proyek ini membangun empat produk DOS game dari maintained C++ dan assembly." +" Di luar pembuatan peluru, sumbernya mencakup tahapan, bos, rendering, " +"input, menu, akhiran, dan penanganan skor." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Jelajahi repositori TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Sumber pembuatan peluru{ph1}{ph2}Pembantu lengkap, jenis pola lain, dan" +" penyetelan templat.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}Panduan membangun dan menjalankan DOS{ph1}{ph2}Bangun sumber dan uji " +"dalam alur kerja emulator PC-98 proyek.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Status proyek saat ini{ph1}{ph2}Verifikasi DOS dan port x64 asli yang " +"terpisah.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "Rekayasa Balik TH04: Pola Peluru DOS-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Periksa kode DOS 16-bit asli TH04 dengan REA . Ikuti perakitan dan pulihkan " +"C++ untuk melihat bagaimana cincin peluru ditempatkan dan diarahkan ke " +"pemain." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "Di halaman ini" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "Studi kasus pola peluru TH04" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Salin prompt contoh TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 memperbaiki dan mengarahkan cincin peluru; gulir secara horizontal pada" +" layar yang lebih kecil" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Dua diagram cincin 16 peluru. Cincin tetap dimulai pada sudut nol. " +"Menambahkan arah pemain sebanyak 40 memutar setiap arah dengan jumlah yang " +"sama; poin-poin pertama yang disorot mengarah ke pemain. Keduanya menjaga " +"jarak 16 unit sudut, atau 22,5 derajat." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Salin templat penembakan TH04" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Ikuti perhitungan cincin bertujuan TH04" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Salin kutipan perakitan TH04" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Salin perhitungan aimed-ring yang dapat dibaca" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Kembali ke atas" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Salin" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Disalin" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Dipilih" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Kode disalin ke papan klip." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Kode dipilih. Gunakan keyboard Anda untuk menyalinnya." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA di GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Jarak {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Pukul kaktus. Coba kecepatan lain." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Ruang atau Melompat ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Mainkan lagi" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Main" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Jeda" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Tekan Putar, lalu lompati kaktus." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "Pukul kaktus. Tekan Putar lagi, atau ubah kecepatan dan mulai ulang." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Lari. Ruang atau Lompatan membersihkan kaktus." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Berhenti sebentar. Tekan Putar untuk melanjutkan." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Kecepatan tetap: {speed}. Ruang atau Lompatan membersihkan kaktus." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Kecepatan tetap: {speed}. Tekan Putar untuk mencobanya." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Aturan yang dipulihkan: mulai dari 6, lalu tingkatkan menjadi 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Kecepatan tetap: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Memutar ulang aturan yang dipulihkan. Keempat nilai cocok dengan pemeriksaan" +" game asli yang dikontrol saat dibulatkan menjadi tiga desimal." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"Pemutaran ulang berbeda dari nilai game asli yang direkam. Bandingkan aturan" +" kecepatan dan pengaturan di atas." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} detik" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} detik, blok waktu {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Perhitungan interaktif tidak tersedia di browser ini. Contoh menunjukkan " +"kode pada 59 detik." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Memeriksa…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} cek lulus (enam kasus referensi, pada enam dan delapan " +"digit)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "Tidak dapat menjalankan pemeriksaan referensi. Coba lagi." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Seorang analis berpikir di depan komputer" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Satu cek mengungkapkan satu karakter" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"Topeng ketujuh hanya memilih posisi 21 dalam kisi masukan enam kali enam. " +"Kode karakternya harus sama dengan 55, jadi karakternya adalah 7. Topeng " +"lainnya memilih posisi yang berbeda dan memberikan persamaan lebih lanjut." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "Cek ketujuh. Label sel adalah posisi input, mulai dari 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Topeng yang dikodekan: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Lewati 21 sel. Pilih 1. Lewati 14. Berhenti di 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Hanya satu sel dalam jumlah ini" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "Posisi 21 pada bendera harus berisi 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Dipilih: satu sel" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 topeng memberikan 26 persamaan." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Selesaikan bersama untuk menemukan flag." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "Investigasi panci suara DX-Ball" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA menyediakan bukti instruksi, pemanggil, dan pembacaan byte untuk satu " +"fungsi DX-Ball. Input tumpukan dikalikan dengan 1,5625, diimbangi dengan " +"500, diskalakan, dan dikonversi menjadi bilangan bulat. C yang dipertahankan" +" diperiksa dalam 3.205 kasus x86 asli dan replay kompiler 63-byte terpisah." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Stack" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "input x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "Integer" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "kembali" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Fungsi hasil rekonstruksi" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "Kode C terawat" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Saat benturan" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Kode asli" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "bandingkan" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3.205 kasus" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Build VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 byte cocok" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "Alur investigasi REA" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Ajukan pertanyaan tentang target lokal. REA memeriksa dan menelusuri " +"melalui adaptor analisis lokal, mengembalikan bukti, dan mendukung " +"pertanyaan lanjutan saat agen Anda menjelaskan, menerapkan, dan menguji." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Tanya" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Agen + target lokal" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "App / file / browser" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Analisis dan lacak" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Baca bukti" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Kode / referensi /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "hal yang belum jelas" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Terapkan" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Agen Anda" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Jelaskan / buat / uji" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Alat analisis" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Adaptor analisis lokal" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Pertanyaan lanjutan" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: mengatur jarak dan mengarahkan cincin peluru" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Putaran searah jarum jam penuh memiliki 256 satuan sudut. Enam belas peluru " +"dimulai dari sudut nol, enam belas, tiga puluh dua, hingga 240. Menambahkan " +"contoh arah pemain dari empat puluh mengubah keenam belas arah menjadi satu;" +" poin-poin pertama ditujukan kepada pemain. Rotasi templat adalah nol." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Cincin tetap" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Peluru pertama: sudut 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Cincin bertujuan" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Peluru pertama: arah pemain" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Pusat" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Pemain" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Jarak yang sama: 256 ÷ 16 = 16 satuan sudut = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Studi kasus" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Mulai" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Panduan" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Kode sumber" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Lisensi MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Gabung komunitas" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Ikuti di X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * sumber skrip yang dipilih" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Kode sumber" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Keluaran formatter yang diharapkan" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Instruksi" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Penelepon" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Konstanta" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Fungsi C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Tombol" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "Preload API" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "Berkas CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Klik Anda" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Permintaan yang ditangkap" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Skrip ekspor" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "Hasil REA * ringkasan.kutipan ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "Kutipan instruksi REA · 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "Kutipan penelepon REA · 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "Hasil byte REA * ditafsirkan sebagai ganda little-endian" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Kutipan C · yang dipulihkan" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Lihat cara kerja REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Panduan pemasangan" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Menampilkan →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Pengaturan yang dipilih dari skrip yang diinspeksi" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Ringkasan yang dapat dibaca dari % handler" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * instruksi asli yang dipilih" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "ID Operator * Sumber Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Ikuti @ reatools di X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA →" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → agen * metode dan penelepon" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * Java yang didekompilasi yang dipilih" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Ringkasan yang dapat dibaca * interpretasi agen" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP, isi lengkap" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Unduh Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Unduh penyedia analisis Android" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA →" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → agen * instruksi yang dipilih" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Agen → REA * read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA →" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Eksekusi asli * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Unduh tantangan asli" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Unduh pemecah" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "Hasil REA * kutipan pseudocode" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agent → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA excerpt agen · kutipan instruksi" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA excerpt agen · kutipan penelepon" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Agen → REA * dua {ph0} permintaan" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "Hasil byte REA * diterjemahkan sebagai ganda" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Mulailah dengan target Anda sendiri" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Menghasilkan kode" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Aturan yang dipulihkan" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Jam yang dapat disesuaikan" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Biner" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Memeriksa kode" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Persamaan" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Benar!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Dapat dieksekusi" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "Temuan REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Dipulihkan C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Validasi" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Aplikasi yang dikemas" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "Exposed API" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "IPC wrappers" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Papan klip" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Kode DOS asli" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "Instruksi REA" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Perhitungan sudut" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Cincin peluru" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "Exposed page API" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Panggilan IPC perender" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Dikirim ke papan klip sistem" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Disimpan secara lokal oleh Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Masukan penurunan harga" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Keluaran parser terstruktur · kutipan" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Analisis aplikasi Anda sendiri" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA →" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agent → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA excerpt agen · kutipan instruksi" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Hasil fungsi yang sama * kutipan tujuan" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "C++yang dipertahankan sesuai" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Makro cincin * cabang TH04, kutipan" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Sudut dan kecepatan * kutipan sumber" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Tekan % untuk melihat apa yang terjadi pada 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% dari 200 adalah 20. Tekan = untuk menambahkannya." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "Untuk perkalian, 10 menjadi 0,1. Tekan = untuk mengalikan." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"Terjemahan sedang diperbarui. Baca halaman ini dalam bahasa Inggris untuk " +"saat ini." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk menganalisis {ph3} dan jelaskan bagaimana " +"ia mengekspor data. Tampilkan kode dan lokasi sumber yang " +"relevan.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Pasang REA dan hubungkan ke agen pemrograman ini menggunakan" +" {ph3}. Tampilkan rencana perubahan dan tunggu persetujuan saya sebelum " +"menjalankannya. Setelah itu, verifikasi pemasangan.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}Unduh {ph3} ke dalam folder contoh baru dan buka kemasannya." +" Gunakan REA untuk menemukan apa yang terjadi ketika saya mengklik Ekspor " +"catatan. Tunjukkan dimana {ph4} ditulis, bidang mana yang dikandungnya, dan " +"file serta baris yang relevan.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Pasang REA dan hubungkan ke agen pemrograman ini menggunakan" +" {ph3}. Tampilkan rencana perubahan dan tunggu persetujuan saya sebelum " +"menjalankannya. Setelah itu, verifikasi pemasangan.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Pasang REA dan hubungkan ke agen pemrograman ini menggunakan" +" {ph3}. Tampilkan rencana perubahan dan tunggu persetujuan saya sebelum " +"menjalankannya. Setelah itu, verifikasi pemasangan.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa {ph3}. Mengkloning situs web ini" +" untuk saya.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Rekonstruksi · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"Dengan tersedianya {ph0} dan npm, jalankan penyiapan, pilih agen pengkodean " +"Anda, dan tinjau perubahan yang diusulkan." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Contoh yang disediakan · {ph0} dan npm · Agen pengkodean Anda" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Gunakan agen pengkodean seperti Claude Code, Codex atau Cursor. Anda akan " +"membutuhkan {ph0} dan npm; {ph1}panduan penyiapan mencantumkan versi yang " +"didukung{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Halaman · {ph1}{ph2}{ph3}Ekspor catatan{ph4}{ph5}Panggilan {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Jembatan * {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Mengirim pesan bernama ke " +"proses utama.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Handler · {ph1}{ph2}{ph3}Tulis {ph4}{ph5}{ph6}Memanggil pemformat dalam" +" {ph7} dan menulis file tersebut.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * baris 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Prediksi CSV untuk not dengan id 1 dan judul {ph3}. Kemudian" +" jalankan contohnya {ph4} formatter dengan {ph5} untuk memeriksanya. " +"Tampilkan prediksi dan keluaran aktual.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Judul tetap dalam satu bidang yang dikutip; setiap tanda kutip digandakan. " +"Ini memeriksa pemformat secara langsung dengan {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV formatter" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Anda akan membutuhkan {ph0} 22 (22.19+), 24 (24.11+) atau 26+. npm hadir " +"dengan {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "Tidak memiliki {ph0}, atau tidak yakin?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Jika {ph0} mencetak v22. 19+, v24. 11+ atau v26+, Anda sudah siap. Jika " +"mencetak versi yang lebih lama atau\" tidak dikenali \" / \"perintah tidak " +"ditemukan\", instal {ph1} 24 PT:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} · contoh kutipan sumber" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Buka contohnya{ph1} · {ph2}Unduh {ph3}{ph4} · {ph5}Unduh {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * contoh sumber" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Unduh contohnya dan unzip. Arsip berisi yang lengkap {ph0} map. Analisislah " +"dengan {ph1} dan npm; Electron tidak diperlukan untuk contoh ini." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Pertama kali, atau hilang {ph0} atau agen pengkodean? {ph1}Ikuti panduan " +"penyiapan langkah demi langkah →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "Contohnya: {ph0}mengapa Kalkulator menghasilkan 220 untuk {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa Windows Kalkulator. Mengapa " +"{ph3} menghasilkan 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * dimuat {ph0} * baris yang dipilih" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Kami melihat alasannya {ph0}{ph1} memberi 220.{ph2} Sekarang mari kita " +"pulihkan aturan untuk + dan × " + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA membaca {ph1}{ph2}{ph3}Ini meluncurkan aplikasi " +"Kalkulator{ph4}{ph5}Kode terbuka {ph6}. Agen kemudian memilih pustaka " +"aplikasi yang diinstal.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa aegis-v3. 4. {ph3}. Temukan cara" +" menghasilkan kode login enam digit, jelaskan mengapa kode tersebut berubah " +"setiap 30 detik, dan buat ulang demo kecil di mana saya dapat mengubah " +"waktu.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} * Anggota API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} * Pembantu IPC" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "utama/{ph0} * pembantu penangan" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "utama/{ph0} * penerima papan klip" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Rekonstruksi * kecepatan dino.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Dengan tersedianya Node.js dan npm, jalankan penyiapan, pilih agen " +#~ "pengkodean Anda, dan tinjau perubahan yang diusulkan." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Contoh yang disediakan · Node.js dan npm · Agen pengkodean Anda" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Gunakan agen pengkodean seperti Claude Code, Codex atau Cursor. Anda akan " +#~ "membutuhkan Node.js dan npm; {ph0}panduan penyiapan mencantumkan versi yang" +#~ " didukung{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Halaman * penyaji.js{ph1}{ph2}Ekspor catatan{ph3}{ph4}Panggilan " +#~ "{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Jembatan * preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Mengirim pesan bernama ke" +#~ " proses utama.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Pengendali * utama.js{ph1}{ph2}Tulis catatan.csv{ph3}{ph4}Memanggil " +#~ "pemformat dalam {ph5} dan menulis file tersebut.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Memprediksi CSV untuk catatan dengan id 1 dan judul " +#~ "Halo,\"REA\". Kemudian jalankan formatter toCsv contoh dengan Node.js untuk " +#~ "memeriksanya. Tampilkan prediksi dan keluaran aktual.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Judul tetap dalam satu bidang yang dikutip; setiap tanda kutip digandakan. " +#~ "Ini memeriksa pemformat secara langsung dengan Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV formatter" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Anda akan membutuhkan Node.js 22 (22.19+), 24 (24.11+) atau 26+. npm datang " +#~ "dengan Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "Tidak memiliki Node.js, atau tidak yakin?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Jika {ph0} mencetak v22. 19+, v24. 11+ atau v26+, Anda sudah siap. Jika " +#~ "mencetak versi yang lebih lama atau\" tidak dikenali \" / \"perintah tidak " +#~ "ditemukan\", instal Node.js 24 PT:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Buka contohnya{ph1} · {ph2}Unduh ekspor.js{ph3} · {ph4}Unduh " +#~ "catatan.json api{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Unduh contohnya dan unzip. Arsip berisi yang lengkap {ph0} map. Analisislah " +#~ "dengan Node.js dan npm; Electron tidak diperlukan untuk contoh ini." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Pertama kali, atau hilang Node.js atau agen pengkodean? {ph0}Ikuti panduan " +#~ "penyiapan langkah demi langkah →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "" +#~ "Contohnya: {ph0}mengapa Kalkulator menghasilkan 220 untuk 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa Windows Kalkulator. Mengapa 200 " +#~ "+ 10% menghasilkan 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Kami melihat alasannya {ph0}200 + 10% memberi 220.{ph1} Sekarang mari kita " +#~ "pulihkan aturan untuk + dan × " + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA membaca calc.exe{ph1}{ph2}Ini meluncurkan aplikasi " +#~ "Kalkulator{ph3}{ph4}Kode terbuka {ph5}. Agen kemudian memilih pustaka " +#~ "aplikasi yang diinstal.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa aegis-v3. 4. 3.apk. Temukan cara" +#~ " menghasilkan kode login enam digit, jelaskan mengapa kode tersebut berubah " +#~ "setiap 30 detik, dan buat ulang demo kecil di mana saya dapat mengubah " +#~ "waktu.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/pramuat.anggota js * API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/pramuat.js * IPC helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "utama / indeks.js * handler helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "utama / indeks.js * penerima papan klip" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "utama.js * baris 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "ekspor.js * contoh kutipan sumber" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "penyaji.js * contoh sumber" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "preload.js * contoh sumber" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "utama.js * contoh sumber" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * indeks yang dimuat.js * baris yang dipilih" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Gunakan REA untuk menganalisis / absolute / path/to / app " +#~ "dan menjelaskan cara mengekspor data. Tampilkan kode dan lokasi sumber yang " +#~ "relevan.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instal REA dan hubungkan ke agen pengkodean ini menggunakan " +#~ "npx agen rea@pengaturan terbaru. Tunjukkan rencana penyiapan untuk " +#~ "persetujuan, lalu verifikasi penginstalan.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Unduh https://rea.tools/examples/notes-example.zip ke dalam " +#~ "folder contoh baru dan buka kemasannya. Gunakan REA untuk menemukan apa yang" +#~ " terjadi ketika saya mengklik Ekspor catatan. Tunjukkan di mana catatan.csv " +#~ "ditulis, bidang mana yang dikandungnya, dan file serta baris yang " +#~ "relevan.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instal REA dan hubungkan ke agen pengkodean ini menggunakan " +#~ "npx agen rea@pengaturan terbaru. Tunjukkan rencana penyiapan untuk " +#~ "persetujuan, lalu verifikasi penginstalan.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instal REA dan hubungkan ke agen pengkodean ini menggunakan " +#~ "npx agen rea@pengaturan terbaru. Tunjukkan rencana penyiapan untuk " +#~ "persetujuan, lalu verifikasi penginstalan.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Gunakan REA untuk memeriksa https://rea.tools/. Mengkloning " +#~ "situs web ini untuk saya.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "kode[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× " + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0} REA{ph1}{ph2}Merekayasa Balik Apa Pun{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/it/messages.po b/website/locales/it/messages.po new file mode 100644 index 000000000..a78a15057 --- /dev/null +++ b/website/locales/it/messages.po @@ -0,0 +1,13472 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Casa{ph1} / Blog" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blog." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Riflessioni sul reverse engineering." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Gioco ricostruzione{ph0}Saggio" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "La rivoluzione industriale nel reverse engineering" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"Che manuale RE e ricostruire TH08, TH095 e TH04 mi ha insegnato circa gli " +"agenti, la verifica e la conoscenza che composti attraverso i progetti." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Leggi l'articolo" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Di N0zoM1z0 * 10 ottobre 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Cima" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA Blog-Pensieri sul Reverse Engineering" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Pensieri sul reverse engineering, attingendo all'esperienza pratica con REA " +"e agenti AI." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-Scopri come funziona il software. Reverse engineering con il tuo agente " +"di codifica." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Home di REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Navigazione principale" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA su GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Unisciti a REA su Discord" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Segui REA su X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Casa{ph1} / {ph2}Blog{ph3} / Touhou ricostruzione" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Saggio * Touhou ricostruzione" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "La rivoluzione industriale nel reverse engineering." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Di N0zoM1z0 * 10 ottobre 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Punti chiave" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Dare agli agenti autonomia sulle indagini.{ph1} Imposta un obiettivo " +"chiaro e criteri di accettazione, quindi lascia che l'agente decida cosa " +"provare dopo." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Usa il repository e Git come memoria di lavoro.{ph1} Mantenere il " +"ragionamento con il codice. I checkpoint Git consentono alla sessione " +"successiva di continuare dopo la fine della conversazione." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Lascia che le prove decidano cosa affermi.{ph1} Una spiegazione sicura " +"ha ancora bisogno di test. \"Sconosciuto\" è una risposta valida quando le " +"prove sono incomplete." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Prova anche il riferimento di verifica (oracle).{ph1} Prova i casi che " +"dovrebbe rifiutare. Se manca un bug, rivisitare i risultati precedenti che " +"dipendevano da esso." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Siamo agli inizi della rivoluzione industriale di RE.{ph1} I metodi " +"stanno ancora prendendo forma. C'è ancora molto da esplorare." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Come composti esperienza" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Direzione umana{ph1} * Obiettivi e criteri di accettazione" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Autonomia" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Agente" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Scegli un esperimento.{ph0}Proponi un'ipotesi." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Verifica" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Riferimento di verifica" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Test contro a{ph0}riferimento concreto." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Repository" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Memoria di lavoro" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Codice, prove,{ph0}controlli e lezioni." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Disadattamento{ph0}{ph1}Rivedere l'ipotesi{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Wells{ph0}{ph1}punto di partenza{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Riutilizzo" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Passare{ph1} * Mantenere il risultato e le sue prove" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Ogni progetto lascia il successivo con un punto di partenza migliore. Ciò " +"include fissare i controlli quando scopriamo una lacuna." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "In questo articolo" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Agosto 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08: la continuazione{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Due approcci{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095: compounding{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: tra architetture{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}Da esatto a leggibile{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Il cambiamento industriale{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Cosa diventa possibile{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Cosa è cambiato nell'agosto 2026" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Prima di questo lavoro, avevo fatto un sacco di reverse engineering manuale." +" Vorrei ispezionare una funzione fino a quando non ho avuto una spiegazione," +" quindi testare quella spiegazione contro il programma. Ottenere " +"ulteriormente significava spendere più del mio tempo sulla funzione " +"successiva. Significava anche mantenere un quadro sempre più grande nella " +"mia testa." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"La maggior parte del mio lavoro è sui giochi. Li ricostruisco in modo che il" +" loro comportamento possa essere compreso e alla fine portato in una porta " +"software o in un mod. Questa è l'esperienza dietro questo articolo. Il " +"metodo può essere utile altrove, ma ogni campo deve stabilire cosa può " +"verificare con un riferimento affidabile." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"Nel mese di agosto 2026, Ho iniziato ad esplorare RE agente-driven " +"seriamente. Volevo vedere fino a che punto un agente potesse arrivare con " +"l'accesso al programma e agli strumenti di sviluppo ordinari. Touhou " +"ricostruzione mi ha dato un progetto sostanziale in cui scoprire." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"I primi progressi sono stati sorprendenti. Un'indagine potrebbe continuare " +"senza che io scelga ogni singolo passo. Un confronto non riuscito potrebbe " +"inviare l'agente a un altro chiamante. Potrebbe scrivere una piccola " +"diagnostica e utilizzare il risultato per decidere cosa provare dopo. " +"Dandogli quella libertà ha fatto la differenza: potrei dedicare più " +"attenzione alla direzione del progetto e se i suoi controlli fossero " +"affidabili." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"Il ritmo ha attirato la mia attenzione per primo. Poi ho iniziato a " +"chiedermi cosa sarebbe sopravvissuto oltre il progetto attuale. Il prossimo " +"gioco trarrà beneficio da tutto ciò che abbiamo appena imparato?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: costruire sul lavoro umano" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08 {ph1}, Imperituro Notte, è iniziata come una continuazione di " +"{ph2} La ricostruzione di GensokyoClub{ph3}. La loro fonte pubblica mi ha " +"dato un fondamento sostanziale. È venuto con la conoscenza della costruzione" +" e una storia di contributi che ho conservato nella continuazione." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"La storia importata termina al checkpoint pubblico 10 Agosto. La mia " +"continuazione indipendente è iniziata il 13 agosto. Entro il 19 agosto, il " +"libro mastro ha registrato la fonte per tutte le 1.107 funzioni di gioco " +"identificate." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Una porta di ricostruzione Linux giocabile è stata impegnata il 24 agosto, " +"circa undici giorni dopo l'inizio della continuazione. Ne è seguita " +"un'edizione Web. La versione nativa Linux a 64 bit è arrivata il 30 agosto." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Quello che mi ha colpito è che il lavoro aveva raggiunto un programma che la" +" gente poteva eseguire. Per arrivarci sono stati necessari problemi " +"successivi oltre una singola funzione. Anche quando due funzioni sembravano " +"corrette in isolamento, potevano accidentalmente utilizzare copie separate " +"di stato che avrebbero dovuto essere condivise." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Ciò ha reso i controlli di riferimento centrali per il lavoro. Li chiamo " +"{ph0}riferimenti di verifica (oracoli){ph1}. Un confronto di codice può " +"dirci se una funzione ricostruita riproduce le istruzioni originali. Un " +"controllo di runtime può dirci se un percorso esercitato raggiunge lo stato " +"previsto. L'agente propone una spiegazione e la mette alla prova; una " +"mancata corrispondenza gli dà qualcosa di specifico da indagare." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Una corrispondenza esatta con la costante sbagliata" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Un riferimento di verifica (oracle) è un software che qualcuno ha scritto. " +"TH08 mi ha dato un chiaro promemoria di quanto può dipendere da quel " +"software." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"Nel mese di settembre, un bug segnalato da una porta switch a valle ha " +"portato di nuovo alla voce auto-collection. La fonte ricostruita controllava" +" la potenza del giocatore contro {ph0}. L'originale usato {ph1}, la soglia " +"di potenza massima." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"La potenza normale non è negativa, quindi il controllo di potenza " +"ricostruito è stato effettivamente sempre soddisfatto. Sopra la linea di " +"raccolta, il gioco potrebbe attirare oggetti senza richiedere la massima " +"potenza. Le altre eccezioni nella condizione erano corrette. Questa costante" +" ha cambiato il comportamento." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}Eppure la funzione aveva già superato il confronto esatto.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Una ricostruzione può mettere una costante a un indirizzo diverso. Lo " +"strumento di confronto ha tenuto conto di ciò regolando gli indirizzi nelle " +"istruzioni compilate prima di confrontarli con l'originale. Ma non ha mai " +"controllato il valore in virgola mobile memorizzato nell'indirizzo di " +"riferimento." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Questo ha lasciato un buco nell'assegno. Potrebbe puntare l'istruzione " +"ricostruita a quella originale {ph0} mentre la fonte ha detto ancora {ph1}. " +"I byte di istruzione abbinati. La fonte ha significato qualcosa di diverso." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"Il {ph0}2 Settembre fix{ph1} corretto l'origine e fatto il confronto " +"controllare i byte effettivi della costante di riferimento. A {ph2}audit più" +" ampio{ph3} poi ha esaminato 1.548 riferimenti costanti in virgola mobile. " +"Ha trovato altri dodici riferimenti errati su cinque funzioni accettate." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"Il confronto ora controlla ogni costante in virgola mobile. I suoi test " +"includono valori deliberatamente errati per assicurarsi che vengano " +"rifiutati. Abbiamo anche dovuto rivedere i risultati che avevano superato il" +" controllo più debole." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}Anche il riferimento di verifica (oracle) doveva essere " +"ricostruito.{ph1} Ripararlo faceva parte della riparazione del gioco." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Questo è importante quando il team è per lo più una persona che lavora con " +"gli agenti. Non posso ispezionare personalmente ogni linea che producono, " +"quindi gran parte della mia fiducia si basa sui loro controlli. Un punto " +"cieco di un riferimento di verifica condiviso (oracle) può influenzare molte" +" indagini prima che me ne accorga. Devo capire cosa verifica effettivamente " +"il controllore e testarlo contro casi che dovrebbero fallire." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"Man mano che il lavoro continuava, quei controlli divennero parte del " +"repository. Così hanno fatto i motivi per le modifiche alla fonte e le note " +"che hanno lasciato che una sessione successiva riprendesse dove si fermava " +"una precedente. {ph0}Il repository del codice sorgente stava diventando la " +"memoria di lavoro del progetto.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Un batch di successo ci ha dato sia il codice recuperato che un " +"ambiente migliore per il batch successivo.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Due diverse idee di ricostruzione" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"Di GensokyoClub {ph0}pubblico LEGGIMI{ph1} rende esplicito il suo disaccordo" +" con questo tipo di lavoro. L'avviso annuncia che ulteriori sviluppi " +"avverranno privatamente fino al completamento. Un passaggio recita:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"L'ascesa di grifters (AI decompilations and ports) in questo spazio che " +"prende dal nostro lavoro dipinge una cattiva immagine per i futuri sforzi di" +" decompilazione…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"L'avviso descrive anche il pedaggio psicologico sui manutentori. La loro " +"politica di contributo esclude le richieste pull prodotte principalmente con" +" l'IA. Hanno messo il loro tempo libero in un lavoro difficile, e quel " +"lavoro ha contribuito a rendere possibile la mia continuazione. Rispetto lo " +"sforzo che c'è dietro. Il disaccordo che voglio discutere riguarda come " +"dovrebbe procedere la ricostruzione e come dovrebbe essere giudicato un " +"contributo." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"Nel flusso di lavoro manuale che conoscevo, sviluppare una comprensione di " +"una funzione e ricostruirla di solito cadeva nella stessa persona. Un " +"progetto si basava molto sull'esperienza di quella persona. La fiducia nel " +"contributore contava perché gran parte del ragionamento accadeva mentre " +"lavoravano." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"I progetti esistenti conservano già la conoscenza nella loro fonte e " +"costruiscono strumenti. Ciò che è cambiato per me è che un agente potrebbe " +"usare quella conoscenza per perseguire la prossima indagine da solo." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"Nella mia continuazione, decido l'obiettivo e lo standard per accettare un " +"risultato. L'agente ha ampia libertà di investigare. La sua ricostruzione " +"proposta deve quindi sopravvivere ai relativi controlli. Voglio che un'altra" +" persona sia in grado di esaminare il motivo per cui abbiamo scelto " +"un'implementazione, anche se un agente ha fatto la maggior parte del lavoro." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Questa può essere una transizione difficile. Anni di attento lavoro possono " +"diventare la base per una continuazione che si muove molto più velocemente. " +"Ciò solleva domande reali sul credito. Cambia anche ciò che i manutentori " +"devono sapere prima di accettare un contributo." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"L'analogia industriale mi aiuta a pensare a questo. In un mestiere, gran " +"parte del processo dipende dall'abilità della persona che lo esegue. Le " +"macchine cambiano dove è necessaria questa abilità. Qualcuno deve ancora " +"progettare il processo e riconoscere quando il suo output è sbagliato. " +"Diverse comunità possono scegliere quanto di quel cambiamento vogliono " +"assumere." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"La mia scelta è di continuare apertamente, con l'opera ereditata accreditata" +" e la sua storia preservata. Voglio che il nuovo lavoro sia rivedibile. " +"Questo ci dà un modo per chiederci fino a che punto questo approccio può " +"andare e per imparare da ciò che va storto lungo la strada." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Fonte: di GensokyoClub {ph0}Avviso LEGGIMI{ph1}, controllato il 10 ottobre " +"2026, e la sua {ph2}politica contributiva{ph3}. La citazione è un estratto " +"abbreviato. Di TH08 {ph4}crediti e provenienza{ph5} registra il limite di " +"continuazione." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: l'esperienza inizia a comporre" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095 {ph1}, Spara il proiettile, ha reso il valore di " +"quell'esperienza molto più facile da vedere. Il suo repository è iniziato il" +" 29 agosto con zero funzioni di gioco confermate nel libro mastro. Dovevamo " +"ancora imparare il gioco. Ma sapevamo già molto di più su come iniziare una " +"ricostruzione e come mantenerla in movimento." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"Entro il 7 settembre, tutte le 697 funzioni di gioco identificate avevano " +"fonte. Entro l ' 8 settembre, 696 erano stati accettati come confronti " +"esatti. L'intero programma collegato il 9 settembre. La ricostruzione " +"Windows i386 è stata contrassegnata come giocabile il 10 settembre, circa " +"dodici giorni dopo l'inizializzazione." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Ho trovato questo più eccitante della velocità del primo progetto. Un nuovo " +"obiettivo potrebbe beneficiare del lavoro svolto su un altro gioco. " +"L'esperienza era già presente negli strumenti e nel modo in cui il progetto " +"è stato organizzato." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Ad esempio, TH08 ci aveva insegnato a prestare attenzione al programma " +"assemblato in anticipo. Se diverse funzioni recuperate dipendono dallo " +"stesso stato, i loro confronti isolati lasciano aperta una domanda " +"importante. Dobbiamo vederli lavorare insieme. Quella lezione ha contribuito" +" a modellare il modo in cui ci siamo avvicinati alla compilazione " +"dell'intero programma di TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Una lezione che rimane nella mia testa è utile mentre sono lì. Una volta che" +" diventa un controllo che un'altra sessione può eseguire, può continuare ad " +"aiutare dopo che sono andato avanti. L'agente successivo può utilizzare il " +"risultato senza ripetere l'indagine che lo ha portato." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Il bug costante in virgola mobile appartiene anche a quella memoria. Spiega " +"perché il controllo di un riferimento richiede anche il controllo dei dati " +"dietro di esso. Mantenere tale correzione con il codice aiuta i progetti " +"successivi a evitare di ereditare il punto cieco del vecchio controllo." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}Il metodo diventa parte del materiale di partenza per la prossima " +"partita.{ph1} Possiamo spendere di più dello sforzo del prossimo progetto su" +" ciò che è effettivamente nuovo sul suo obiettivo." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Lo stesso vantaggio è disponibile per le persone che si uniscono in seguito." +" Possono ispezionare una decisione e rieseguirne il controllo prima di " +"continuare il lavoro. Non devono ricostruire la storia dell'intero progetto " +"per scoprire perché la fonte sembra il modo in cui lo fa." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: il flusso di lavoro sopravvive a un'architettura diversa" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04 {ph1}, Lotus Land Story, ha portato questo lavoro nell'era DOS " +"PC-98. L'obiettivo era ora un ambiente a 16 bit con quattro programmi " +"cooperanti. La comprensione del suo comportamento hardware richiedeva prove " +"diverse dai giochi Windows. Esistente {ph2}ReC98 lavoro{ph3} ci ha dato " +"preziose conoscenze e materiale sorgente anche qui." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"La ricostruzione del DOS sta funzionando. Nel mio test manuale, ho giocato " +"percorsi normali completi attraverso i loro finali e controllato i " +"salvataggi. Il lavoro corrente è una porta nativa a 64 bit. Stabilire una " +"versione DOS funzionante prima dà a quella porta un riferimento." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"L'architettura ha cambiato ciò che avevamo bisogno di indagare. Ha anche " +"cambiato il compilatore e il runtime rispetto al quale abbiamo controllato " +"il nostro lavoro. Ma l'agente potrebbe ancora seguire una domanda fino a un " +"risultato e lasciare che quel risultato guidi il prossimo esperimento." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Considera il passaggio dal gameplay a un finale. Dobbiamo sapere quale stato" +" attraversa quel confine e quale programma ne è responsabile. Questo è " +"qualcosa che possiamo indagare contro il prodotto DOS. Una volta che le " +"prove e i controlli sono disponibili, un agente può elaborare la domanda " +"come ha fatto su un titolo Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"Questo è il motivo per cui TH04 è importante per l'argomento. Un cambiamento" +" sostanziale della piattaforma non ci ha costretto a ricominciare da capo " +"con un nuovo modo di lavorare. L'architettura ha definito il problema; il " +"flusso di lavoro ci ha comunque dato un modo per risolverlo." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Per la porta a 64 bit, possiamo ora esaminare la nuova implementazione " +"contro il comportamento già recuperato su DOS. La conoscenza della " +"ricostruzione dà al porto qualcosa su cui costruire." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Stato del progetto al 10 ottobre 2026: {ph0}Ricostruzione DOS e test " +"manuale{ph1} · {ph2}porta a 64 bit{ph3}. Il porto è ancora in fase di " +"sviluppo." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Dal codice esatto al codice leggibile" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Una volta che una ricostruzione funziona, voglio che qualcun altro sia in " +"grado di capirlo." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Per me, assemblaggio e offset grezzi possono sembrare vecchi amici. Mi rendo" +" conto che questa è una definizione leggermente insolita di \" " +"leggibile.\"La maggior parte delle persone preferirebbe seguire la logica " +"del gioco senza tenere in mente il layout della memoria dell'eseguibile." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"Ecco dove {ph0}ricostruzione semantica{ph1} entrare. Un campo recuperato può" +" ancora essere conosciuto principalmente dal suo offset. Seguiamo come il " +"gioco lo utilizza fino a quando non possiamo spiegare il suo ruolo. Quindi " +"possiamo dargli un nome significativo e un tipo che si adatta alle prove. " +"Manteniamo il ragionamento con la fonte in modo che la prossima persona " +"possa vedere da dove proviene quell'interpretazione." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Questo diventa particolarmente importante per una porta software. Un " +"indirizzo assoluto mi dice dove viveva qualcosa nel vecchio eseguibile. Dà " +"un piccolo aiuto all'implementazione a 64 bit nel decidere quale oggetto " +"dovrebbe possedere quello stato. Per spostare il comportamento in modo " +"sicuro, abbiamo bisogno di recuperare la relazione dietro il vecchio accesso" +" alla memoria." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "L'ordine che ora uso è:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Recuperare una linea di base esatta.{ph1} Compilare i pezzi ricostruiti" +" con il compilatore storico. Confronta il codice e i dati rilevanti con " +"l'eseguibile originale. Registra le differenze irrisolte in modo che la fase" +" successiva abbia un chiaro punto di partenza." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Costruire e giocare sulla piattaforma originale.{ph1} Collega questi " +"pezzi al programma reale usando l'architettura e il compilatore originali. " +"Esercitare importanti percorsi di gioco. È qui che possiamo trovare problemi" +" con lo stato condiviso o l'inizializzazione che un confronto di funzioni " +"isolato ha mancato." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Ricostruire la semantica contro entrambi i riferimenti.{ph1} Prendi una" +" parte coerente del gioco alla volta e stabilisci cosa significa la sua " +"fonte recuperata. Migliora la sua rappresentazione preservando i confronti " +"esatti e la build storica giocabile." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Rendere il porto moderno.{ph1} Spostare il comportamento stabilito nel " +"nuovo ambiente, ad esempio una build nativa a 64 bit. Il gioco a piattaforma" +" originale ricostruito rimane un riferimento per confrontare come si " +"comporta la porta." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"La build giocabile dal secondo stadio diventa un {ph0}secondo riferimento di" +" verifica (oracle){ph1} durante il terzo. Il primo riferimento di verifica " +"(oracle) verifica se la nostra fonte modificata riproduce ancora il codice e" +" i dati originali pertinenti. Il secondo verifica che il programma " +"ricostruito costruisca e si comporti correttamente lungo i percorsi che " +"esercitiamo." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Prendono diversi errori. Una modifica del tipo può alterare le istruzioni " +"generate. Un cambio di proprietà può lasciare due parti del gioco " +"utilizzando diverse copie di stato. Mantenere entrambi i controlli " +"disponibili dà all'agente un fallimento concreto per indagare prima di " +"portare un refactor ulteriormente." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Un nome ha bisogno di prove proprie. Un confronto esatto non può dirci se un" +" campo significa davvero \"tempo di invulnerabilità\".\"Dobbiamo stabilirlo " +"da come il gioco lo scrive e lo usa. Se il significato rimane incerto, un " +"nome neutro è più utile al prossimo lettore di un'ipotesi sicura." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Abbiamo imparato questo ordine attraverso i progetti. TH08 aveva già porte " +"giocabili prima di alcuni dei suoi successivi audit della piattaforma " +"storica. Ciò ha reso alcuni difetti più difficili da vedere. Il {ph0}Flusso " +"di lavoro corrente della fabbrica{ph1} mette al primo posto la build della " +"piattaforma originale, quindi il lavoro semantico può usarlo come " +"riferimento prima dell'inizio del porting." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}La ricostruzione esatta ci dà un riferimento. La ricostruzione " +"semantica rende fruibile la conoscenza recuperata.{ph1} Una porta può quindi" +" costruire su entrambi." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Cosa rende questo un cambiamento industriale" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Questi progetti sono cambiati dove ho speso la mia attenzione. Una volta che" +" gli agenti hanno potuto portare avanti molte indagini, migliorare il loro " +"ambiente di lavoro è diventata una delle cose più utili che potessi fare. " +"Uno strumento migliore potrebbe aiutare con ogni funzione successiva che ne " +"aveva bisogno." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"L'autonomia conta qui. L'utile passo successivo diventa spesso chiaro solo " +"dopo un esperimento fallito. Un agente ha bisogno di abbastanza libertà per " +"seguire quel risultato da qualche parte inaspettato. Se deve aspettare che " +"io prescriva ogni passo, gran parte del lavoro rimane legato alla mia " +"attenzione." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Mi aspetto che l'agente faccia ipotesi sbagliate. Ciò che conta è se " +"possiamo testarli e imparare dal risultato. Un controllo fallito dovrebbe " +"aiutare a capire l'errore abbastanza bene da riprovare. Devo ancora decidere" +" se le prove accumulate supportano una pietra miliare del progetto." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA consente all'agente di accedere agli strumenti di analisi. Una domanda " +"sul chiamante di una funzione può portare direttamente all'ispezione di quel" +" chiamante. Il progetto di ricostruzione fornisce il compilatore e i propri " +"controlli di riferimento. L'agente può usarli per testare la fonte che " +"propone e vedere dove regge la sua spiegazione." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"Il bug TH08 mostra perché quei controlli meritano attenzione ingegneristica." +" Quando lo stesso confronto viene utilizzato tra centinaia di funzioni, una " +"lacuna in esso può diffondersi molto più di un errore in un'implementazione." +" Testare il checker migliora il feedback disponibile per tutti i lavori " +"successivi." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"L'analogia industriale ha qui un utile esempio storico. Boulton e Watt hanno" +" introdotto un {ph0}indicatore del motore a vapore nel 1796{ph1} per aiutare" +" a regolare le valvole del motore. Una versione di registrazione tracciata " +"pressione attraverso la corsa del pistone. Ha reso il comportamento interno " +"del motore disponibile per l'ispezione. I nostri strumenti di confronto " +"hanno uno scopo simile: ci permettono di esaminare ciò che il macchinario " +"sta facendo mentre lo miglioriamo." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Siamo nelle prime fasi di questo cambiamento industriale.{ph1} Gran " +"parte dell'infrastruttura è ancora immatura. Gli agenti possono muoversi più" +" velocemente di quanto i nostri controlli siano stati progettati per " +"supportare, quindi il processo deve svilupparsi insieme a loro. Quando " +"troviamo un difetto in uno strumento condiviso, dobbiamo ripararlo e " +"rivedere i risultati che ha influenzato. Il prossimo progetto può quindi " +"ereditare uno strumento più forte." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"C'è anche un limite pratico a qualsiasi conversazione. Finirà prima che una " +"grande ricostruzione sia terminata. Il repository del codice sorgente deve " +"consentire a un'altra sessione di continuare senza perdere il motivo " +"dell'ultima decisione." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"Il {ph0}Touhou Ricostruzione Fabbrica{ph1} nasce da questo bisogno. Offre ai" +" progetti un modo condiviso per portare avanti i loro controlli e lezioni. " +"Lavorare su un gioco può migliorare le condizioni di partenza per un altro." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"Questo è ciò che rende l'analogia industriale significativa per me. " +"L'esperienza inizia a diventare parte di strumenti che gli altri possono " +"utilizzare. Migliorare questi strumenti cambia quanto la prossima persona—o " +"il prossimo agente-può fare." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "I progetti che possiamo ora considerare" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Il ritmo è importante perché cambia la decisione di iniziare. Un gioco " +"potrebbe essere affascinante da decodificare e richiedere ancora più " +"attenzione di quanto potrei realisticamente dargli. Molti progetti " +"rimarrebbero idee." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Ora posso vedere un modo per mantenere un tale progetto in movimento " +"attraverso ripetute indagini. Ottenere una ricostruzione funzionante rende " +"una porta software più pratica. Il recupero della semantica leggibile rende " +"più facile per qualcun altro esplorare un mod. Lo sforzo messo in " +"comprensione del gioco può continuare a pagare dopo la prima versione viene " +"eseguito." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Ora guardo un programma sconosciuto e chiedo: {ph0}quale accesso, feedback e" +" conoscenza accumulata permetterebbero a un agente di lavorare su questo in " +"modo affidabile?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Questa domanda mi fa prendere in considerazione progetti che in precedenza " +"avrei lasciato da solo. Ognuno può migliorare il modo in cui ci avviciniamo " +"al prossimo. Voglio continuare a esplorare fino a che punto ci può portare." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Pietre miliari e fonti del progetto" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Le date descrivono i punti di controllo del progetto registrati, controllati" +" rispetto alla cronologia pubblica di GitHub il 10 ottobre 2026. Il tempo " +"trascorso è il tempo del calendario tra i commit. Presenza di origine, " +"confronti esatti, una build e un risultato di runtime ogni nome una pietra " +"miliare diversa." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08 :{ph1} {ph2}13 Agosto proseguimento{ph3}, {ph4}19 Agosto fonte " +"ledger{ph5}, {ph6}24 Agosto Porto Linux{ph7}, {ph8}26 Agosto Edizione " +"Web{ph9}, e {ph10}30 Agosto Rilascio Linux a 64 bit{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} {ph2}29 Agosto libro mastro iniziale{ph3}, {ph4}7 " +"Settembre fonte ledger{ph5}, {ph6}8 Settembre confronti{ph7}, {ph8}9 " +"Settembre linkage{ph9}, e {ph10}10 Settembre giocabile-build record{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}10 Ottobre handoff{ph3} registra la ricostruzione del" +" DOS funzionante, il test completo del percorso normale del manutentore e " +"l'attuale fase a 64 bit." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} TH08 riferimento di verifica (oracle) correzione:{ph1} {ph2}il bug di " +"raccolta automatica segnalato{ph3}, {ph4}la correzione di origine e " +"confronto{ph5}, e {ph6}l'audit costante in virgola mobile completo{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Ricostruzione semantica:{ph1} {ph2} Il playbook di leggibilità di " +"TH08{ph3} e {ph4}l'ordine di fase della fabbrica e due percorsi di " +"convalida{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Storia industriale:{ph1} {ph2}l'indicatore del motore a vapore del " +"Science Museum Group{ph3} descrive l'introduzione del 1796 e il meccanismo " +"di registrazione della pressione." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Metodo:{ph1} fabbrica {ph2}autonomia agente{ph3} e {ph4}conoscenza " +"cross-game{ph5} i documenti conservano i principi di lavoro e le lezioni." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}Altri articoli{ph1} · {ph2}Esplora un'indagine TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "La rivoluzione industriale del Reverse Engineering-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 riflette sul reverse engineering manuale, sulla ricostruzione " +"Touhou con agenti AI e su come la conoscenza si compensa in TH08 , TH095 e " +"PC-98 TH04 ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Esperienza tra i progetti" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Touhou ricostruzione saggio" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Casa{ph1}{ph2}/{ph3}Dinosaur speed lab" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Ispezionare → ricostruire → modificare" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Ricostruisci la regola della velocità del dinosauro." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Per ricreare l'accelerazione del gioco, prima trova la regola che controlla " +"la sua velocità. {ph0} REA ha restituito lo script in esecuzione;{ph1} " +"abbiamo usato la sua regola per costruire questo mini-gioco con " +"{ph2}velocità regolabile.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Gioca e cambia la velocità{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Leggi la regola recuperata{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Controlla la ricostruzione{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Prova l'analisi{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Gioca e cambia la velocità" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Premere Play, quindi saltare sopra il cactus. Spostare il cursore velocità " +"per provare un gioco più lento o più veloce; passa a una velocità fissa. " +"Selezionare la regola recuperato per iniziare a 6 e gradualmente accelerare " +"di nuovo." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Gioca alla ricostruzione" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Gioca" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Salta ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Ricomincia" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Velocità" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Utilizzare la regola di accelerazione recuperata" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Regola originale: inizia da 6, quindi aumenta verso 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Spostare il cursore per impostare la propria velocità. Spazio o salto " +"cancella un cactus." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Abilita JavaScript per riprodurre la ricostruzione. Il codice e la " +"spiegazione di cui sopra rimangono leggibili." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Leggere lo script REA restituito" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Abbiamo ispezionato {ph0}edizione del browser derivata da Chromium di " +"wayou{ph1} con REA . Ha restituito il carico {ph2}, compreso questo ramo " +"nella funzione di aggiornamento del gioco:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Le impostazioni sono {ph0}, {ph1} e {ph2}. Il gioco esegue questo ramo su un" +" aggiornamento senza una collisione." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Usa la stessa regola nel nuovo gioco" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Copia" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Il mini-gioco utilizza questa funzione per l'accelerazione automatica. Lo " +"spostamento del cursore fornisce invece una velocità fissa. Drawing, jump " +"physics e rectangle collision checks sono nuovi codici per questo gioco " +"didattico; la sua simulazione avanza a 60 aggiornamenti al secondo." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "" +"{ph0}Scarica la regola della velocità{ph1} · {ph2}Leggi il codice del " +"gioco{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Controlla la ricostruzione" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Abbiamo chiamato la funzione di aggiornamento del gioco originale con " +"ostacoli e programmazione automatica disabilitata. Confronta quelle velocità" +" registrate con un replay della regola recuperata." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Aggiornare" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Gioco originale" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Regola ricostruita" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Eseguire il controllo della velocità" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Valori arrotondati a tre decimali. Il ramo controlla prima di aggiungere, " +"quindi l'incremento finale può prendere velocità appena sopra 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Prova tu stesso l'analisi" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Impostare REA {ph1} con il tuo agente di codifica." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Segui il {ph0}passaggi di connessione del browser{ph1}, servendosi {ph2} " +"come l'URL della pagina." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Assegna all'agente l'URL della pagina e l'endpoint di debug locale, quindi " +"copia questo prompt." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Usa REA per ispezionare questo gioco di dinosauri. Perché " +"diventa più veloce? Mostra la regola della velocità, quindi costruisci una " +"versione piccola con una velocità regolabile.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Chiedi un follow-up: {ph0}\"Dove viene calcolata l'altezza di salto? " +"Aggiungere un controllo di altezza di salto alla nuova versione.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Fonte: {ph0}codice di velocità ispezionato{ph1}, Autori di Chromium. " +"{ph2}Copyright e licenza BSD{ph3}. REA 4.1.0 ha controllato l'edizione HTTP" +" in esecuzione in Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome Dinosaur Game: ricostruisci la sua regola di velocità-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Leggi la regola di velocità del gioco dei dinosauri con REA, ricostruiscilo," +" quindi cambia la velocità e gioca." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Dinosauro velocità ricostruzione" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Dinosauro mini-gioco. Utilizzare il pulsante di salto o premere Spazio " +"mentre il gioco è focalizzato." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Copia regola di velocità ricostruita" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Copia dinosaur analysis prompt" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Casa{ph1} / FAQ" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "Domande FREQUENTI SU REA." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Configurazione, aggiornamenti, analisi e risoluzione dei problemi." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Argomento" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Configurazione e aggiornamenti{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Analisi{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Risoluzione dei problemi{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Dati e condivisione{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Configurazione e aggiornamenti" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Come installo REA?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Terminale * configurazione agente" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Copia" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"La configurazione registra la connessione MCP di REA e installa la skill di " +"analisi corrispondente. Al termine, riavvia il tuo agente e forniscigli il " +"percorso del file e una domanda. La {ph0}guida alla configurazione{ph1} " +"spiega i prerequisiti e la prima analisi." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Quali agenti di codifica possono utilizzare REA ?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Qualsiasi agente che supporti i server MCP locali. Il programma di " +"installazione include Claude Code , Claude Desktop, Codex , Cursor , Gemini " +"CLI , Windsurf , Devin , OpenCode , Antigravity , GitHub Copilot CLI , " +"Command Code , Grok Build , OMP , e VS Code . Il connettore di Grok Bot " +"viene aggiunto dalla sua chat." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Connetti il tuo agente di codifica{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Come aggiorno REA?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA rilascia frequentemente, comprese le correzioni di bug. Se è stato " +"installato il CLI con npm :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Terminale * installato CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Seguire il comando setup refresh stampato dall'aggiornamento. Se si imposta " +"il vostro agente attraverso {ph0}, eseguire:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Terminale * aggiorna la configurazione dell'agente" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Controlla le modifiche e riavvia il tuo agente. La connessione a REA usa una" +" versione specifica del pacchetto: esegui di nuovo la configurazione per " +"usare la nuova versione. Per un singolo comando CLI, aggiungi il comando " +"dopo {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Sta installando l'abilità da skills.sh abbastanza?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"L'abilità dà le istruzioni di indagine agente. Eseguire {ph0} Configurazione" +" REA{ph1} per collegare il server MCP e installare l'abilità corrispondente," +" quindi riavviare l'agente in modo che possa chiamare gli strumenti." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Analisi" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "Cosa posso analizzare con REA ?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Inizia con il tipo di software che hai:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Eseguibili e librerie native{ph1}: funzioni, assemblaggio, pseudocodice" +" e riferimenti." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Applicazioni JavaScript e Electron{ph1}: moduli, importazioni, IPC e " +"posizioni di origine." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Pagine del browser{ph1}: script, richieste e osservazioni di runtime." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA ha anche flussi di lavoro per assembly gestiti, APK Android, firmware e " +"risorse pacchettizzate. {ph0}Vedi i casi di studio{ph1} per le indagini " +"lavorate." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Ho bisogno di Hopper, Ghidra o IDA ?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"L'analisi approfondita dei programmi di codice macchina utilizza uno di " +"essi. Static JavaScript e. NET lavoro di ispezione con i file forniti e non " +"hanno bisogno di un'analisi del motore di programmi di codice macchina." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Collega l'installazione Ghidra o IDA esistente oppure lascia che setup " +"rilevi Hopper e proponga un'installazione. Il tuo host e target determinano " +"quale provider può essere utilizzato. {ph0}Impostare l'analisi dei programmi" +" di codice macchina{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Posso usare REA senza un agente di codifica?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Sì. CLI utilizza gli stessi flussi di lavoro di analisi. Per un locale " +"JavaScript o Electron app:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Terminale * analisi statica dell'applicazione" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Sostituire il percorso con una cartella dell'applicazione estratta o un file" +" ASAR. {ph0}Utilizzare il CLI {ph1} per le opzioni di installazione." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "Quale codice restituisce REA?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"L’analisi nativa restituisce assembly e pseudocodice, insieme a chiamate di " +"funzione, riferimenti e costanti rilevanti. L’analisi JavaScript restituisce" +" moduli, le loro relazioni e le posizioni nel codice sorgente." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"L'agente utilizza questi risultati per spiegare il comportamento o scrivere " +"e testare un'implementazione. Il {ph0} Calcolo DX-Ball{ph1} e {ph2}CTF flag " +"checker{ph3} mostra come funziona questo processo." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "Che cosa chiedo al mio agente?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Dagli un obiettivo locale e un comportamento da indagare. Per un JavaScript " +"o Electron app:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Sostituisci il percorso con il tuo obiettivo. Il {ph0}guida{ph1} fornire " +"prompt per esempi nativi, Electron e browser." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Risoluzione dei problemi" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Perché il mio agente non può vedere gli strumenti REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Riavviare o ricollegare l'agente dopo l'installazione. Controlla la sua " +"registrazione REA con {ph0}; per Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Terminale * controllare un client" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Sostituire {ph0} con il tuo ID cliente, ad esempio {ph1} o {ph2}. Se il " +"report mostra una registrazione mancante o obsoleta, eseguire setup per quel" +" client:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Terminale * riparare la configurazione di un cliente" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Rivedere il suo piano e riavviare il client. Se la registrazione è sana ma " +"gli strumenti rimangono assenti, controllare l'errore di connessione MCP del" +" client. {ph0}Più diagnostica di configurazione{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Devo iniziare prima Hopper?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA avvia Hopper quando un'operazione ne ha bisogno. Su macOS, completa la " +"scelta di prima esecuzione della modalità demo o dell'attivazione della " +"licenza prima dell'analisi automatica. {ph0}Vedere configurazione provider " +"nativo{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Che cosa faccio se trovo un bug?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Aggiornamento REA {ph1}, riavvia il tuo agente e riprova lo stesso " +"compito. Una versione recente potrebbe già risolvere il problema." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Se persiste, {ph0}apri un problema{ph1} con la versione REA, il sistema " +"operativo, il tipo di destinazione, i passaggi per riprodurre e l'output " +"degli errori. Includere il nome del provider quando il problema comporta " +"l'analisi dei programmi di codice macchina." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Dati e condivisione" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "REA carica la mia app?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA analizza gli obiettivi sulla tua macchina. L'agente riceve i risultati e" +" la politica dei dati del fornitore del modello si applica a tali risultati." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Come posso condividere un esempio o contribuire?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Hai un utile esempio REA? Ci piacerebbe vederlo. Condividi l'obiettivo, la " +"tua domanda, i risultati e come li hai controllati in un {ph0}problema{ph1} " +"o {ph2}richiesta pull{ph3}. Brevi estratti di codice e figure aiutano gli " +"altri a seguire l'indagine." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Anche segnalazioni di bug, richieste di funzionalità, documentazione e " +"miglioramenti del codice sono benvenuti. Puoi anche discutere un esempio nel" +" {ph0}comunità{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA FAQ: Configurazione, aggiornamenti e risoluzione dei problemi" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Risposte alle domande comuni di REA: installazione, aggiornamenti, strumenti" +" di analisi, agenti di codifica, risoluzione dei problemi e esempi di " +"condivisione." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Domande frequenti su REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Copia il comando di installazione REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Copia il comando di aggiornamento REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Copy agent setup refresh command" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Copia il comando di analisi REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Copia esempio prompt di analisi" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Copia comando diagnosi client" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Copy scoped setup comando" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Casa{ph1} La tua prima indagine" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Scopri dove{ph0}le note esportate vanno." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Usa REA per ispezionare una piccola app, segui il pulsante Esporta note e " +"controlla tu stesso un dettaglio." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "In questo esercizio" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Istituire{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Chiedi informazioni sull'esportazione{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Segui la risposta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Controllare una previsione{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Fai un'altra domanda{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Connetti il tuo agente a REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Copia" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Oppure esegui questo comando nel tuo terminale:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Rivedere il piano, approvare la configurazione, quindi riavviare l'agente. " +"Sei già connesso? Continua sotto." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Chiedi dove è scritto CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"L'esempio è un'app Electron a sei file con un {ph0}Note di esportazione{ph1}" +" pulsante. L'agente può ispezionare il codice senza installare o avviare " +"Electron ." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"L'agente scarica i file e fornisce la cartella decompressa a REA per " +"l'ispezione." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Scarica esempio ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Se il tuo agente non riesce a scaricare i file, decomprimi tu stesso questo " +"archivio. Dare il percorso per il {ph0} cartella e la stessa domanda di " +"esportazione." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Segui la risposta al codice" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Cerca una breve spiegazione con riferimenti a file e righe:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Il pulsante invia un {ph0} messaggio. Il processo principale formatta le " +"note come CSV e scrive {ph1} nella cartella Download dell'utente. Le colonne" +" sono {ph2} e {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Dal pulsante al file writer" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"L'analisi statica di REA associa il messaggio al suo gestore. La " +"destinazione viene letta dal codice." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Il percorso del file, il formatter e la chiamata di scrittura sono insieme " +"in questo gestore. Chiedi al tuo agente di mostrare queste righe se la sua " +"risposta le lascia fuori." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" +"{ph0}Vedere la traccia completa del codice e il risultato REA " +"registrato{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Controllare una previsione" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Una virgola separa le colonne CSV. Cosa succede quando il titolo di una nota" +" contiene una virgola o virgolette?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Esegui il controllo da solo" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Aprire un terminale nel disimballato {ph0} cartella:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Questo comando utilizza una shell con supporto here-document, come Bash o " +"Zsh. Il tuo agente può eseguire lo stesso JavaScript nella shell della tua " +"piattaforma." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Fai un'altra domanda" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Prova un follow-up nella stessa conversazione:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"Cosa succede se il file non può essere scritto? Seguire l'errore torna alla " +"pagina." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Oppure dai al tuo agente un'app tutta tua e chiedi informazioni su un " +"pulsante, un file o un comportamento." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Come Notion copia testo e HTML{ph1}{ph2}Seguire una funzione di appunti" +" in un pacchetto Electron app.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Come DX-Ball calcola il posizionamento del suono stereo{ph1}{ph2}Leggi " +"le istruzioni originali e le verifiche della ricostruzione.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Risoluzione dei problemi di configurazione o analisi{ph1}{ph2}Aggiorna " +"REA e controlla la connessione se rimani bloccato.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "La tua prima indagine di Reverse engineering-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Prova REA su una piccola app Note. Imposta il tuo agente, chiedi dove vanno " +"le note esportate e controlla il formatter CSV con un titolo di esempio." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "La tua prima indagine REA" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Copia REA prompt di installazione" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Copia comando setup" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Copia note richiesta di indagine" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Copia CSV prompt di controllo" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Comando Copia formatter check" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Casa{ph1} / Inizia" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Impostare REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Connetti REA al tuo agente di codifica o ispeziona un'app locale dal tuo " +"terminale." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Aprire un terminale e controllare:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Terminale" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Copia" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows PowerShell" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Digitare Y se viene chiesto di accettare i termini. Chiudere PowerShell, " +"aprirlo di nuovo, quindi eseguire {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Se PowerShell in seguito dice {ph0}\"l'esecuzione di script è disabilitata " +"su questo sistema\"{ph1} quando corri {ph2}, esegua questo una volta e " +"riprova:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Se si utilizza Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Altrimenti:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Chiudere il terminale, aprirlo di nuovo, quindi:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"L'installatore ha bisogno {ph0} e {ph1} (su Debian / Ubuntu: {ph2}). " +"Chiudere il terminale, aprirlo di nuovo, quindi:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"La tua distribuzione {ph0} il pacchetto è spesso più vecchio di 22.19, " +"quindi controlla {ph1} se invece lo usi." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Preferisci un normale installatore? Scarica la versione LTS da " +"{ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Opzioni di configurazione" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Connetti il tuo agente di codifica{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Utilizzare il CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Impostare l'analisi dei programmi di codice macchina{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Ottenere aiuto{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Connetti il tuo agente di codifica" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Esegui setup per connettere REA al tuo agente di codifica. Le scelte del " +"client includono Claude Code, Codex , Cursor , Gemini CLI , Windsurf , Grok " +"Build e altri client MCP supportati. Il connettore di Grok Bot viene " +"aggiunto dalla sua chat." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Nuovi agenti di codifica?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Un agente di codifica è un assistente AI che funziona sul computer anziché " +"in una scheda del browser. Può leggere file ed eseguire comandi e chiede " +"prima di apportare modifiche. REA fornisce strumenti di reverse engineering" +" it." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Se non ne hai ancora uno, scegli uno, segui la sua pagina di installazione e" +" accedi:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code {ph2}{ph3} di Anthropic . Ha bisogno di un piano " +"Claude pagato." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex {ph2}{ph3} di OpenAI . Accedi con il tuo account ChatGPT." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode {ph2}{ph3}, fonte aperta. Connetti il fornitore di " +"modelli di tua scelta." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Quindi aprilo e copia il prompt qui sotto. L'agente esegue la configurazione" +" di REA e ti mostra il piano prima di cambiare qualsiasi cosa." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "O eseguire l'installazione da soli" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Come faccio ad aprire un terminale?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} aprire il menu Start, digitare {ph2}PowerShell{ph3} e " +"premere Invio." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} premere {ph2} {ph3}, tipo {ph4}Terminale{ph5} e premere " +"Invio." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0} Linux :{ph1} premere {ph2} {ph3} {ph4} sulla maggior parte dei " +"desktop." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Incolla un comando con {ph0} {ph1} ( macOS : {ph2} {ph3}; Terminali Linux: " +"{ph4} {ph5} {ph6}), quindi premere Invio." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Scegli il tuo cliente e rivedere il piano di installazione. REA aggiunge la" +" sua connessione MCP e l'abilità di indagine corrispondente, mantenendo un " +"backup della configurazione esistente. Chiede prima di applicare le " +"modifiche." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Riavvia il client al termine dell'installazione." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Come faccio a riavviare il mio cliente?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Applicazioni desktop{ph1} (Claude Desktop, Cursor , Windsurf , VS Code " +"): esci completamente dall'app, quindi aprila di nuovo. Chiudere la finestra" +" non basta. Su macOS premere {ph2} {ph3}; su Windows, esci anche dall'icona " +"del vassoio se ce n'è uno." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Agenti terminali{ph1} (Claude Code , Codex , Gemini CLI ): uscire dalla" +" sessione e riavviarla." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Dai al tuo agente un percorso di destinazione e una domanda specifica. Per " +"un'app JavaScript o Electron, potresti iniziare con:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Guarda {ph0} e scopri come esporta i dati. Mostra i punti di ingresso, le " +"chiamate e le dipendenze coinvolte, con le posizioni di origine per i " +"risultati." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Sostituisci il percorso con il tuo target locale." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Come ottengo il percorso completo di una cartella?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} in Esplora file, fare clic con il pulsante destro del " +"mouse sulla cartella e scegliere {ph2}Copia come percorso{ph3}. Su Windows " +"10, tenere premuto Maiusc mentre si fa clic con il pulsante destro del " +"mouse." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} nel Finder, fare clic destro sulla cartella, tenere " +"premuto Opzione e scegliere {ph2}Copia \" ... \" come percorso{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Qualsiasi sistema:{ph1} trascinare la cartella in una finestra di " +"terminale e il suo percorso appare." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" +"In un terminale, metti le virgolette attorno a un percorso che contiene " +"spazi." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Utilizzare il CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Analizzare una cartella dell'applicazione JavaScript o Electron o un " +"archivio ASAR senza eseguire l'app:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Analisi statica delle applicazioni" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Sostituire il percorso con la directory dell'app estratta o {ph0} file. Su " +"Windows, un percorso come {ph1} funziona qui." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Dove trovo un'app .file asar?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron apps di solito tenerlo in un {ph0} cartella:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (fare clic con il pulsante destro del mouse " +"sull'app e scegliere {ph3}Mostra il contenuto della confezione{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} spesso {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Alcune app si installano altrove. Cerca nella cartella dell'app per {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Il risultato identifica l'app, mostra le connessioni tra i moduli e fornisce" +" le loro posizioni di origine. Le connessioni che REA non può risolvere sono" +" contrassegnate nel risultato." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Se vuoi un permanente {ph0} comando nella tua shell:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Installare il CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Continuare con la guida all'applicazione JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Impostare l'analisi dei programmi di codice macchina" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"I programmi di codice macchina necessitano di uno strumento di analisi " +"locale. Scegli e configura uno di seguito, quindi assegna a REA l'eseguibile" +" o la libreria." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Scegli uno strumento: Ghidra, Hopper o IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Utilizzare un Ghidra 12.1 esistente.installazione x e un JDK 21 a 64 bit o " +"più recente su Linux o macOS, su x64 o arm64. L'installazione di Ghidra " +"richiede un decompiler nativo per l'architettura host. Impostare i percorsi " +"prima di eseguire setup:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Collegare l'installazione Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Collegamento di Ghidra · macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Sostituisci entrambi i percorsi con le installazioni esistenti. Setup li " +"controlla e registra le impostazioni valide per il client selezionato. Su " +"Linux arm64, potrebbe essere necessario compilare separatamente il " +"decompilatore nativo di Ghidra." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Collegare Ghidra su Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 ha il supporto sperimentale di sola lettura per applicazioni " +"native x86 e x64 PE e DLL su unità NTFS locali fisse. Utilizzare un Ghidra " +"12.1 esistente.x installazione e un JDK 21 a 64 bit o più recente:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Connessione Ghidra * PowerShell Windows" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Sostituire i due percorsi con le installazioni, quindi rivedere il piano di " +"installazione." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Collegare Hopper su macOS o Linux . Eseguire il comando setup sopra; rileva " +"un'installazione esistente o offre un piano di installazione per " +"l'approvazione." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"Su macOS, completa la scelta di prima esecuzione di Hopper della modalità " +"demo o dell'attivazione della licenza prima di un'analisi automatica." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"Le configurazioni IDA verificate utilizzano Windows, con una registrazione " +"MCP esistente per una GUI collegata o un database headless. L'analisi senza" +" testa Linux e macOS rimane non verificata." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Collegare una registrazione IDA MCP esistente" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Mantenere il funzionamento del server upstream {ph0}, {ph1} e facoltativo " +"{ph2} in un file JSON. Un esistente {ph3} oggetto con un {ph4} si accetta " +"anche l'ingresso. Punta REA su quel file prima dell'installazione:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "Connessione IDA * PowerShell Windows" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"Il profilo allegato utilizza gli strumenti 1.4.0 legacy a monte con il " +"binario originale già aperto in IDA . Il profilo headless utilizza l'API " +"upstream database-supervisor e una registrazione con {ph0}; verifica reale " +"copre un supervisore IDA 9.3 Windows x64. Il medico controlla la " +"registrazione senza avviare IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Dare a REA il percorso eseguibile originale, con {ph0} in una query CLI. Per" +" un agente, includere {ph1} nell'ambiente di registrazione REA e selezionare" +" IDA quando si apre il binario." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "" +"Per una configurazione Ghidra esistente, ispezionare una funzione con:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Analisi delle funzioni" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "" +"Sostituire {ph0} con il nome della funzione o l'indirizzo che si desidera " +"ispezionare." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "" +"Come funzionano le sessioni di analisi dei programmi di codice macchina" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Ogni comando CLI importa e analizza il binario, quindi chiude la sua " +"sessione. Le query MCP dell'agente riutilizzano il binario importato mentre " +"la sessione è aperta." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Seguire un esempio di analisi dei programmi di codice macchina{ph1} per" +" vedere come il risultato della funzione porta a un calcolo recuperato." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Ottenere aiuto" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Se il tuo agente non vede REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Riavviare o ricollegare il client dopo l'installazione. Controlla la sua " +"connessione REA con {ph0}; per Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Controlla un cliente" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Se un fornitore ha bisogno di attenzione" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Controlla il provider che stai utilizzando. Per Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Controllare un provider" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" +"Il rapporto fornisce il controllo non riuscito e un passo successivo " +"suggerito." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} Domande FREQUENTI SU REA{ph1}{ph2}Risposte rapide su aggiornamenti, " +"agenti e analisi.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Scegli una guida all'indagine{ph1}{ph2}Esempi funzionanti per un " +"binario, un'app Electron e un browser.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Problemi GitHub{ph1}{ph2}Segnalare un problema con il comando e la " +"diagnostica.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "{ph0} Comunità REA{ph1}{ph2}Domande, indagini e lavori in corso.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Installa REA e configura il tuo agente di codifica" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Collega REA al tuo agente di codifica o ispeziona un'app JavaScript o " +"Electron locale dal terminale. Configurazione, prime domande e guide native " +"provider." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Copia controllo versione Node.js" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Copia il comando di installazione Node.js per Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Copia il comando PowerShell execution policy" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Copia il comando di installazione Homebrew Node.js" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Copia il comando di installazione fnm per macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Copia i comandi Node.js 24 per macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Copia il comando di installazione fnm per Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Copia i comandi Node.js 24 per Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA guida introduttiva" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Copia REA prompt di installazione" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Copy agent setup comando" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Copia il comando di analisi JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Copia il comando di installazione CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Copia connessione ghidra * macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Copia connessione Ghidra per PowerShell Windows" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Copia connessione IDA per PowerShell Windows" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Copia il comando di analisi delle funzioni native" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Copia comando diagnosi client" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Comando di diagnosi del provider di copia" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Casa{ph1} / {ph2}Guida{ph3} / Osservazione del browser" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Vedi cosa succede{ph0}quando si fa clic." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Utilizzare una piccola applicazione browser per collegare un'azione, la sua " +"richiesta di rete e il JavaScript che costruisce un download." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "In questa guida" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Esempio{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Apri il browser{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Chiedi al tuo agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Cattura da CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Leggi la richiesta e lo script{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Cosa succede quando fai clic su Esporta?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"Il {ph0}Esempio di browser{ph1} ha un {ph2}Note di esportazione{ph3} " +"pulsante. Cliccando carica {ph4}, formatta le due note come CSV, e avvia un " +"download." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Dal clic al CSV scarica" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * Tu{ph1}{ph2}Fare clic su Esporta note{ph3}{ph4}Eseguire l'azione " +"nel browser mentre l'acquisizione è in esecuzione.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA {ph1}{ph2}Registra la richiesta{ph3}{ph4}Cattura l'URL della " +"richiesta, lo stato della risposta e la struttura JSON dalla pagina " +"selezionata.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * Il tuo agente{ph1}{ph2}Leggi il codice di " +"esportazione{ph3}{ph4}Collegare la richiesta osservata a {ph5} in " +"{ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Avviare l'acquisizione prima di fare clic su Esporta note." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Aprire Chrome con debug remoto" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Aprire l'esempio di Note ospitate con un profilo browser separato e una " +"porta di debug locale. Su Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Avviare il browser di esempio" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Copia" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Utilizzare il percorso eseguibile del browser installato su macOS o Windows " +". È possibile sostituire l'URL della pagina con un'altra pagina che si " +"desidera ispezionare." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA si connette a questo browser esistente. Mantieni il controllo della " +"pagina, esegui l'azione e chiudi il browser al termine." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Chiedi al tuo agente di guardare un'azione" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per ispezionare questa pagina mentre faccio " +"clic su Esporta note. Che richiesta fa e come viene costruito il " +"CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Esempio prompt. Fornisci al tuo agente l'endpoint di debug, {ph0}, e l'URL " +"della pagina. Lascia che inizi la cattura prima di fare clic." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Il tuo agente scopre l'obiettivo della pagina, avvia una finestra di " +"osservazione e legge le prove risultanti. Può quindi ispezionare lo script " +"dietro l'esportazione." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "O cattura dal terminale" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Trova l'ID di destinazione della pagina:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Trova la pagina" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Scegli la destinazione con l'URL di esempio Notes. Sostituire {ph0} sotto " +"con il suo ID, quindi esegui:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Cattura i prossimi dieci secondi" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Lasciare che il comando si connetta per alcuni secondi, quindi fare clic su " +"{ph0}Note di esportazione{ph1} in quel browser. Il risultato arriva dopo la " +"fine della finestra di osservazione." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Il risultato acquisito include la pagina selezionata, l'attività di rete " +"durante quella finestra e la forma della risposta JSON. Le richieste " +"precedenti sono al di fuori di questa acquisizione." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Leggere lo script di richiesta ed esportazione" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Registrato con REA 4.1.0 nell'esempio local Notes" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Fatto catturato" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Valore" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Richiesta" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Risposta" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Iniziatore della richiesta" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} · script" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Struttura di risposta" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} con {ph1} e {ph2} campo" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Leggi gli script caricati" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"La richiesta identifica l'origine dati e i record REA {ph0} come suo " +"iniziatore. Leggere l'origine dello script catturato per vedere come vengono" +" utilizzati i dati:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"Il download è costruito nella pagina utilizzando la risposta JSON. Il " +"passaggio di formattazione CSV viene dallo script; l'acquisizione di rete " +"stabilisce che questo clic richiesto {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Trova lo script che richiede {ph0}. In che modo sfugge ai titoli contenenti " +"virgole o virgolette?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Per un'app JavaScript o Electron installata, continuare con {ph0}flusso di " +"lavoro dell'applicazione{ph1} per seguire i confini dei file e dei processi." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Analisi del browser e della rete-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Osservare un'esportazione di note con REA: selezionare una pagina del " +"browser, catturare un clic, ispezionare la richiesta e seguire lo script di " +"esportazione." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Osservazione del browser" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Copia avvia il browser di esempio" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Copia esempio prompt" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Copia trova la pagina" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Copia cattura i prossimi dieci secondi" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Copia leggi gli script caricati" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Casa{ph1} / Guida" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "Guide REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Analizzare una funzione nativa, un'esportazione Electron o una richiesta del" +" browser. Ogni guida include un prompt, codice e risultati." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Prima indagine" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Impostare REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Collega il tuo agente di codifica o usa REA dal terminale." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Inizia con REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Programmi a codice macchina" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Recuperare un calcolo della posizione del suono sinistra/destra" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Inizia con un eseguibile di gioco Windows. Ispezionare le istruzioni, " +"seguire un chiamante, leggere costanti numeriche e controllare il C " +"recuperato." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Guida all'analisi dei programmi di codice macchina" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Seguire un'esportazione CSV" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Un'app small Notes diffonde una funzione attraverso il renderer, il " +"precarico e il processo principale. Utilizzare REA per collegare l'API, il " +"canale IPC e il file writer." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "Guida di JavaScript & Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Per un'app pacchettizzata più grande, segui {ph0} Ponte appunti di " +"Notion{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Comportamento del browser" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Osservare un clic" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Aprire un esempio di Note di lavoro, acquisire una richiesta di esportazione" +" e trovare il codice che trasforma la sua risposta in un download." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Guida all'osservazione del browser" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Guida al reverse engineering-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Impara REA attraverso brevi esempi elaborati: un calcolo nativo, " +"un'esportazione Electron CSV e una richiesta del browser." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}Casa{ph1} / {ph2}Guida{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Traccia un Electron {ph0} Esportazione CSV." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Segui un clic del pulsante dall'API della pagina, tramite Electron IPC, al " +"file writer CSV." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "In questa guida" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Esempio{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Chiedi al tuo agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Traccia il codice di esportazione{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Prova l'esempio{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Ispezionare il writer CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "Dove vanno le \"note di esportazione\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Questa guida utilizza una piccola app Electron. Scattandosi {ph0}Note di " +"esportazione{ph1} chiama un'API nella pagina, attraversa il processo " +"principale e scrive un CSV . Il comportamento è distribuito su più file." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "L'esportazione di CSV attraverso i processi Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Renderer → precarico{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} chiama l'API esposta" +" da {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Tra processi{ph1}{ph2}{ph3}{ph4}{ph5}Il precarico richiama un canale " +"IPC: un messaggio denominato al processo principale.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Processo principale{ph1}{ph2}Un gestore di esportazione{ph3}{ph4}{ph5} " +"gestisce quel canale e chiama il writer CSV.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} formatta le note → {ph1} scrivere {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA corrisponde alla chiamata IPC letterale al suo gestore e identifica " +"l'API esposta. Il percorso è dedotto dal codice; un'acquisizione di runtime " +"può controllare ciò che viene eseguito." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Chiedi informazioni sull'esportazione CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Connetti il tuo agente a REA {ph1} e dagli la directory dell'app o il " +"file ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Copia" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Usa REA per trovare cosa succede quando esporto le note in " +"questa app. Dove viene creato CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "" +"Esempio prompt. Includere il percorso assoluto della cartella " +"dell'applicazione o {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA legge i file dell'applicazione e crea una mappa di entrypoints, moduli e" +" confini di processo. L'agente utilizza tale mappa per restringere " +"l'indagine alla funzione di esportazione." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Traccia il codice di esportazione" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "La pagina chiama una piccola API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"La pagina conosce il nome del metodo. L'implementazione vive nel precarico, " +"che lo espone al renderer." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA records {ph0} e il canale letterale {ph1}. Accoppia tale invocazione con" +" il singolo gestore di corrispondenza nel processo principale." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"La lettura del gestore risponde alla domanda originale: {ph0} formatta le " +"note e il processo principale scrive {ph1} nella cartella Download " +"dell'utente." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Registrato da REA 4.1.0 nell'esempio scaricabile qui sotto. Le posizioni di " +"origine accompagnano i risultati dell'API, del canale e del gestore." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Analizza l'esempio da solo" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Scarica esempio ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Sfoglia i sei file sorgente" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Analisi statica delle applicazioni" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Sostituire il percorso con la cartella decompressa. Dovresti trovare un " +"canale IPC e un gestore corrispondente in {ph0}. Le posizioni di origine " +"sono in {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Per la tua app, usa lo stesso comando con la sua directory o il percorso " +"ASAR. Un agente può seguire una stringa letterale, un nome API o un canale " +"IPC con gli strumenti di tracciamento delle funzionalità di REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Ispezionare il writer CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Seguire {ph0} al suo gestore. Quali input raggiungono il writer CSV e cosa " +"succede se la scrittura del file non riesce?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Utilizzare le posizioni di origine per ispezionare tali dettagli. I nomi dei" +" canali calcolati e i gestori ambigui possono rimanere irrisolti; le " +"osservazioni di runtime offrono un altro modo per analizzarli." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Segui il ponte degli appunti di Notion{ph1} {ph2}Applica lo stesso " +"approccio a un'app Electron pacchettizzata.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Osservare un'esportazione del browser{ph1}{ph2}Cattura un vero clic e " +"vedi quale richiesta fa.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Seguire una funzione nativa{ph1}{ph2}Continua in un binario quando una " +"funzione dipende dal codice nativo.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "Analisi JavaScript e Electron-Analisi REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Traccia un'esportazione di note CSV tramite un'API di rendering, un " +"precarico e un gestore IPC con REA . Include file di esempio scaricabili e " +"un risultato di analisi verificato." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Copia esempio prompt" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Copia analisi applicazione statica" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Casa{ph1} / {ph2}Guida{ph3} / Analisi di programmi a codice macchina" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "" +"Recuperare di DX-Ball{ph0}calcolo della posizione sonora sinistra/destra." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Ispezionare le istruzioni originali, identificare l'input e le costanti, " +"quindi controllare il C recuperato." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "In questa guida" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Esempio{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Chiedi al tuo agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Leggi i risultati di REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Recuperare e controllare{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Usa il tuo binario{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Calcola il posizionamento del suono stereo sinistro / destro" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"In DX-Ball, un mattone colpito fornisce una posizione dello schermo " +"orizzontale. Il codice audio lo trasforma in un valore di panning " +"sinistro/destro." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"La funzione di partenza, {ph0}, ha un risultato di decompiler corto: una " +"chiamata a {ph1}. REA restituisce anche le sue istruzioni e i chiamanti, " +"che danno all'agente un modo per indagare sull'aritmetica mancante." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Nuovo a questi termini?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Istruzione:{ph1} i passaggi eseguiti dal processore, mostrati in forma " +"leggibile come {ph2} o {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Risultato decompilatore / pseudocodice:{ph1} il tentativo di uno " +"strumento di analisi di trasformare le istruzioni in codice simile a C. Può " +"perdere parti, come in questo esempio." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Chiamante:{ph1} una funzione che chiama questo. Mostra quali valori " +"vengono passati." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Indirizzo:{ph1} una posizione nel programma, scritta in esadecimale, " +"come {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Costante:{ph1} numeri fissi memorizzati nel programma, letti come byte " +"grezzi e decodificati." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Tre prove, un calcolo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * Istruzioni{ph1}{ph2}Un input intero{ph3}{ph4}Una lettura dello " +"stack fornisce il valore utilizzato dalle istruzioni in virgola mobile.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * Chiamante{ph1}{ph2}Una coordinata dello schermo{ph3}{ph4}Il " +"mattone-hit caller passa {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * Byte di dati{ph1}{ph2}Le costanti numeriche{ph3}{ph4}I byte di " +"riferimento decodificano a {ph5}, {ph6} e un valore di scala.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA fornisce le istruzioni, la relazione funzione-chiamata e i byte. " +"L'agente li interpreta insieme." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Chiedi del comportamento" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Dopo {ph0}collegamento di REA al tuo agente{ph1} e {ph2}impostazione di uno " +"strumento di analisi dei programmi di codice macchina{ph3}, fornisca " +"l'eseguibile locale e una domanda:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Quale strumento di analisi dovrei usare?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA ha bisogno di uno di questi per leggere i programmi nativi:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} ( macOS o Linux): la configurazione di REA lo rileva o " +"offre di installarlo. Su macOS, apri Hopper una volta e scegli la modalità " +"demo o attiva una licenza prima della tua prima analisi." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} (macOS o Linux ; sperimentale su Windows): gratuito, ma " +"richiede un Ghidra 12.1 esistente.x installazione e un 64-bit JDK 21 o più " +"recente." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA {ph1} ( Windows): per una configurazione IDA esistente con una " +"registrazione MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Vedere {ph0}Impostare l'analisi dei programmi di codice macchina{ph1} per i " +"passi." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Copia" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per scoprire come DX-Ball calcola il " +"posizionamento del suono stereo. Spiega il calcolo e mostra il " +"codice.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Esempio prompt. Fornisci al tuo agente il percorso dell'eseguibile DX-Ball " +"1.07 locale. REA non include DX-Ball, quindi usa la tua copia o fai lo " +"stesso tipo di domanda su un altro piccolo programma Windows che hai." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Come ottengo il percorso completo di un file?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} in Esplora file, fare clic con il pulsante destro del " +"mouse sul file e scegliere {ph2}Copia come percorso{ph3}. Su Windows 10, " +"tenere premuto Maiusc mentre si fa clic con il pulsante destro del mouse." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} nel Finder, fare clic destro sul file, tenere premuto " +"Opzione e scegliere {ph2}Copia \" ... \" come percorso{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Qualsiasi sistema:{ph1} trascinare il file in una finestra di terminale" +" e il suo percorso appare." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Leggi i risultati di REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Leggi l'input" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Le istruzioni caricano un argomento intero e lo convertono per l'aritmetica " +"in virgola mobile. Questo è l'input assente dalla prima vista pseudocodice." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Segui il chiamante" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA identifica il chiamante brick-hit. Le sue istruzioni precedenti " +"moltiplicano la coordinata tile per 30; aggiunta {ph0} (20) dà la posizione " +"dello schermo del mattone." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Leggi le costanti di riferimento" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"L'aritmetica fa riferimento a questi indirizzi. La lettura dei byte fornisce" +" i valori effettivi; l'ordine di istruzioni indica all'agente come vengono " +"utilizzati." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Scrivi e controlla la funzione recuperata" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"Con una scala di 1.0, le posizioni dello schermo 0, 320 e 640 mappano a " +"-500, 0 e 500 prima della conversione intera. Il calcolo mette il centro " +"dello schermo al centro del campo stereo." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"L'agente ha utilizzato i risultati di REA per scrivere il C. Controlli " +"separati hanno confrontato 3.205 input con la funzione x86 originale e " +"riprodotto tutti i 63 byte compilati della funzione completa." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}Vedi l'indagine completa e il confronto assembly-to-C{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Provalo con il tuo binario" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Collegare un'analisi del fornitore di programmi di codice " +"macchina{ph1}, poi dia al Suo agente un eseguibile locale o una biblioteca e" +" una caratteristica per investigare. Domande di partenza utili includono \" " +"Come viene analizzato questo file?\"o\" Quale funzione gestisce questa " +"azione del menu?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Se si conosce già il nome o l'indirizzo di una funzione, è possibile " +"interrogarlo dal terminale. Per un'installazione Ghidra configurata:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Analisi delle funzioni" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Sostituire il percorso di destinazione e {ph0} con il proprio nome o " +"indirizzo della funzione. Ogni invocazione CLI importa e analizza il " +"binario, quindi chiude la sua sessione. Le query MCP dell'agente " +"riutilizzano il binario importato mentre la sessione è aperta." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Leggi lo pseudocodice insieme a istruzioni e riferimenti. Quando un " +"risultato lascia una chiamata o un valore irrisolto, utilizzare tale " +"posizione come domanda successiva." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Analisi binaria nativa-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Recuperare un calcolo nativo con REA: ispezionare le istruzioni, seguire un " +"chiamante, leggere le costanti e controllare ricostruito C." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Analisi di programmi a codice macchina" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Copia esempio prompt" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Analisi delle funzioni di copia" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Impostare REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Impostare REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}Cos'è RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Come aiuta REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Dinosauro gioco{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Calcolatore{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Prova REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Approfondisci{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Aiuto e feedback{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Comunità{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Reverse engineering, con il tuo agente di codifica" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Scopri come{ph0}funziona il software." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA fornisce al tuo agente di programmazione gli strumenti per esaminare un " +"programma e spiegarne il funzionamento." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "Sai già RE? {ph0}Vai alle guide di analisi →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Vuoi andare più a fondo? {ph0}Leggi il Blog →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Copia questo prompt nel tuo agente di programmazione:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Copia" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Oppure esegui questo comando nel terminale:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "Controlla e approva le modifiche previste, poi riavvia il tuo agente." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Che cos’è il reverse engineering?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Capire come funziona un software {ph0}esaminando il programma stesso.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"L'obiettivo: capire una caratteristica abbastanza bene per " +"{ph0}spiegalo{ph1}, {ph2}cambialo{ph3} o {ph4}ricostruiscilo.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "Prima di REA · Indaghi {ph0}da solo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Decodifica rami" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Traccia chiamate" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Recuperare la regola" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Originale x64 * istruzioni selezionate{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * Quale ramo ·" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Due salti nello stesso posto. Quali operatori sono " +"questi?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Cerca gli ID del comando, quindi etichetta il ramo." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Dividere ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Moltiplicare ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Che cosa fanno le funzioni chiamate?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 è chiaro. Le chiamate sono solo indirizzi. {ph0}Quale divide? Quale " +"valore entra?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Ispezionare le funzioni di supporto e tracciare i valori memorizzati." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Dividere" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * Qual è la regola ·" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Questo percorso si moltiplica per l'altro input. Cosi {ph0}10% significa " +"10% di 200{ph1} dopo +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "" +"Assegnare un nome agli operandi e controllare entrambi i percorsi operatore." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Ragionamento illustrativo esperto" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Si decodificano le istruzioni, si seguono le chiamate di funzione e si " +"ricostruisce il calcolo.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "Con REA · Chiedi al {ph0}tuo agente{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Un solo prompt." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Fai una domanda al tuo agente {ph0}con parole semplici.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Esempio prompt * Calcolatrice" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Esempio di risposta * in base ai risultati" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "Dopo +, il pulsante % prende {ph0}percentuale del primo numero.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA fornisce" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Istruzioni del gestore, codice decompilato e chiamate." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Il tuo agente spiega" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "Quale ramo si applica, cosa calcola e come ricostruirlo." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Assembly selezionato dalla DLL Calcolatrice installata. I pensieri e le " +"risposte illustrano i risultati. {ph0}Continuare con l'esempio Calcolatrice " +"↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Proviamo due esempi.{ph1} Modificare la velocità di un gioco, quindi " +"tornare a Calcolatrice e ricostruire il suo pulsante%." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Esempio 01 * Gioco di dinosauri di Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Perché il dinosauro diventa più veloce?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Obiettivo" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Ricostruisci il gioco con {ph0}velocità regolabile.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Perché il reverse engineering?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Per riprodurre la sua accelerazione, abbiamo bisogno di {ph0}la regola nel " +"gioco in esecuzione{ph1}: quanto velocemente inizia, quanto aumenta e quando" +" si ferma." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Gioca alla ricostruzione" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Gioca" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Salta ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Ricomincia" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Velocità" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Utilizzare la regola di accelerazione recuperata" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Regola originale: inizia da 6, quindi aumenta verso 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Spostare il cursore per impostare la propria velocità. Spazio o salto " +"cancella un cactus." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Abilita JavaScript per riprodurre la ricostruzione. Il codice e la " +"spiegazione di cui sopra rimangono leggibili." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA ha restituito" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Lo script effettivamente in esecuzione nella pagina.{ph1} L'agente " +"legge la sua funzione di aggiornamento e le impostazioni di velocità, quindi" +" utilizza tale regola in un nuovo gioco." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Esempio prompt * Gioco dinosauro" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Usa REA per ispezionare questo gioco di dinosauri. Perché " +"diventa più veloce? Mostra la regola della velocità, quindi costruisci una " +"versione piccola con una velocità regolabile.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Obiettivo ispezionato: {ph0}edizione del browser derivata da Chromium di " +"wayou{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Inizia alle 6.{ph1} Aggiungere {ph2}0.001{ph3} ogni aggiornamento senza" +" una collisione, mentre la velocità è inferiore {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Apri lo speed lab" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Cosa fa ogni parte" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 * REA {ph1}{ph2}Leggi lo script del gioco in " +"esecuzione{ph3}{ph4}Restituisce il codice e le impostazioni effettivi " +"all'agente.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * Il tuo agente{ph1}{ph2}Ricostruire la regola, aggiungere un " +"controllo{ph3}{ph4}Usa l'accelerazione recuperata in un piccolo gioco con un" +" cursore di velocità.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * Tu{ph1}{ph2}Cambiare la velocità e giocare{ph3}{ph4}Prova " +"l'accelerazione originale, quindi scegli il tuo ritmo.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Vedi lo script, i controlli e come provare l'analisi" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA ispezionato l'edizione del browser HTTP tramite una connessione di debug" +" locale e restituito il caricato {ph0}, compresa la sua fonte e digest." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Abbiamo chiamato la funzione di aggiornamento del gioco originale in un " +"controllo controllato del browser, con ostacoli e programmazione automatica " +"disabilitati. Dopo 4.000 aggiornamenti, la velocità era 10.0; dopo 10.000, " +"era 13.0, arrotondato a un decimale." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"Il nuovo mini-gioco mantiene quella regola di velocità. Il suo codice di " +"disegno, salto e collisione sono una piccola implementazione didattica. " +"{ph0}Apri il laboratorio{ph1} per vedere il nuovo codice ed eseguire lo " +"stesso controllo di velocità." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Per ispezionare il bersaglio da soli, seguire il {ph0}passaggi di " +"connessione del browser{ph1} servendosi {ph2}la pagina dei dinosauri{ph3}. " +"Fornisci all'agente l'URL della pagina e l'endpoint di debug locale, quindi " +"copia il prompt sopra." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Codice di velocità ispezionato{ph1} · {ph2} Autori Chromium * Licenza " +"BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Esempio 02 * Calcolatrice Windows" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Ricrea il pulsante % della calcolatrice." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"Costruire una piccola calcolatrice che gestisce {ph0}sia + che × " +"correttamente.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Lo stesso pulsante utilizza {ph0}regole diverse dopo + e ×.{ph1} " +"Controlliamo l'app installata per trovare a quale numero viene applicata la " +"percentuale." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Prova il calcolo" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Reimposta" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% di 200 = 20. Quindi 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Illustrazione interattiva della regola percentuale ispezionata." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Un ramo si divide per 100. L'altro si moltiplica anche per il primo " +"numero.{ph1} L'agente utilizza entrambi per ricreare il pulsante%." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Per questo esempio, {ph0} e {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Esempio prompt * Ricostruire il " +"pulsante %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per ispezionare il pulsante % della " +"calcolatrice Windows. Recuperare le regole dopo + e×, quindi costruire una " +"piccola calcolatrice che utilizza entrambi.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Con +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Prendi il 10% del primo numero.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Con ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Trasforma il 10% in 0,1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Dall'app installata a un pulsante % funzionante" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA legge la libreria{ph1}{ph2}Restituisce il codice del gestore %" +" {ph3}{ph4}La funzione controlla l'operatore e utilizza la costante " +"{ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * Il tuo agente lo interpreta{ph1}{ph2}Spiegare e riprodurre le " +"regole{ph3}{ph4}Crosscheck il ramo con la fonte di Microsoft, quindi provare" +" + e × sopra.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Vedi il codice reale e come è stata controllata la risposta" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Ispezionato con REA 4.1.0: Calcolatrice Windows 11.2508.4.0, x64. Il " +"riepilogo leggibile utilizza i nomi della fonte pubblica di Microsoft per " +"spiegare il ramo recuperato." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Percentuale di attuazione{ph1} · {ph2}I test case di Microsoft{ph3} · " +"{ph4}Guida all'installazione nativa{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "La tua prima indagine" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Prova REA su una piccola app." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Scarica il nostro esempio di Note, traccia la sua esportazione CSV e " +"controlla un input modificato." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Prova l'esempio guidato" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Vuoi approfondire?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Dì al tuo agente cosa vuoi capire o costruire. Con REA, è possibile lavorare" +" insieme su qualsiasi cosa, da {ph0}clonazione di questo sito web{ph1} per " +"{ph2}ricostruire un gioco dal suo eseguibile.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Esempio prompt * Sito web" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Sì, questa." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Esempio prompt * Ricostruzione del " +"gioco" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Usa REA per ricostruire questo gioco dal suo eseguibile. " +"Recuperare la logica di gioco in C e testarlo contro " +"l'originale.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Vedere il caso di studio DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "Per le fasi di configurazione e analisi, scegli il tuo target:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Programmi a codice macchina" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Ispezionare funzioni, stringhe, riferimenti e relazioni di chiamata di " +"funzione in eseguibili e librerie." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Guida all'analisi dei programmi di codice macchina" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Mappa moduli, percorsi, IPC e dipendenze native da una cartella " +"dell'applicazione o da un archivio ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Flussi di lavoro delle applicazioni" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Attività del browser e runtime" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Cattura l'attività del browser o del processo selezionata, quindi confronta " +"i risultati tra le varie esecuzioni." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Guida all'osservazione del browser" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Hai domande?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Leggi le FAQ{ph1}, {ph2}chatta con noi su Discord {ph3}, o {ph4}aprire " +"un problema GitHub{ph5} per bug e richieste di funzionalità." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Unisciti alla community" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Condividi le indagini e ottenere aiuto da altri utenti REA su Discord . " +"Seguire REA su X per gli aggiornamenti del progetto." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-Reverse Engineering per il tuo agente di codifica" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Decodificare app, binari e comportamento del browser con il tuo agente di " +"codifica. Segui guide chiare e prova esempi interattivi con REA ." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Copia REA prompt di installazione" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Copia comando setup" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Seguire l'analisi calcolatrice manuale" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Copia Calcolatrice percentuale domanda" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Dinosauro mini-gioco. Utilizzare il pulsante di salto o premere Spazio " +"mentre il gioco è focalizzato." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Copia dinosaur analysis prompt" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Scegli il calcolo" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Copia Calcolatrice analisi prompt" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Copia il prompt del progetto del sito web" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Copia gioco ricostruzione prompt" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Casa{ph1} / {ph2}Vetrina{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Caso di studio · Autenticatore Aegis" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Come funziona un autenticatore{ph0}generare un codice di accesso?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Un codice a sei cifre cambia ogni 30 secondi. Usa REA per trovare il calcolo" +" in un APK Android, quindi ricostruiscilo con un orologio che puoi " +"controllare." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * Versione ufficiale APK * 6.9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Vedi Aegis su GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "Da un APK a un codice che puoi riprodurre" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * Individuare la funzione{ph1}{ph2}3.077 classi → metodi di " +"generazione{ph3}{ph4} REA cerca il pacchetto e traccia il codice utilizzato " +"dalle azioni di visualizzazione e copia.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * Leggere il calcolo{ph1}{ph2}Tempo + chiave account → sei " +"cifre{ph3}{ph4} REA restituisce i metodi e le impostazioni predefinite. " +"L'agente spiega come si incastrano.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * Ricostruire e controllare{ph1}{ph2}Cambia l'orologio. Guarda il " +"codice.{ph3}{ph4}Una nuova demo del browser riproduce la regola e la " +"confronta con i casi di riferimento pubblico.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "In questo caso di studio" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Chiedi al tuo agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Prova il generatore di codice{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Trova il codice con REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Leggi il calcolo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Controlla la ricostruzione{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Ispezionare il APK da soli{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Chiedi al tuo agente" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"L'app mostra un codice di accesso che cambia. Vogliamo trovare {ph0}cosa lo " +"fa cambiare{ph1} riprodurre questo comportamento." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Copia" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Un prompt di esempio per il APK scaricato, con l'analisi Android di REA " +"configurata. {ph0}Ottenere il APK e la configurazione di analisi ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Prova il generatore di codice" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"L'app raggruppa il tempo in {ph0}blocchi di 30 secondi.{ph1} Combina il " +"numero di blocco con la chiave dell'account per generare un codice. La " +"stessa chiave e blocco producono lo stesso codice." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Spostare l'orologio attraverso 60 secondi" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Tempo" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "secondo" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Il nostro orologio di esempio regolabile" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "blocco di 30 secondi" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Blocco" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 secondi{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Codice generato" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Chiave account + blocco → sei cifre" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Tempo di esempio, in secondi" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 secondi" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 secondi" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"A 59 secondi: {ph0}287082.{ph1} A 60 secondi: {ph2}359152.{ph3} Lo " +"spostamento all'interno di un blocco lascia il codice invariato." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"La chiave è fissa, pubblica {ph0}Dati di prova RFC 6238{ph1}. La demo " +"implementa il calcolo recuperato dal APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"Il diagramma mostra il risultato a 59 secondi. Abilita JavaScript per " +"cambiare l'orologio." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Trova il codice con REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Restringere il APK a tre classi" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} è il candidato di calcolo; gli altri due riguardano la barra di " +"avanzamento e gli account importati. TOTP indica una password una tantum " +"basata sul tempo." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Collegare il generatore al display dell'app" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA identifica il sovraccarico timestamp e trova i chiamanti del metodo di " +"base. Ispezionare {ph0} poi mostra il display chiamata {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Le richieste mostrano un percorso di input abbreviato. I nomi delle classi " +"dei risultati omettono il comune {ph0} prefisso." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Leggi il calcolo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA restituisce {ph0}la conversione dell'orologio, le impostazioni " +"predefinite e i metodi di generazione.{ph1} I costruttori impostano un " +"intervallo di 30 secondi e sei cifre; il metodo timestamp trasforma i " +"secondi in un numero di blocco." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Blocco di tempo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Chiave + blocco" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Sei cifre" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Il tempo sceglie il blocco.{ph1} I secondi da 30 a 59 danno tutti il " +"blocco 1. A 60 secondi, il blocco diventa 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}Anche le questioni chiave.{ph1} Il generatore combina la chiave " +"dell'account con il blocco. Un account con una chiave diversa può mostrare " +"un codice diverso allo stesso tempo." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Tieni sei cifre.{ph1} Il resto dopo la divisione per 1.000.000 è " +"riempito con zeri quando necessario, quindi un codice può iniziare con 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Estratti da diversi metodi ispezionati, con avvolgimento di linea per la " +"visualizzazione. Il pannello di destra è un riassunto esplicativo. {ph0} Il " +"codice Aegis è GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "All'interno del generatore" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"Il APK rilasciato mette {ph0} in {ph1}. REA segue la chiamata da {ph2} e " +"restituisce questo corpo; la fonte originale chiama l'helper {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"L'ultimo byte di hash seleziona una posizione. Quattro byte in quella " +"posizione forniscono un numero positivo a 31 bit; la formattazione lo riduce" +" al numero di cifre richiesto. L'ultimo argomento del costruttore seleziona " +"il ramo di formattazione del codice introdotto dalla compilazione." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Confronta con la sorgente di rilascio corrispondente{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Controlla la ricostruzione" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Abbiamo assemblato i metodi Java restituiti da REA selezionati in un piccolo" +" programma di test. La loro produzione corrispondeva a una ricostruzione " +"indipendente su {ph0}133 casi di prova{ph1}, compresi i limiti del blocco " +"temporale e i codici che iniziano con zero." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Tempo di esempio" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Codice a sei cifre" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 secondi" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 secondi" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Il generatore corrisponde anche ai sei casi di riferimento SHA-1 pubblicati " +"in {ph0}RFC 6238{ph1}. Controlla l'implementazione del browser contro di " +"loro:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Eseguire controlli di riferimento" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Leggi il calcolo della demo" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"I casi di riferimento utilizzano otto cifre. Il controllo verifica anche i " +"loro risultati a sei cifre." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Verifica esegue metodi Java estratti e la nuova demo. L'Android APK è stato " +"ispezionato staticamente." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Ispezionare il APK da soli" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Impostare REA {ph1} su macOS o Linux, quindi scaricare questi due file " +"nella stessa cartella. Su Windows, utilizzare un ambiente Linux come WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Android analysis ha bisogno di un JDK completo 17 o successivo. Selezionalo " +"con {ph0} o {ph1}. Questo caso ha usato JDK 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Puntare REA sul file del provider e ispezionare APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Il tuo agente può continuare attraverso CLI di REA utilizzando il prompt " +"sopra. Per MCP, aggiungere {ph0} all'ambiente del server REA e ricollegarlo." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Una prossima domanda: {ph0}cosa succede quando un account utilizza otto " +"cifre o un intervallo di tempo diverso?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Fonte" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Rilascio ufficiale di Aegis 3.4.3{ph1} · {ph2}Commit sorgente " +"corrispondente{ph3} · {ph4}Licenza GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}RFC 6238 casi di riferimento{ph1} · {ph2}Dati di prova demo{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Ispezionato con REA 6.1.0 il 9 ottobre 2026. Estratti decompilati sono " +"accreditati a Aegis ; il diagramma, il riepilogo leggibile e la " +"ricostruzione del browser sono nuovo materiale didattico." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK Reverse Engineering: Codici di accesso-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Ispeziona Aegis Android APK con REA, recupera il calcolo del codice di " +"accesso a sei cifre e prova una ricostruzione con un orologio regolabile." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Studio di caso Aegis APK" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Copia il prompt di esempio di Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Segui il calcolo del codice di accesso" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Copia il comando di ispezione APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Casa{ph1} / {ph2}Vetrina{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Caso di studio * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Trova la bandiera in{ph0}un binario CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Usa REA per ispezionare un piccolo correttore di flag, trasformare le sue " +"regole in equazioni e trovare un input che faccia stampare il programma " +"originale {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "quadrati mascherati bandiera checker * Facile * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Visualizza la sfida originale" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "Da un binario a una risposta controllata" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * Trova il controllo{ph1}{ph2}Stringhe → funzioni di " +"controllo{ph3}{ph4} REA trova il prompt, i suoi riferimenti e il codice che " +"accetta o rifiuta un input.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * Estrai le regole{ph1}{ph2}36 caratteri * 26 somme{ph3}{ph4} REA " +"restituisce le istruzioni e i dati dietro ogni controllo. L'agente li " +"trasforma in equazioni.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * Risolvere ed eseguire{ph1}{ph2}Bandiera recuperata → " +"Corretta!{ph3}{ph4}Uno script Python risolve le equazioni. REA cattura il " +"programma originale accettando il risultato.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"La sfida è di joseph, pubblicato nel repository ufficiale di DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "In questo caso di studio" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Trova il codice di controllo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Leggi una maschera{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Assembly a codice leggibile{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Risolvi le equazioni{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Controlla la risposta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Provalo tu stesso{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Trova il codice di controllo" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Il volantino è un eseguibile da 15 KB. Chiede una bandiera, poi stampa {ph0}" +" o {ph1}. Inizia con una semplice richiesta al tuo agente." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Copia" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per analizzare ms_flag_checker e trovare il " +"flag. Spiega come funzionano i controlli, quindi verifica la risposta con il" +" programma originale.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Un prompt di esempio, con la sfida scaricata disponibile localmente e " +"un'analisi del provider di programmi di codice macchina collegato." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Seguire il prompt di input per la sua funzione" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"Il riferimento fornisce all'agente un posto in cui indagare, anche se i nomi" +" delle funzioni originali dell'eseguibile sono stati rimossi." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Leggi il correttore e i suoi due aiutanti" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"Il primo ciclo copia 36 codici di caratteri. Il ciclo di controllo " +"decodifica una maschera, somma i codici selezionati e confronta il risultato" +" con un numero memorizzato. Sua {ph0}- passi byte attraverso {ph1} i byte " +"danno 26 maschere." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Questi sono risultati selezionati da una nuova analisi REA. Il percorso di " +"destinazione locale viene abbreviato per la visualizzazione; gli indirizzi " +"si riferiscono all'immagine importata di REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Un controllo rivela un carattere" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Il controllore organizza l'ingresso in una griglia 6×6. Una maschera sceglie" +" quali cellule contribuiscono a una somma. La sua codifica compatta utilizza" +" numeri negativi per saltare le celle e numeri positivi per selezionarli." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" +"Il settimo controllo seleziona solo una posizione. {ph0}Apri figura{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Leggi la maschera e il suo obiettivo dal binario" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"Istruzione {ph0} legge i byte della maschera come valori firmati. Ecco " +"perché {ph1} significa -21. L'obiettivo è un numero intero little-endian. " +"Insieme, questi byte dicono all'agente che {ph2}, in modo che il carattere è" +" {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Dalle istruzioni a un controllo leggibile" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Selezionare un passaggio per collegare l'helper sommatore e il suo chiamante" +" alla stessa regola in C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Inizia" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Selezionare" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Aggiungere" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Anticipo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Confrontare" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * istruzioni originali selezionate" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Leggibile C * riepilogo di un controllo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * Inizia da zero.{ph1} {ph2} contiene la somma corrente." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * Controllare la cella della maschera.{ph1} Un valore zero salta il " +"carattere; un valore diverso da zero lo include." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * Aggiungere un codice di carattere.{ph1} L'intero dell'input con lo" +" stesso offset viene aggiunto alla somma." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * Passare alla cella successiva.{ph1} Il ciclo originale avanza di " +"quattro byte per numero intero e visita sei righe di sei celle." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * Confronta con l'obiettivo memorizzato.{ph1} Il chiamante riceve la" +" somma in {ph2}. Una mancata corrispondenza salta a {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Le istruzioni provengono dall'helper sommatore e dal suo chiamante. La C è " +"un riassunto esplicativo con nomi descrittivi e un ciclo appiattito a 36 " +"celle." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Risolvi le 26 equazioni" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"La maggior parte delle maschere seleziona diverse celle. Ad esempio, il " +"primo controllo aggiunge 16 codici di caratteri e richiede un totale di " +"1441. Le selezioni sovrapposte danno equazioni che un piccolo script Python " +"può risolvere insieme." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python * estratto del risolutore" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 è un risolutore che trova valori che soddisfano queste equazioni. Questo " +"estratto utilizza i controlli estratti e presuppone un {ph0} bandiera con " +"lettere, cifre, caratteri di sottolineatura e parentesi graffe. Il download " +"completo include tutte le 26 maschere e obiettivi." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Scarica il risolutore completo" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Controlla la risposta con il programma originale" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"L'acquisizione del processo di REA registra l'eseguibile originale " +"accettando il flag risolto. Modifica di un carattere selezionato da {ph0} " +"per {ph1} fa la prima somma 1440 invece di 1441, e il programma lo rifiuta." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Input" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Uscita osservata" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Codice di uscita" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Bandiera del risolutore" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Un personaggio cambiato" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Mostra il flag recuperato e l'output catturato" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * uscita del programma originale" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Copia bandiera" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"Il valore recuperato corrisponde anche alla bandiera nei metadati della " +"sfida pubblicati dagli organizzatori, controllati dopo aver risolto il " +"binario." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Fonte, identità di destinazione e dettagli di analisi" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Analisi fresche e due acquisizioni di processo l ' 8 ottobre 2026, " +"utilizzando REA 4.1.0 con Ghidra 12.1.4 su Linux x64. Il binario è un ELF " +"x86-64 spogliato, 15.248 byte." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"I riferimenti di stringa, le funzioni e le costanti sono stati ispezionati " +"prima di leggere la fonte o la soluzione degli organizzatori. Il risolutore " +"Python e il diagramma sono stati costruiti da quei risultati REA." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Confronta con la fonte degli organizzatori{ph1} · {ph2}Metadati sfida e" +" flag{ph3} · {ph4} Note di prova REA{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Provalo tu stesso" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Scarica la sfida originale e il risolutore in un'unica cartella. Utilizzare " +"il prompt sopra per indagare con il proprio agente o eseguire lo script " +"incluso." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Terminale * risolvere ed eseguire" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Lo script stampa un flag candidato; incollarlo al prompt del programma. " +"Risolvere i bisogni di Python e {ph0}. L'esecuzione dell'eseguibile " +"originale richiede Linux x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Configura REA con il tuo agente di codifica" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "Reverse Engineering CTF: Controllo bandiera DownUnderCTF-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Usa REA per risolvere il correttore di flag quadrati mascherati di " +"DownUnderCTF. Trova le funzioni di controllo, estrai le maschere e confronta" +" un flag recuperato con il programma originale." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "Caso di studio CTF flag-checker" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Copia CTF esempio prompt" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "" +"Equazione maschera CTF; scorrere orizzontalmente su schermi più piccoli" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"La settima maschera salta 21 celle, seleziona la posizione 21, quindi salta " +"14. Solo quella cella contribuisce alla somma. Il suo codice di carattere " +"richiesto è 55, il che significa che il carattere è 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Segui il controllo CTF" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Copia CTF assembly" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Copia controllo CTF leggibile" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Copia estratto del risolutore CTF" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Copia recuperato bandiera" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Copia i comandi del risolutore CTF" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Casa{ph1} / {ph2}Vetrina{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Caso di studio * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Ricostruzione DX-Ball {ph0}dal suo eseguibile." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"L'obiettivo è una versione C mantenibile del gioco Windows del 1996. REA " +"aiuta l'agente a ispezionare l'originale, una funzione alla volta." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 * C * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Una funzione, dall'eseguibile al controllato C. REA fornisce le istruzioni, " +"i chiamanti e le letture dei dati; il progetto di ricostruzione implementa e" +" verifica il risultato. {ph0}Apri figura{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "In questo caso di studio" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Progetto{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Suono pan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Controllo del risultato{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Continua il lavoro{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "funzioni C mantenute" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "confronto con il codice originale" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "funzioni con byte compilati corrispondenti" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Checkpoint del progetto: 7 ottobre 2026. {ph0}Progress ledger{ph1} · " +"{ph2}Copertura di prova{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Il progetto finora" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Il codice recuperato copre bordo e la gestione delle risorse, colpi di " +"mattoni, animazioni, particelle e la produzione di bonus. Le build correnti " +"forniscono utilità di ispezione e una libreria di analisi. Il lavoro sul " +"gioco giocabile continua con la fisica della palla e della pagaia, la " +"gestione dei potenziamenti e l'integrazione con Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Trovare il calcolo della posizione del suono sinistra/destra" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Quando un mattone viene colpito, la sua posizione orizzontale viene passata " +"al codice audio. L'indagine era necessaria per recuperare il modo in cui " +"quella coordinata dello schermo diventa un valore di panning " +"sinistro/destro." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Copia" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per scoprire come DX-Ball calcola il " +"posizionamento del suono stereo. Spiega il calcolo e mostra il " +"codice.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Un prompt di esempio per l'agente di codifica, con l'eseguibile locale " +"disponibile. L'indagine di seguito mostra le query REA e le prove dietro la " +"risposta." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"L'agente ha utilizzato REA per ispezionare la funzione, seguire il suo " +"chiamante brick-hit e leggere le costanti dall'eseguibile. Questi risultati " +"hanno fornito l'input e l'aritmetica necessari per scrivere la funzione C " +"qui sotto." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"Il primo risultato della funzione per {ph0} dichiarazione pseudocodice " +"inclusa {ph1} e chiamando {ph2}. La sua vista delle istruzioni mostrava un " +"input dello stack e operazioni in virgola mobile. Questa discrepanza ha dato" +" all'agente un motivo concreto per continuare a indagare." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "La prima vista decompilatore" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"L'output mostra una chiamata di conversione. La lettura delle istruzioni " +"riportate di seguito rivela l'input e il calcolo che alimenta quella " +"chiamata." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Tre domande risposte attraverso REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Recuperare l'input mancante" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"Il risultato della funzione include istruzioni insieme a pseudocodice e " +"chiamanti. Qui, {ph0} espone l'input intero mancante dalla vista decompiler." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Seguire il chiamante per capire l'input" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA ha identificato questo chiamante nel primo risultato. Le sue istruzioni " +"precedenti scala {ph0} con 30; l'aggiunta di 20 dà la coordinata dello " +"schermo del mattone, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Leggere i valori dietro gli indirizzi di memoria" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"I byte restituiti stabiliscono le due costanti aritmetiche e la scala pan " +"iniziale. L'agente ora ha i valori necessari per l'espressione C." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "Dai risultati di REA a C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Segui i cinque passaggi seguenti. Ogni selezione evidenzia le istruzioni " +"originali e le linee C che hanno informato." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Input" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Moltiplicare" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Sottrarre" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Scala" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Restituire" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Originale x86 * estratto" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Ricostruito C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * Leggere l'input.{ph1} La vista delle istruzioni nel risultato " +"della funzione di REA legge {ph2} e usi {ph3} per caricare il numero intero." +" Seguendo il suo chiamante attraverso REA stabilisce il significato della " +"coordinata dello schermo del parametro C {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * Moltiplicare per 1,5625.{ph1} {ph2} legge il doppio a {ph3}. I " +"byte restituiti da REA {ph4} decodifica a {ph5} C utilizza la stessa " +"costante." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * Sottrarre 500.0.{ph1} {ph2} legge il doppio a {ph3}. Il risultato" +" byte di REA decodifica in {ph4}, spostando il centro del calcolo alla " +"coordinata dello schermo {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * Applicare la scala memorizzata.{ph1} Secondo {ph2} leggere {ph3}. " +"Questo globale è chiamato {ph4} nella fonte mantenuta. Il secondo byte " +"letto di REA stabilisce il suo valore iniziale di {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * Restituisce un numero intero.{ph1} La chiamata a {ph2} raggiungere" +" {ph3}, identificato nei risultati del callee di REA. Il C lancia il " +"risultato a {ph4}; originale-x86 confronti controllare il valore restituito." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"L'estratto dell'assembly seleziona le istruzioni di input, aritmetica e " +"ritorno. L'elenco completo di seguito include anche i negozi intermedi e " +"l'impostazione e la pulizia delle funzioni." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Assemblea completa e prove a sostegno" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA risultato * 0x406400-0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Cosa fornisce il chiamante" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"La funzione brick-hit a {ph0} ridimensiona la sua coordinata tile di 30, " +"aggiunge 20, quindi la spinge prima della chiamata:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Ciò che i dati leggono stabiliscono" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA byte legge, decodificato come little-endian raddoppia" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Indirizzo" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Valore" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Usato per" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Prima moltiplicazione" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Sottrazione" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} inizialmente" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Scala pan memorizzata" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Registrato con REA 4.1.0 per il target DX-Ball 1.07 bloccato con hash. Le " +"note di indagine collegate conservano gli ID delle prove." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Fonte mantenuta{ph1} · {ph2}Note di indagine e riferimenti alle " +"prove{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Controllo della funzione recuperata" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"La funzione recuperata passa due controlli: i suoi valori di ritorno " +"corrispondono all'originale e i suoi byte compilati corrispondono " +"all'eseguibile." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3.205 casi di comportamento" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"I test eseguono la funzione x86 originale e confrontano il suo valore di " +"ritorno con il C mantenuto.Coprono ogni posizione intera da 0 a 640 a cinque" +" scale pan: 0, 0.5, 1, 20 e -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 byte corrispondenti" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"La funzione C è compilata con la toolchain VC4.0 bloccata. La riproduzione " +"del compilatore corrisponde alla funzione completa dopo aver applicato le " +"rilocazioni riviste e controllato le costanti di riferimento." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"In una scala di 1, il calcolo recuperato restituisce -500 sul bordo " +"sinistro, 0 al centro e 500 sul bordo destro. La parte successiva del lavoro" +" audio è l'integrazione di tale valore con il back-end audio del gioco." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Leggi i dettagli di riproduzione del compilatore{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Continua l'indagine" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"Lo stesso approccio viene utilizzato per gli aggiornamenti delle particelle," +" le code di esplosione e la generazione di bonus: ispezionare le funzioni " +"pertinenti, recuperare il loro stato e le dipendenze, quindi confrontare " +"l'implementazione con l'originale." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Per ispezionare personalmente la funzione sound-pan, seguire le istruzioni " +"di installazione del progetto DX-Ball e fornire il relativo target originale" +" corrispondente. Allora corri:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "Nel checkout DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} Archivio DX-Ball{ph1}{ph2}Fonte corrente, progresso e configurazione " +"locale.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} Flusso di lavoro di analisi REA{ph1}{ph2}Seguire il calcolo, quindi " +"utilizzare lo stesso approccio con il proprio binario.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Particelle e produzione di bonus{ph1}{ph2}Un'indagine più ampia sullo " +"stato, le code e le scritture dei pixel.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball Reverse Engineering: Panning del suono-REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Seguire una ricostruzione DX-Ball dall'analisi binaria attraverso REA a C " +"mantenuto, test originali-x86 e corrispondenti byte di funzioni compilate." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball sound-pan investigation; scorri orizzontalmente su schermi più " +"piccoli" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.La funzione EXE 0x00406400 è ispezionata con REA . Un chiamante " +"brick-hit fornisce 20 più 30 volte tile_x. Istruzioni caricare x, " +"moltiplicare per 1.5625, sottrarre 500.0, applicare pan_scale e restituire " +"un numero intero. Il C mantenuto viene controllato indipendentemente " +"dall'originale x86 in 3.205 casi e dal replay del compilatore VC4.0 che " +"corrisponde a 63 byte." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball ricostruzione caso di studio" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Copia esempio prompt" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Seguire il calcolo di sinistra / destra posizione del suono" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Copia estratto di assemblaggio originale" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Copia suono-funzione pan" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Copia suono completo-pan assembly" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Copia il comando di analisi DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Casa{ph1} / Vetrina" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "Studi di casi REA." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, giochi, Electron e una sfida CTF, con codice, figure e risultati " +"controllati." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android * Analisi APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Come un autenticatore genera un codice di accesso" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Trova il calcolo del codice a sei cifre di Aegis nel suo APK rilasciato . " +"Traccia i metodi di generazione con REA, quindi sposta un orologio demo per " +"vedere perché il codice cambia ogni 30 secondi." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Leggi il case study di Android" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * Analisi di programmi a codice macchina" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Risolvere un CTF flag checker" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Ispezionare una sfida DownUnderCTF facile con REA . Trova le sue funzioni di" +" controllo, trasforma maschere e somme in equazioni, quindi verifica il flag" +" risolto con il programma originale." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Leggi il caso di studio CTF" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Nativo * Ricostruzione" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball ' s calcolo di sinistra / destra posizione del suono" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Recuperare un calcolo di sinistra / destra posizione del suono da un 1996 " +"Windows gioco. Le istruzioni di REA, i riferimenti del chiamante e le " +"costanti numeriche portano a una piccola funzione C, verificata rispetto al " +"comportamento originale e a tutti i 63 byte compilati." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Leggi il caso di studio DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * Funzione di tracciamento" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Come Notion copia testo e HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Traccia un'API rivolta alla pagina attraverso JavaScript confezionato di " +"Notion. Segui i suoi wrapper IPC negli appunti di sistema, quindi guarda " +"come un piccolo marcatore HTML mantiene i dati dei blocchi ricchi collegati " +"a una copia." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Leggi il caso di studio Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS * Ricostruzione" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Come TH04 mira un anello di proiettili" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Ispezionare l'assistente angolare a 16 bit originale con REA . Abbina le sue" +" operazioni di moltiplicazione, divisione e coordinamento a C++ leggibile, " +"quindi guarda come producono un anello rivolto al giocatore." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Leggi il caso di studio TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Guide passo-passo" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Le guide seguono un calcolo nativo, un'esportazione Electron e una richiesta" +" del browser. Ognuno inizia con un prompt e un obiettivo concreto." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Leggi le guide" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Studi di casi di reverse engineering-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Segui le indagini REA attraverso codice, figure e demo: un autenticatore " +"Android, DX-Ball , Notion , TH04 e un correttore di flag DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Casa{ph1} / {ph2}Vetrina{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Caso di studio * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Come copie Notion{ph0}testo e HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Traccia una chiamata negli appunti dall'API della pagina di Notion, " +"attraverso il precarico e il processo principale, allo scrittore degli " +"appunti di Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion Desktop 7.6.1 · JavaScript · REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Il ponte all'interno del pacchetto desktop Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * API rivolta verso la pagina{ph1} {ph2}{ph3}{ph4} {ph5}Il precarico" +" espone un metodo richiamabile.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * Precarico involucro{ph1} {ph2}{ph3}{ph4} {ph5}Il wrapper invia il " +"canale e gli argomenti.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * Gestore del processo principale{ph1} {ph2}{ph3}{ph4} {ph5}Il " +"destinatario controlla quale pagina l'ha inviata.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * Appunti di sistema{ph1} {ph2}{ph3}{ph4} {ph5} Electron scrive il " +"testo e l'HTML forniti.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Un canale unisce i due lati: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Il codice pacchettizzato utilizza lo stesso canale nel processo di precarico" +" e principale. La risoluzione dei wrapper rivela le chiamate Electron dietro" +" quei nomi." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "In questo caso di studio" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Segui il ponte degli appunti{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Mantenere la struttura di un blocco{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Altri esempi e fonti{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Dove va l'operazione di copia?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"La pagina vede un metodo chiamato {ph0}. La sua implementazione nel " +"precarico è un wrapper. La domanda utile è cosa invia quel wrapper e quale " +"codice lo riceve." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Copia" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per tracciare come Notion copia testo e HTML " +"negli appunti di sistema. Mostra il codice ad ogni passaggio.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Un prompt di esempio con il pacchetto di applicazioni locali di Notion " +"disponibile per l'agente di codifica." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA trova dove iniziare a leggere" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Analizzando il precarico scheda con REA individua l'API esposta alla pagina " +"e la chiamata che invia una richiesta IPC. Entrambi i risultati sono dotati " +"di intervalli di origine nel pacchetto minificato:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA risultati → due posti da aprire" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Campi selezionati da un fresco {ph0} risultato sul precarico scheda di " +"Notion, registrato con REA 4.1.0. Le posizioni utilizzano la linea e la " +"colonna zero del bundle originale." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"L'agente apre tali posizioni, trova il membro degli appunti nell'API " +"assemblata e legge {ph0}. Il suo sito di chiamata fornisce {ph1}. Quel nome " +"dà all'agente qualcosa di preciso da cercare nel pacchetto principale. I " +"quattro estratti qui sotto mostrano il percorso che collega." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Quattro brevi pezzi di codice" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Semplificato dal pacchetto JavaScript, con nomi di variabili leggibili. I " +"membri non correlati sono omessi." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Inizia dall'API esposta alla pagina" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Questo membro fornisce il nome del canale. L'attuazione di {ph0} ci dice " +"come la richiesta lascia il processo della pagina." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Risolvere il wrapper del precarico" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"La funzione restituita inoltra gli argomenti tramite IPC di richiesta e " +"risposta di Electron. Ora possiamo cercare {ph0} dal lato del processo " +"principale." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Controlla come è registrato il ricevitore" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Il processo principale utilizza un altro wrapper. Sua {ph0} metodo registra " +"un {ph1} ricevitore per quel canale." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Trova la scrittura e il suo controllo mittente" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Questa è la destinazione. Dopo aver controllato il mittente, il gestore " +"passa i dati forniti all'API degli appunti di Electron. Il canale e i due " +"wrapper risolti collegano il metodo esposto a questa chiamata." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "In che modo un blocco copiato mantiene la sua struttura?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"L'editor web di Notion invia testo e HTML attraverso {ph0}. Mantiene i dati " +"del blocco localmente e inserisce un ID nell'HTML copiato per collegarli." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "Collegamenti HTML ai dati di blocco salvati" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Leggi l'ID HTML" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Trova lo stesso ID locale" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Ripristinare i dati del blocco Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Testo illustrativo e ID. Il test del modulo registrato ripristina i dati del" +" blocco quando gli ID corrispondono; una voce obsoleta restituisce solo " +"testo e HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"In incolla, Notion cerca l'ID HTML e lo controlla rispetto alla copia " +"salvata. Gli ID corrispondenti ripristinano i dati del blocco." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Formato appunti registrato da risorse Web memorizzate nella cache il 13 " +"luglio 2026." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Altri esempi e fonti" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Un altro esempio: tabelle Markdown" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion analizza Markdown in dati di blocco. Questo esempio mostra come una " +"tabella diventa intestazione e righe di dati." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Una tabella attraverso il parser Markdown di Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Uscita registrata da un parser Markdown estratto. La tabella diventa righe e" +" celle." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Un altro percorso: la connessione SQLite offline" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Richieste di rendering di Notion {ph0} attraverso IPC. Il processo " +"principale crea un canale di messaggi e fornisce una porta al renderer e " +"l'altra a un processo di utilità SQLite. I successivi lotti di istruzione e " +"i risultati viaggiano su quella porta." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"In seguito a questo handoff spiega dove viene eseguito il lavoro del " +"database e perché tracciare solo la richiesta IPC iniziale manca la " +"conversazione successiva." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Fonti e come leggere gli estratti" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Il ponte degli appunti proviene da Notion Desktop 7.6.1 {ph0}: la scheda " +"precarico e {ph1}. Gli estratti espandono i nomi delle variabili minificate " +"e omettono codice non correlato; l'helper sender-check viene mostrato con il" +" suo sottostante {ph2} chiamare." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Gli esempi di Appunti virtuali e Markdown provengono da risorse Web " +"memorizzate nella cache il 13 luglio 2026, inclusi i moduli {ph0}, {ph1}, " +"{ph2} e {ph3}. Tali risorse hanno una loro versione. Le sonde salvate hanno " +"eseguito moduli estratti e piccoli cablaggi; i loro output descrivono quelle" +" sonde piuttosto che una sessione di interfaccia utente desktop catturata." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"Il risultato REA mostrato qui è un'analisi mirata del precarico scheda " +"salvato, registrato con il pacchetto REA 4.1.0 pubblicato. Individua l'API e" +" richiama l'operazione. Il membro degli appunti e il ricevitore " +"corrispondente sono collegati leggendo le loro implementazioni wrapper nel " +"pacchetto." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"L'esempio di Markdown utilizza il modulo parser {ph0}. I test dei moduli " +"salvati mostrano che entrambi i filtri di pagina e chat conservano questa " +"tabella. I parser paste/import, structured Markdown e AI/chat hanno punti di" +" ingresso separati e formati intermedi." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} Guida all'applicazione JavaScript{ph1}{ph2}Seguire la funzione di " +"esportazione di una piccola applicazione Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} DX-Ball ricostruzione{ph1}{ph2}Seguire le istruzioni native per una " +"funzione C selezionata.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron Reverse Engineering: Appunti-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Segui l'API degli appunti di Notion attraverso il precarico di Electron, i " +"wrapper IPC e il processo principale, con brevi estratti di codice e uno " +"sguardo al suo ricco formato di appunti." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Studio di caso Notion Electron" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Copia il prompt di analisi Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Copia estratto di precarico Notion" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Copia Notion invoke wrapper estratto" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Copia estratto del wrapper del gestore Notion" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Copia estratto del ricevitore degli appunti Notion" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Ripristino dei dati degli appunti ricchi su incolla" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Vai al contenuto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Casa{ph1} / {ph2}Vetrina{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Caso di studio · Touhou 4: Lotus Land Story" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Ricostruzione di TH04{ph0}modelli di proiettile." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Un anello di proiettili inizia con un calcolo dell'angolo corto. Utilizzare " +"REA per ispezionare la funzione DOS originale, quindi seguire le sue " +"istruzioni in C++leggibile." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 * DOS a 16 bit * C++ e assemblaggio" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Visualizza la ricostruzione TH04" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Dalle istruzioni originali alla fonte controllata" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * Gioco originale{ph1}{ph2}PRINCIPALE.EXE{ph3}{ph4}L'eseguibile " +"PC-98 e il suo helper bullet-angle.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * Ispezionare con REA {ph1}{ph2}Istruzioni + " +"riferimenti{ph3}{ph4}Verificare il codice DOS caricato e leggere il calcolo " +"dell'angolo dall'eseguibile.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * Leggere il C++{ph1}{ph2}Spazio → obiettivo → " +"ruota{ph3}{ph4}Collegare ogni operazione alla ricostruzione mantenuta.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * Controllare la fonte{ph1}{ph2}2,139 byte corrispondenti{ph3}{ph4}I" +" controlli del compilatore registrati coprono il codice di generazione " +"bullet che contiene questo helper.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA restituisce il codice originale e le sue prove di analisi. Il progetto " +"TH04 fornisce i controlli di origine e compilatore mantenuti." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "In questo caso di studio" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}Il bullet ring{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}Cosa restituisce REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Montaggio in C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Verifica della fonte{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Il progetto completo{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Come un anello mira al giocatore" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"L'attacco di Elly richiede un anello mirato con un conteggio iniziale di 16." +" Un aiutante calcola la direzione di ogni proiettile. Lo stesso anello può " +"affrontare una direzione fissa o girare verso il giocatore." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Il tuo agente di codifica" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Copia" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Usa REA per scoprire come TH04 crea un anello di proiettili " +"e lo mira al giocatore. Spiega il calcolo e mostra il codice.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Un prompt di esempio, con l'eseguibile originale e il checkout di " +"ricostruzione disponibili localmente." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 memorizza una rotazione completa in senso orario in 256 unità angolari." +" Per 16 punti, ogni indice aggiunge 16 unità: {ph0}. Aggiungendo la " +"direzione del giocatore ruota insieme quelle posizioni." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Un'illustrazione della matematica dell'angolo recuperato per il conteggio " +"16, la direzione del giocatore 40 e la rotazione del modello 0. {ph0}Apri " +"figura{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Il modello di cottura nella fonte recuperata" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Elly's ring attack * fonte estratto" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Queste linee selezionano il modello prima della difficoltà e della messa a " +"punto delle prestazioni. {ph0}Leggi la fonte dell'attacco{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "Cosa restituisce REA" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Controlliamo {ph0}, la funzione che imposta la velocità e l'angolo di ogni " +"proiettile. REA restituisce le sue istruzioni, pseudocodice e riferimenti. " +"Tre parti di questo risultato spiegano il modello." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Controllare l'immagine DOS prima di leggere il suo codice" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"Il controllo lega il codice caricato e i record di rilocazione " +"all'eseguibile fornito. Il percorso sopra è abbreviato per la " +"visualizzazione." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Leggi l'anello moltiplica e dividi" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} contiene l'indice proiettile. Lo spostamento lo moltiplica per 256, " +"quindi la divisione utilizza il conteggio letto da {ph1}. I nomi di origine " +"mantenuti quel campo {ph2}. La sequenza completa appare sotto." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Trova dove il modello gira verso il giocatore" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Gli operandi di istruzione espongono due differenze di coordinate e un " +"assistente di direzione. Il suo valore di ritorno viene aggiunto all'angolo " +"dell'anello relativo. I nomi di origine rendono leggibili quegli indirizzi; " +"REA consente all'agente di controllare le operazioni originali dietro di " +"loro." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Dall'assembly al C++leggibile" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Selezionare un passaggio che corrisponda alle istruzioni originali con il " +"calcolo dell'angolo. Questo riepilogo segue il percorso dell'anello mirato; " +"la fonte completa gestisce anche spread, stack e modelli casuali." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Indice" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Spazio" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Obiettivo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Ruotare" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Memorizzare" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * istruzioni originali a 16 bit" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "C++ leggibile * riepilogo dell'anello mirato" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * Leggere l'indice proiettile.{ph1} L'argomento stack viene caricato" +" in {ph2}. In un anello a 16 proiettili, questo indice membro va da 0 a 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Spazio le direzioni intorno a un giro completo.{ph1} {ph2} " +"moltiplicato per 256. Il conteggio è zero-esteso in una parola, quindi {ph3}" +" divide il prodotto per quel conteggio. Per il conteggio 16, ogni indice " +"avanza di 16 unità angolari." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * Aggiungi la direzione del giocatore.{ph1} Le due sottrazioni " +"formano le coordinate player-minus-origin. L'assistente di direzione " +"restituisce un angolo in {ph2}; aggiungendo si gira l'intero anello verso il" +" giocatore." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * Aggiungere la rotazione del modello.{ph1} {ph2} aggiunge l'angolo " +"del modello. Il modello iniziale di Elly lo imposta a zero; altri modelli " +"possono utilizzare lo stesso helper con una rotazione." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Mantenere l'angolo finale in un byte.{ph1} Il negozio scrive {ph2}" +" al campo angolo di spawn. I valori si chiudono dopo 255, proprio come fa il" +" cast di byte senza segno. La sorgente circostante converte anche questo " +"angolo e velocità in velocità." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"L'assemblaggio seleziona il ramo dell'anello di mira, il calcolo " +"dell'obiettivo e l'archivio finale. Il C++ sopra è un riassunto leggibile. I" +" controlli del compilatore riportati di seguito si applicano all'origine " +"mantenuta nel progetto collegato." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Leggi l'anello mantenuto e la fonte aim" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Anello macro{ph1} · {ph2}Sorgente di mira e velocità{ph3} · " +"{ph4}Rappresentazione angolare{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Verifica della fonte mantenuta" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"I controlli registrati del progetto TH04 compilano il codice di generazione " +"bullet, incluso questo helper, con la sua toolchain Turbo C++ 4.0 J " +"bloccata." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 byte corrispondenti" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Il codice di generazione bullet compilato corrisponde a una sezione di 2.139" +" byte dell'eseguibile originale." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Due build pulite" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Due build separate producono gli stessi byte corrispondenti. Gli hash di " +"input registrati corrispondono alla sorgente mantenuta mostrata qui." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Registrato il 3 ottobre 2026. {ph0}Leggi i controlli del compilatore{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Identità target e ambito di analisi" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Obiettivo originale" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156,258 byte, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Helper entry" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} nell ' immagine caricata di REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Offset file originale" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, restituito da {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Ispezione del codice registrato" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 Ottobre 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"I controlli del compilatore coprono la sezione completa del codice bullet-" +"add, incluso questo helper. Confrontano anche il suo contributo alla MAPPA e" +" il trasferimento sovrapposto." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA verificato l'immagine di carico statico DOS al segmento di carico {ph0}." +" I suoi indirizzi descrivono quell'immagine di analisi. Il risultato della " +"funzione riporta 503 byte del corpo in due intervalli su un intervallo di " +"517 byte; le istruzioni selezionate sopra si trovano in quegli intervalli " +"riportati." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"I nomi dei sorgenti e i controlli del compilatore provengono dal checkpoint " +"TH04 {ph0}. Le precedenti osservazioni di ricostruzione utilizzavano gli " +"script di analisi del progetto; questa pagina aggiunge una nuova ispezione " +"REA dello stesso obiettivo originale. L'identità del gioco in dotazione è " +"bloccata dal suo repository manifest, con la provenienza indipendente di " +"pristine-dump ancora aperta." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"La figura illustra il calcolo dell'angolo. I controlli di gioco completi, i " +"tempi e il comportamento hardware PC-98 hanno controlli di runtime separati " +"nel progetto di ricostruzione." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "La ricostruzione completa TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Il progetto costruisce quattro prodotti DOS del gioco da mantenuto C++ e " +"assembly. Oltre alla generazione di proiettili, la fonte copre fasi, boss, " +"rendering, input, menu, finali e gestione dei punteggi." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Esplora il repository TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Fonte di generazione di proiettili{ph1}{ph2}L'helper completo, altri " +"tipi di pattern e template tuning.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}DOS costruire ed eseguire guida{ph1}{ph2}Crea il sorgente e testalo nel" +" flusso di lavoro dell'emulatore PC-98 del progetto.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Stato attuale del progetto{ph1}{ph2}Verifica DOS e la porta x64 nativa " +"separata.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 Reverse Engineering: modelli di proiettile DOS-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Ispezionare il codice DOS originale a 16 bit di TH04 con REA . Seguire " +"l'assemblea e recuperato C++ per vedere come un anello di proiettili è " +"distanziato e rivolto al giocatore." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "In questa pagina" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "Caso di studio TH04 bullet-pattern" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Copia il prompt di esempio di TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 anelli di proiettile fissi e mirati; scorrere orizzontalmente su " +"schermi più piccoli" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Due diagrammi di un anello a 16 proiettili. L'anello fisso inizia " +"dall'angolo zero. L'aggiunta di una direzione del giocatore di 40 ruota ogni" +" direzione dello stesso importo; il primo punto evidenziato punta verso il " +"giocatore. Entrambi mantengono una spaziatura di 16 unità angolari o 22,5 " +"gradi." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Copia TH04 modello di cottura" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Seguire il calcolo dell'anello di puntamento TH04" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Copia estratto dell'assemblea TH04" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Copia leggibile mirato-anello di calcolo" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Torna in alto" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Copia" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Copiare" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Selezionato" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Codice copiato negli appunti." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Codice selezionato. Usa la tastiera per copiarlo." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA su GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Distanza {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Colpisci un cactus. Prova un'altra velocità." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Spazio o Salto ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Gioca di nuovo" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Gioca" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Pausa" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Premere Play, quindi saltare sopra il cactus." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Colpisci un cactus. Premere di nuovo Play o modificare la velocità e " +"riavviare." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Esecuzione. Spazio o salto cancella un cactus." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Sostare. Premere Play per continuare." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Velocità fissa: {speed}. Spazio o salto cancella un cactus." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Velocità fissa: {speed}. Premere Play per provarlo." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Regola recuperata: inizia da 6, quindi aumenta verso 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Velocità fissa: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Rigiocato la regola recuperata. Tutti e quattro i valori corrispondono al " +"controllo del gioco originale controllato quando arrotondati a tre decimali." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"Il replay differisce dai valori di gioco originali registrati. Confronta la " +"regola di velocità e le impostazioni di cui sopra." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} secondo" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} secondi, blocco di tempo {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Il calcolo interattivo non è disponibile in questo browser. L'esempio mostra" +" il codice a 59 secondi." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Verificare…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} controlli superati (sei casi di riferimento, a sei e otto" +" cifre)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "Impossibile eseguire i controlli di riferimento. Riprova." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Un analista che pensa a un computer" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Un controllo rivela un carattere" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"La settima maschera seleziona solo la posizione 21 nella griglia di ingresso" +" sei per sei. Il suo codice carattere deve essere uguale a 55, quindi il " +"carattere è 7. Le altre maschere selezionano posizioni diverse e forniscono " +"ulteriori equazioni." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" +"Il settimo controllo. Le etichette delle celle sono posizioni di input, a " +"partire da 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Maschera codificata: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Salta 21 celle. Selezionare 1. Salta 14. Fermati a 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Solo una cella contribuisce a questa somma" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "La posizione 21 nella bandiera deve contenere 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Selezionato: una cella" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 maschere danno 26 equazioni." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Risolverli insieme per trovare la bandiera." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball suono-indagine pan" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA fornisce le istruzioni, il chiamante e le prove di lettura dei byte per " +"una funzione DX-Ball. Un input stack viene moltiplicato per 1,5625, " +"compensato da 500, ridimensionato e convertito in un numero intero. Il C " +"mantenuto viene controllato in 3.205 casi originali-x86 e un replay separato" +" del compilatore a 63 byte." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Stack" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "input x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "Intero" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "ritorno" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Funzione ricostruita" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "C ricostruito" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Chiamata all’urto" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Codice originale" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "confronto" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3.205 test" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Build VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 byte uguali" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA flusso di indagine" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Fai una domanda su un target locale. REA ispeziona e traccia tramite " +"adattatori di analisi locali, restituisce prove e supporta le domande di " +"follow-up mentre l'agente spiega, implementa e verifica." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Chiedi" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Agente + file locale" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "App / file / browser" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Analizza e segui" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Leggi le prove" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Codice / riferimenti /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "incognite" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Applica" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Il tuo agente" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Spiega / crea / verifica" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Strumenti di analisi" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Adattatori locali" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Domanda successiva" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: spaziatura e puntamento di un anello di proiettili" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Un giro in senso orario completo ha 256 unità angolari. Sedici proiettili " +"partono da angoli zero, sedici, trentadue, fino a 240. Aggiungendo un " +"esempio di direzione giocatore di quaranta giri tutte le sedici direzioni " +"insieme; i primi punti elenco al giocatore. La rotazione del modello è zero." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Anello fisso" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Primo proiettile: angolo 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Anello mirato" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Primo proiettile: direzione giocatore" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Centro" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Giocatore" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Stessa spaziatura: 256 ÷ 16 = 16 unità angolari = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Casi pratici" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Inizia" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Guide" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Codice sorgente" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Licenza MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Unisciti alla community" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Seguici su X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * sorgente script selezionata" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Codice sorgente" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Uscita formatter prevista" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Istruzione" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Chiamante" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Costante" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Funzione C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Pulsante" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "API Precarico" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "File CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Il tuo click" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Richiesta acquisita" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Esporta script" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA risultato * riepilogo.estratto ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "Estratto di istruzioni REA * 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA chiamante estratto * 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "Risultati byte REA * interpretati come doppi little-endian" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Recuperato C * estratto" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Guarda come funziona REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Guida all’installazione" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Vetrina →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Impostazioni selezionate dallo script ispezionato" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Riepilogo leggibile del gestore %" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * istruzioni originali selezionate" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "ID operatore * Fonte di Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Segui @reatools su X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Agente → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → agente * risultati selezionati" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → agente * metodi e chiamanti" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * Java decompilato selezionato" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Riepilogo leggibile * interpretazione dell'agente" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP, corpo completo" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Scarica Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Scarica Android analysis provider" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Agente → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → agente * risultati selezionati" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → agente * istruzioni selezionate" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Agente → REA * read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → agente * settima voce" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Eseguibile originale * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Scarica la sfida originale" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Scarica risolutore" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "Risultato REA * estratto di pseudocodice" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agente → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → agente * estratto di istruzioni" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → agente * estratto del chiamante" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Agente → REA * due {ph0} richiesta" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "Risultati byte REA * decodificati come doppi" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Inizia con il tuo obiettivo" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Generazione di codice" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Regola recuperata" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Orologio regolabile" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Binario" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Controllo del codice" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Equazione" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Esatto!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Eseguibile" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "Risultati REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Recuperato C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Convalida" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "App pacchettizzata" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "API esposte" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "Wrapper IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Appunti" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Codice DOS originale" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "Istruzioni REA" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Calcolo dell'angolo" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Anello di proiettile" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "API pagina esposta" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Renderer Chiamata IPC" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Inviato agli appunti di sistema" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Salvato localmente da Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Ingresso markdown" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Uscita parser strutturata * estratto" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Analizza la tua app" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Agente → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → agente * campi selezionati" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agente → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → agente * estratto di istruzioni" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Stesso risultato di funzione * estratto aim" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "Corrispondente mantenuto C++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Macro anello * Ramo TH04, estratto" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Angolo e velocità * fonte estratto" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Premi % per vedere cosa succede a 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "il 10% di 200 fa 20. Premere = per aggiungerlo." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "Per la moltiplicazione, 10 diventa 0,1. Premere = per moltiplicare." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"La traduzione è in fase di aggiornamento. Leggi questa pagina in inglese per" +" ora." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per analizzare {ph3} e spiega come esporta i " +"dati. Mostra il codice pertinente e le posizioni di origine.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installa REA e collegalo a questo agente di programmazione " +"usando {ph3}. Mostrami prima le modifiche previste e attendi la mia " +"approvazione. Poi verifica l’installazione.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}Scaricare {ph3} in una nuova cartella di esempio e " +"decomprimerla. Utilizzare REA per trovare ciò che accade quando faccio clic " +"su Esporta note. Mostra dove {ph4} è scritto, quali campi contiene e i file " +"e le linee pertinenti.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installa REA e collegalo a questo agente di programmazione " +"usando {ph3}. Mostrami prima le modifiche previste e attendi la mia " +"approvazione. Poi verifica l’installazione.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Installa REA e collegalo a questo agente di programmazione " +"usando {ph3}. Mostrami prima le modifiche previste e attendi la mia " +"approvazione. Poi verifica l’installazione.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per ispezionare {ph3}. Clonare questo sito " +"per me.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Ricostruzione · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"Con {ph0} e npm disponibile, esegui l'installazione, scegli il tuo agente di" +" codifica e rivedi le modifiche proposte." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Un esempio fornito · {ph0} e npm * Il tuo agente di codifica" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Utilizzare un agente di codifica come Claude Code, Codex o Cursor. Avrai " +"bisogno di {ph0} e npm; il {ph1}guida all'installazione elenca le versioni " +"supportate{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Pagina * {ph1}{ph2}{ph3}Note di esportazione{ph4}{ph5}Chiamare " +"{ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Ponte · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Invia un messaggio denominato al " +"processo principale.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Gestore · {ph1}{ph2}{ph3}Scrivere {ph4}{ph5}{ph6}Chiama il formatter in" +" {ph7} e scrive il file.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * linee 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Prevedere il CSV per una nota con id 1 e titolo {ph3}. " +"Quindi esegui l'esempio {ph4} formatter con {ph5} per controllare. Mostra la" +" previsione e l'output effettivo.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Il titolo rimane in un campo quotato; ogni virgoletta è raddoppiata. Questo " +"controlla il formattatore direttamente con {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV formatter" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Avrai bisogno di {ph0} 22 (22.19+), 24 (24.11+) o 26+. npm viene fornito " +"con {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "Non ho {ph0}, o non sicuro?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Se {ph0} stampa v22.19+, v24.11+ o v26+, sei pronto. Se stampa una versione " +"precedente o\" non riconosciuto \" / \"comando non trovato\", installare " +"{ph1} 24 LT:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * esempio fonte estratto" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Apri l'esempio{ph1} · {ph2}Scaricare {ph3}{ph4} · {ph5}Scaricare " +"{ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * esempio sorgente" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Scarica l'esempio e decomprimilo. L'archivio contiene il completo {ph0} " +"cartella. Analizzarlo con {ph1} e npm; Electron non è necessario per questo " +"esempio." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Prima volta, o mancante {ph0} o un agente di codifica? {ph1}Seguire la guida" +" di installazione passo-passo →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "" +"Per esempio: {ph0}perché la calcolatrice restituisce 220 per {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA ispezionare Windows Calcolatore. Perché {ph3}" +" dà 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * caricato {ph0} * linee selezionate" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Abbiamo visto perché {ph0}{ph1} dà 220.{ph2} Ora recuperiamo le regole per +" +" e × e provale." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA legge {ph1}{ph2}{ph3}Lancia l'app Calcolatrice{ph4}{ph5}Il " +"codice si apre {ph6}. L'agente seleziona quindi la libreria dell'app " +"installata.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizzare REA per ispezionare aegis-v3.4.{ph3}. Scopri come" +" genera il codice di accesso a sei cifre, spiega perché cambia ogni 30 " +"secondi e ricostruisci una piccola demo in cui posso cambiare " +"l'ora.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} * Membro API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} * IPC helper" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "principale/{ph0} * handler helper" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "principale/{ph0} * ricevitore appunti" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Ricostruzione * dino-velocità.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Con Node.js e npm disponibile, esegui l'installazione, scegli il tuo agente " +#~ "di codifica e rivedi le modifiche proposte." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Un esempio fornito · Node.js e npm * Il tuo agente di codifica" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Utilizzare un agente di codifica come Claude Code, Codex o Cursor. Avrai " +#~ "bisogno di Node.js e npm; il {ph0}guida all'installazione elenca le versioni" +#~ " supportate{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Pagina * renderer.js{ph1}{ph2}Note di esportazione{ph3}{ph4}Chiamare " +#~ "{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Ponte * precarico.js{ph1}{ph2}{ph3}{ph4}{ph5}Invia un messaggio " +#~ "denominato al processo principale.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Gestore * principale.js{ph1}{ph2}Scrivi note.csv{ph3}{ph4}Chiama il " +#~ "formatter in {ph5} e scrive il file.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Prevedere il CSV per una nota con id 1 e titolo Ciao, " +#~ "\"REA\". Quindi eseguire il formatter toCsv dell'esempio con Node.js per " +#~ "controllare. Mostra la previsione e l'output effettivo.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Il titolo rimane in un campo quotato; ogni virgoletta è raddoppiata. Questo " +#~ "controlla il formattatore direttamente con Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV formatter" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Avrai bisogno di Node.js 22 (22.19+), 24 (24.11+) o 26+. npm viene fornito " +#~ "con Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "Non ho Node.js, o non sicuro?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Se {ph0} stampa v22.19+, v24.11+ o v26+, sei pronto. Se stampa una versione " +#~ "precedente o\" non riconosciuto \" / \"comando non trovato\", installare " +#~ "Node.js 24 LT:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Apri l'esempio{ph1} · {ph2}Scarica esportazione.js{ph3} · {ph4}Scarica " +#~ "note.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Scarica l'esempio e decomprimilo. L'archivio contiene il completo {ph0} " +#~ "cartella. Analizzarlo con Node.js e npm; Electron non è necessario per " +#~ "questo esempio." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Prima volta, o mancante Node.js o un agente di codifica? {ph0}Seguire la " +#~ "guida di installazione passo-passo →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "" +#~ "Per esempio: {ph0}perché la calcolatrice restituisce 220 per 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilizzare REA ispezionare Windows Calcolatore. Perché 200 +" +#~ " 10% dà 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Abbiamo visto perché {ph0}200 + 10% dà 220.{ph1} Ora recuperiamo le regole " +#~ "per + e × e provale." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA legge calc.exe{ph1}{ph2}Lancia l'app Calcolatrice{ph3}{ph4}Il " +#~ "codice si apre {ph5}. L'agente seleziona quindi la libreria dell'app " +#~ "installata.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilizzare REA per ispezionare aegis-v3.4.3.apk. Scopri come" +#~ " genera il codice di accesso a sei cifre, spiega perché cambia ogni 30 " +#~ "secondi e ricostruisci una piccola demo in cui posso cambiare " +#~ "l'ora.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view / precarico.js * Membro API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view / precarico.js * IPC helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "principale / indice.js * handler helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "principale / indice.js * ricevitore appunti" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "principale.js * linee 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "esportazione.js * esempio estratto di origine" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "renderer.fonte di esempio js * " + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "preload.fonte di esempio js * " + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "principale.fonte di esempio js * " + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * indice caricato.js * linee selezionate" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilizzare REA per analizzare / absolute / path / to / app e" +#~ " spiegare come esporta i dati. Mostra il codice pertinente e le posizioni di" +#~ " origine.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installare REA e collegarlo a questo agente di codifica " +#~ "utilizzando npx rea-agenti @ ultima configurazione. Mostrami il piano di " +#~ "installazione per l'approvazione, quindi verifica " +#~ "l'installazione.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Scaricare https://rea.tools/examples/notes-example.zip in " +#~ "una nuova cartella di esempio e decomprimerla. Utilizzare REA per scoprire " +#~ "cosa succede quando faccio clic su Esporta note. Mostra dove note.viene " +#~ "scritto csv, quali campi contiene e i file e le linee " +#~ "pertinenti.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installare REA e collegarlo a questo agente di codifica " +#~ "utilizzando npx rea-agenti @ ultima configurazione. Mostrami il piano di " +#~ "installazione per l'approvazione, quindi verifica " +#~ "l'installazione.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Installare REA e collegarlo a questo agente di codifica " +#~ "utilizzando npx rea-agenti @ ultima configurazione. Mostrami il piano di " +#~ "installazione per l'approvazione, quindi verifica " +#~ "l'installazione.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilizzare REA ispezionare https://rea.tools/. Clonare " +#~ "questo sito per me.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "codice[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× scala pan_pan" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}Reverse Engineering Qualsiasi cosa{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/ja/messages.po b/website/locales/ja/messages.po new file mode 100644 index 000000000..65fbdae4a --- /dev/null +++ b/website/locales/ja/messages.po @@ -0,0 +1,12589 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}ホーム{ph1} /ブログ" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "ブログ。" + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "リバースエンジニアリングに関する考え。" + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "ゲーム再構築{ph0}小論文" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "リバースエンジニアリングにおける産業革命" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"どのようなマニュアル再とTH08を再構築,TH095とTH04は、エージェントについて教えてくれました,プロジェクト間で化合物の検証と知識." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "記事を読む" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "によってN0zoM1z0•10 10月2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} トップ" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REAブログ-リバースエンジニアリングに関する考え" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "REAとAIエージェントの実践的な経験に基づいて、リバースエンジニアリングに関する考え。" + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "REA—ソフトウェアがどのように動作するかを調べます。 コーディングエージェントとのリバースエンジニアリング。" + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "REA ホーム" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "メインナビゲーション" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "GitHub で REA を見る" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "REA の Discord に参加" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "X で REA をフォロー" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}ホーム{ph1} / {ph2}ブログ{ph3} /東方復興" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "エッセイ·東方復興" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "リバースエンジニアリングにおける産業革命。" + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "によってN0zoM1z0•10 10月2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "要点" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "{ph0}エージェントに調査の自律性を与えます。{ph1} 明確な目標と合格基準を設定し、次に何を試すかをエージェントに決定させます。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}リポジトリとGitを作業メモリとして使用します。{ph1} 推論をコードで維持してください。 Git " +"checkpointsは、会話が終了した後に次のセッションを続行させます。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}証拠があなたが主張するものを決定しましょう。{ph1} 自信を持って説明するには、まだテストが必要です。 " +"「不明」は、証拠が不完全な場合の有効な答えです。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}検証リファレンス(oracle)もテストします。{ph1} それが拒否すべきケースを試してみてください。 " +"バグを見逃した場合は、それに依存していた以前の結果を再訪してください。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "{ph0}私たちはREの産業革命の初期にいます。{ph1} メソッドはまだ形を取っています。 探索することがたくさん残っています。" + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "どのように経験化合物" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}人間の方向性{ph1} *目標と合格基準" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "自律性" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "エージェント" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "実験を選択します。{ph0}仮説を提案する。" + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "検証" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "検証基準" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Aに対するテスト{ph0}具体的な参照。" + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "リポジトリ" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "作業の記憶" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "コード、証拠,{ph0}チェックとレッスン。" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "ミスマッチ{ph0}{ph1}仮説を修正する{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "より良い{ph0}{ph1}出発点{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "再利用" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}パス{ph1} *結果とその証拠を保持する" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "各プロジェクトは、より良い出発点で次のものを残します。 それには、ギャップを発見したときにチェックを修正することが含まれます。" + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "この記事の内容" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}2026年8月{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08:続き{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}二つのアプローチ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095:配合{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04:アーキテクチャ間{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}正確なものから読みやすいものへ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}産業シフト{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}何が可能になるか{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "2026年8月に何が変わったのか" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"この作業の前に、私は多くの手動リバースエンジニアリングを行っていました。 私は説明があるまで関数を検査し、その説明をプログラムに対してテストします。 " +"さらに得ることは、次の機能に自分の時間をもっと費やすことを意味しました。 それはまた、私の頭の中でますます大きな絵を保つことを意味しました。" + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"私の再作業のほとんどは、ゲームにあります. 私はそれらを再構築して、それらの動作を理解し、最終的にソフトウェアポートまたはmodに運ぶことができます。 " +"それがこの記事の背後にある経験です。 " +"このメソッドは他の場所でも役立ちますが、各フィールドは信頼できる参照に対してチェックできるものを確立する必要があります。" + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"2026年8月、私はエージェント主導のREを真剣に探求し始めました。 " +"私は、エージェントがプログラムや通常の開発ツールにアクセスすることでどこまで得ることができるかを見たかったのです。 " +"東方復興は私に見つけるための実質的なプロジェクトを与えました。" + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"初期の進歩は驚くべきものでした。 調査は私がすべての個々のステップを選択せずに移動し続けることができます。 " +"比較に失敗すると、エージェントが別の呼び出し元に送信される可能性があります。 " +"小さな診断を記述し、その結果を使用して次に何を試すかを決定することができます。 " +"自由が違いをもたらしたことをそれに与える:私はプロジェクトの方向性とそのチェックが信頼できるかどうかにもっと注意を払うことができ" + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"ペースは最初に私の注意を得ました。 それから私は現在のプロジェクトを超えて何が生き残るのだろうかと思い始めました。 " +"次のゲームは、私たちが学んだすべてのものから利益を得るでしょうか?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08:人間の仕事の上に構築" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08 {ph1}、不滅の夜は、の続きとして始まった {ph2} GensokyoClubの再構築{ph3}. " +"彼らの公的な情報源は私に実質的な基盤を与えました。 それは、ビルドの知識と私が継続して保存した貢献の歴史が付属していました。" + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"同年10月場所で初土俵を踏んだ。 私の独立した継続は8月13日に始まりました。 " +"8月19日までに、台帳は1,107の特定されたゲーム機能すべてのソースを記録しました。" + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Linux再構築ポートは、継続が始まった約十一日後の8月24日にコミットされました。 Web版が続いた。 " +"ネイティブLinux64ビットリリースは8月30日に到着しました。" + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"私を襲ったのは、仕事が人々が実行できるプログラムに達していたということでした。 そこに到達するには、個々の機能を超えた次の問題が必要でした。 " +"二つの関数が別々に正しく見えたとしても、共有されるべき状態の別々のコピーを誤って使用する可能性があります。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"これにより、作業の中心となる参照チェックが行われました。 私はそれらを呼び出します {ph0}検証参考文献(オラクル){ph1}. " +"コード比較は、再構築された関数が元の命令を再現するかどうかを知ることができます。 " +"実行時チェックは、実行されたルートが予想される状態に達するかどうかを確認できます。 " +"エージェントは説明を提案し、それをテストします;不一致はそれに調査するために特定の何かを与えます。" + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "間違った定数と完全に一致する" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"検証リファレンス(oracle)は、誰かが書いたソフトウェアです。 TH08は、そのソフトウェアにどれだけ依存できるかを明確に思い出させてくれました。" + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"9月には、ダウンストリームスイッチポートから報告されたバグがアイテムの自動収集に戻りました。 再構築されたソースは、プレーヤーのパワーをチェックしました" +" {ph0}. 使用される原物 {ph1}、最大電力しきい値。" + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"通常の電力は負ではないので、再構成された電力チェックは事実上常に満たされていました。 " +"コレクションラインの上に、ゲームは最大の力を必要とせずにアイテムを引き付けることができます。 条件の他の例外は正しかった。 " +"この1つの定数が動作を変更しました。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}しかし、関数はすでに正確な比較に合格していました。{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"再構築は、別のアドレスに定数を置くことができます。 " +"比較ツールは、コンパイルされた命令のアドレスを元の命令と比較する前に調整することによってそれを説明しました。 " +"しかし、参照されたアドレスに格納されている浮動小数点値は決してチェックされませんでした。" + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"それは小切手に穴を残しました。 それは元ので再構築された命令を指すことができます {ph0} ソースがまだ言っている間 {ph1}. " +"命令バイトが一致しました。 ソースは別の何かを意味しました。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"ザ- {ph0}2月の修正{ph1} ソースを修正し、参照された定数の実際のバイトを比較チェックしました。 A {ph2}より広い監査{ph3} " +"次に、1,548個の浮動小数点定数参照を調べました。 それは5つの受け入れられた関数間で別の12の誤った参照を見つけました。" + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"比較では、このようなすべての浮動小数点定数がチェックされます。 そのテストには、意図的に間違った値が含まれており、拒否されていることを確認します。 " +"また、弱いチェックに合格した結果を再検討する必要がありました。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}検証リファレンス(oracle)も再構築する必要がありました。{ph1} それを修復することは、ゲームを修復することの一部でした。" + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"それは、チームが主にエージェントと協力している一人の人である場合に重要です。 " +"私は個人的に彼らが生産するすべてのラインを検査することはできませんので、私の自信の多くは彼らのチェックにかかっています。 Shared " +"verification reference(oracle)の死角は、私が気付く前に多くの調査に影響を与える可能性があります。 " +"チェッカーが実際に何を検証し、失敗するはずのケースに対してテストするかを理解する必要があります。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"作業が進むにつれて、これらのチェックはリポジトリの一部になりました。 " +"ソースの変更の理由と、以前のセッションが停止した場所で後のセッションがピックアップできるようにするメモもそうでした。 " +"{ph0}ソースコードリポジトリはプロジェクトのワーキングメモリになりつつありました。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "{ph0}バッチが成功すると、復元されたコードと次のバッチのためのより良い環境の両方が得られました。{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "再建の2つの異なるアイデア" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClubの {ph0}パブリックREADME{ph1} この種の作業との意見の相違を明示的にします。 " +"この通知により、さらなる開発が完了するまで非公開で行われることが発表されました。 一つの通路が読みます:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"私たちの仕事から取って、この空間でのグリフター(AIの逆コンパイルとポート)の台頭は、将来の逆コンパイルの努力のための悪いイメージを描きます…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"この通知には、メンテナーの心理的な犠牲も記載されています。 彼らの貢献ポリシーは、主にAIで生成されたプルリクエストを除外します。 " +"彼らは自分の自由な時間を困難な仕事に入れており、その仕事は私の継続を可能にするのに役立ちました。 私はその背後にある努力を尊重します。 " +"私が議論したい意見の相違は、復興をどのように進めるべきか、そして貢献をどのように判断すべきかということです。" + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"私が知っていた手動ワークフローでは、機能の理解を開発し、それを再構築することは、通常、同じ人に落ちました。 " +"プロジェクトはその人の専門知識に大きく依存していました。 彼らが働いている間に推論の多くが起こったので、貢献者への信頼は重要でした。" + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"既存のプロジェクトは、ソースとビルドツールの知識をすでに保持しています。 " +"私にとって変わったのは、エージェントがその知識を使って次の調査を単独で追求できるということでした。" + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"私の継続では、私は結果を受け入れるための目的と基準を決定します。 エージェントは調査する幅広い自由を持っています。 " +"その提案された再建は、関連するチェックを生き残るために持っています。 " +"エージェントがほとんどの作業を行ったとしても、他の人がなぜ実装を選んだのかを調べることができるようにしたいと思います。" + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"これは難しい移行になる可能性があります。 注意深い仕事の年は大いにより速く動く継続のための基礎になるかもしれない。 " +"それは信用についての実質の質問を上げる。 また、コントリビューションを受け入れる前にメンテナが知る必要があることも変更されます。" + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"産業的な類推は、私がこれについて考えるのに役立ちます。 工芸品では、プロセスの多くはそれを実行する人のスキルに依存します。 " +"機械はその技術が必要とされるところで変わる。 誰かがまだプロセスを設計し、その出力が間違っているときに認識する必要があります。 " +"さまざまなコミュニティが、その変更のどれだけを実行したいかを選択できます。" + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"私の選択は、継承された作品がクレジットされ、その歴史が保存されたまま、公然と継続することです。 新しい作品をレビューできるようにしたいです。 " +"それは私たちにこのアプローチがどこまで行くことができるかを尋ね、道に沿って何がうまくいかないかから学ぶ方法を与えます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"ソース:GensokyoClubの {ph0}READMEのお知らせ{ph1}、2026年10月10日にチェックされ、その " +"{ph2}貢献方針{ph3}. 引用は短縮された抜粋です。 TH08の {ph4}クレジットと出所{ph5} 継続境界を記録します。" + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095:経験は配合を開始します" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095 {ph1}、弾丸を撃つ、その経験の価値をはるかに見やすくしました。 同月29日にはゲームソフトの発売が開始された。 " +"私たちはまだゲームを学ばなければなりませんでした。 " +"しかし、私たちはすでに再建を開始する方法とそれを動かし続ける方法についてはるかに多くを知っていました。" + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"9月7日までに、特定された697のゲーム機能すべてがソースを持っていました。 8年(696年)までには、正確な比較として受け入れられていた。 " +"プログラム全体は9月にリンクされています。 Windows i386は、初期化から約10日後の10月に再構築された。" + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"私はこれが最初のプロジェクトのスピードよりも刺激的だと感じました。 新しいターゲットは、別のゲームで行われた作業の恩恵を受けることができます。 " +"この経験は、ツールとプロジェクトの編成方法にすでに存在していました。" + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"たとえば、TH08は、組み立てられたプログラムに早期に注意を払うように教えてくれました。 " +"いくつかの回復された関数が同じ状態に依存している場合、それらの分離された比較は重要な質問を開いたままにします。 " +"彼らが一緒に働いているのを見る必要があります。 このレッスンは、TH095のプログラム全体のビルドにどのようにアプローチしたかを形作るのに役立ちました。" + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"私がそこにいる間、私の頭の中にとどまるレッスンは役に立ちます。 別のセッションが実行できるチェックになると、私が移動した後も助け続けることができます。 " +"次のエージェントは、それにつながった調査を繰り返すことなく、結果を使用することができます。" + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"浮動小数点定数のバグもそのメモリに属しています。 参照をチェックするには、その背後にあるデータをチェックする必要がある理由を説明します。 " +"コードでその修正を維持することは、後のプロジェクトが古いチェックの死角を継承するのを避けるのに役立ちます。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}この方法は、次のゲームの出発材料の一部になります。{ph1} " +"私たちは、次のプロジェクトの努力の多くを、その目標について実際に新しいものに費やすことができます。" + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"同じ利点は、後で参加する人々に利用可能です。 彼らは決定を検査し、作業を続行する前にそのチェックを再実行することができます。 " +"彼らは、ソースがそれがないように見える理由を見つけるために、プロジェクト全体の履歴を再構築する必要はありません。" + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04:ワークフローは異なるアーキテクチャで存続します" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04 {ph1}、ロータスランド物語は、PC-98 DOS時代にこの作品を取りました。 " +"ターゲットは現在、4つの協力プログラムを持つ16ビット環境でした。 " +"そのハードウェアの動作を理解するには、Windowsゲームとは異なる証拠が必要でした。 既存の {ph2}Rec98作品{ph3} " +"私たちに貴重な知識とソース材料をここにも与えました。" + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"DOSの再構築は現在機能しています。 私の手動テストでは、私は彼らのエンディングを介して完全な通常のルートを再生し、保存を確認しました。 " +"現在の作業はネイティブの64ビットポートです。 動作中のDOSバージョンを確立すると、最初にそのポートに参照が与えられます。" + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"建築は私達が調査するために必要としたものを変えた。 また、作業をチェックしたコンパイラとランタイムも変更されました。 " +"しかし、エージェントはまだ結果に至るまでの質問に従うことができ、その結果は次の実験を導くことができます。" + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"ゲームプレイからエンディングへの移行を考えてみましょう。 " +"私たちは、どの州がその境界を越えて運び、どのプログラムがそれを担当しているかを知る必要があります。 それはDOS製品に対して調査できるものです。 " +"証拠とチェックが利用可能になると、エージェントはWindowsタイトルと同じように質問を処理することができます。" + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"これが、TH04が引数に重要である理由です。 プラットフォームを大幅に変更しても、新しい作業方法でやり直すことはできませんでした。 " +"アーキテクチャは問題を定義しましたが、ワークフローはまだそれを解決する方法を与えてくれました。" + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"64ビットポートについては、DOS上で既に回復されている動作に対して新しい実装を調べることができます。 " +"再構築からの知識は、ポートに構築するための何かを与えます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"2026年10月10日現在のプロジェクト状況: {ph0}DOSの再構成および手動テスト{ph1} · {ph2}64ビットポート{ph3}. " +"港は開発中のままです。" + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "正確なコードから読みやすいコードへ" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "復興がうまくいったら、他の誰かにそれを理解してもらいたいです。" + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"私にとって、アセンブリと生のオフセットは古い友達のように感じることができます。 " +"私はこれが「読みやすい」という少し変わった定義であることを認識しています。「ほとんどの人は、実行可能ファイルのメモリレイアウトを頭の中に保持せずに、ゲームのロジックに従うことを好むでしょう。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"それはどこですか {ph0}セマンティック再構成{ph1} 入ってきます。 " +"回収されたフィールドは、主にそのオフセットによって依然として知られていてもよい。 " +"その役割を説明できるまで、ゲームがどのようにそれを使用するかに従います。 それから、意味のある名前と証拠に合ったタイプを与えることができます。 " +"次の人がその解釈がどこから来たのかを見ることができるように、私たちは推論をソースと一緒に保ちます。" + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"これは、ソフトウェアポートにとって特に重要になります。 絶対アドレスは、古い実行可能ファイルのどこに何かが住んでいたかを教えてくれます。 " +"これは、どのオブジェクトがその状態を所有すべきかを決定する上で、64ビットの実装にはほとんど助けになりません。 " +"動作を安全に移動するには、古いメモリアクセスの背後にある関係を回復する必要があります。" + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "私が今使用している順序は次のとおりです:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}正確なベースラインを回復します。{ph1} 歴史的なコンパイラで再構築された部分をコンパイルします。 " +"関連するコードとデータを元の実行可能ファイルと比較します。 未解決の差分を記録して、次のフェーズの開始点を明確にします。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}元のプラットフォーム上でそれを構築し、再生します。{ph1} " +"元のアーキテクチャとコンパイラを使用して、それらの部分を実際のプログラムにリンクします。 重要なゲームプレイパスを行使します。 " +"これは、分離された関数の比較が見逃した共有状態または初期化に関する問題を見つけることができる場所です。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}両方の参照に対してセマンティクスを再構築します。{ph1} " +"一度にゲームの一つの一貫した部分を取り、その回復されたソースが何を意味するかを確立します。 " +"正確な比較と再生可能な歴史的なビルドを維持しながら、その表現を改善します。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}モダンなポートを作ります。{ph1} 確立された動作を、ネイティブの64ビットビルドなどの新しい環境に移動します。 " +"再構築された元のプラットフォームのゲームは、ポートがどのように動作するかを比較するための参照のままです。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"第二段階からの再生可能なビルドは、次のようになります {ph0}第二検証リファレンス(オラクル){ph1} 第三の間に。 " +"最初の検証リファレンス(oracle)では、変更されたソースが関連する元のコードとデータを再現しているかどうかを確認します。 " +"第二は、再構築されたプログラムがまだ構築され、我々が行使するパスに沿って正しく動作することを確認します。" + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"彼らはさまざまな間違いをキャッチします。 型の変更は、生成された命令を変更することができます。 " +"所有権の変更は、状態の異なるコピーを使用してゲームの2つの部分を残すことができます。 " +"両方のチェックを利用できるようにしておくと、リファクタリングをさらに実行する前にエージェントが具体的に調査できなくなります。" + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"名前はそれ自身の証拠を必要とします。 " +"正確な比較は、フィールドが本当に\"不死身の時間\"を意味するかどうかを私たちに伝えることはできません。「ゲームがどのように書いて使用するかから、それを確立する必要があります。" +" 意味が不確かなままである場合、中立的な名前は自信を持って推測するよりも次の読者にとってより有用です。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"私たちはプロジェクトを通してこの順序を学びました。 " +"TH08は、後の歴史的なプラットフォーム監査のいくつかの前に、すでに再生可能なポートを持っていました。 これにより、特定の欠陥が見えにくくなりました。 " +"ザ- {ph0}Factoryの現在のワークフロー{ph1} " +"元のプラットフォームのビルドを最初に置くので、セマンティック作業は移植が始まる前にそれを参照として使用できます。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}正確な再構成は私たちに参照を与えます。 セマンティック再構成は、回収された知識を使用可能にする。{ph1} " +"ポートは、両方の上に構築することができます。" + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "これを産業シフトにするものは何ですか" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"これらのプロジェクトは、私が注意を払った場所を変えました。 " +"エージェントが調査の多くを前進させることができれば、彼らの作業環境を改善することは私ができる最も有用なことの一つになりました。 " +"より良いツールは、それを必要とするすべての後の機能を助けることができます。" + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"ここでは自治が重要です。 有用な次のステップは、多くの場合、失敗した実験の後にのみ明らかになります。 " +"エージェントは、予想外のどこかでその結果に従うのに十分な自由を必要とします。 " +"私が各ステップを処方するのを待たなければならない場合、仕事の多くは私の注意に結びついています。" + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"私はエージェントが間違った仮説を立てることを期待しています。 重要なのは、それらをテストし、結果から学ぶことができるかどうかです。 " +"失敗したチェックは、それが再試行するのに十分な間違いを理解するのに役立つはずです。 " +"私はまだ蓄積された証拠がプロジェクトのマイルストーンをサポートしているかどうかを判断する必要があります。" + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REAは、エージェントが分析ツールにアクセスできるようにします。 関数の呼び出し元に関する質問は、その呼び出し元の検査に直接つながる可能性があります。 " +"Reconstructionプロジェクトは、コンパイラとそれ自身の参照チェックを提供します。 " +"エージェントはそれらを使用して、提案するソースをテストし、その説明がどこに保持されているかを確認できます。" + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"TH08のバグは、これらのチェックが独自のエンジニアリングの注意を払うに値する理由を示しています。 " +"同じ比較が何百もの関数で使用されている場合、そのギャップは、1つの実装での間違いよりもはるかに広がる可能性があります。 " +"チェッカーをテストすると、後のすべての作業で利用可能なフィードバックが向上します。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"産業の類推は、ここで有用な歴史的な例を持っています。 ボールトンとワットは、 {ph0}1796年の蒸気機関の表示器{ph1} " +"エンジン弁の調節を助けるため。 録音バージョンはピストンストロークを介して圧力を追跡しました。 " +"それはエンジンの内部動作を点検のために利用できるようにした。 " +"私たちの比較ツールは、同様の目的を果たしています:彼らは私たちがそれを改善しながら、機械が何をしているかを調べてみましょう。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}私たちはこの産業シフトの初期段階にあります。{ph1} インフラストラクチャの多くはまだ未成熟です。 " +"エージェントは、私たちのチェックがサポートするように設計されていたよりも速く移動できるため、プロセスはそれらと一緒に開発する必要があります。 " +"共有ツールに欠陥が見つかった場合は、それを修復し、影響を受けた結果を再検討する必要があります。 " +"次のプロジェクトは、より強力なツールを継承することができます。" + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"いずれかの会話には実用的な制限もあります。 大規模な再構築が完了する前に終了します。 " +"ソースコードリポジトリは、最後の決定の理由を失うことなく、別のセッションを継続できるようにする必要があります。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"ザ- {ph0}東方復興工場{ph1} その必要性から成長しました。 それはプロジェクトに彼らの点検およびレッスンを先に運ぶ共有された方法を与える。 " +"あるゲームでの作業は、別のゲームの開始条件を改善することができます。" + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"それが私にとって産業的な類推を意味のあるものにしているのです。 経験は、他の人が使用できるツールの一部になり始めます。 " +"これらのツールを改善することで、次の人、または次のエージェントがどれだけ達成できるかが変わります。" + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "今考えられるプロジェクトは" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"ペースは、それが開始する決定を変えるので、重要です。 " +"ゲームはリバースエンジニアリングにとって魅力的であり、現実的にそれを与えることができるよりも私自身の注意を要求することができます。 " +"多くのプロジェクトは、アイデアを滞在します。" + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"今、私はそのようなプロジェクトを繰り返し調査を通して動かし続ける方法を見ることができます。 " +"作業再構成を取得すると、ソフトウェアポートがより実用的になります。 " +"読み取り可能なセマンティクスを回復すると、他の誰かがmodを探索するのが簡単になります。 " +"ゲームを理解するための努力は、最初のバージョンが実行された後も報われ続けることができます。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"私は今、なじみのないプログラムを見て、尋ねる: " +"{ph0}どのようなアクセス、フィードバック、蓄積された知識が、エージェントがこれに確実に取り組むことを可能にするでしょうか?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"その質問は、私が以前に一人で残していたであろうプロジェクトを考えさせます。 それぞれが私たちが次のアプローチ方法を改善することができます。 " +"私はそれが私たちをどこまで連れて行くことができるかを探求し続けたいです。" + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "プロジェクトのマイルストーンとソース" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"日付は、2026年10月10日に公開されたGitHubの履歴と照合された、記録されたプロジェクトチェックポイントを記述しています。 " +"経過時間は、コミット間のカレンダー時間です。 ソースの存在、正確な比較、ビルドとランタイムの結果は、それぞれ異なるマイルストーンに名前を付けます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08 :{ph1} {ph2}13月の続き{ph3}, {ph4}8月19日ソース元帳{ph5}, " +"{ph6}8月24日Linuxポート{ph7}, {ph8}月26日ウェブ版{ph9}、および " +"{ph10}8月30日64ビットLinuxリリース{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} {ph2}月29日初動台帳{ph3}, {ph4}7月ソース元帳{ph5}, {ph6}8月の比較{ph7}, " +"{ph8}9月リンケージ{ph9}、および {ph10}10月再生可能な-ビルドレコード{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}10月ハンドオフ{ph3} " +"動作中のDOS再構成、メンテナの完全な正常ルートテスト、および現在の64ビットフェーズを記録します。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} TH08検証リファレンス(oracle)の修正:{ph1} {ph2}報告された自動収集のバグ{ph3}, " +"{ph4}ソースと比較の修正{ph5}、および {ph6}完全浮動小数点定数監査{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}セマンティック再構成:{ph1} {ph2} TH08の読みやすさプレイブック{ph3} と " +"{ph4}ファクトリのフェーズオーダーと2つの検証パス{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}産業史:{ph1} {ph2}科学館グループの蒸気機関の表示器の記録{ph3} 1796年の導入と圧力記録メカニズムについて説明します。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}メソッド:{ph1} 工場の {ph2}エージェントの自律性{ph3} と {ph4}クロスゲームの知識{ph5} " +"文書は作業原則と教訓を保持しています。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}より多くの記事{ph1} · {ph2}TH04調査を探る{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "リバースエンジニアリングの産業革命-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0は、手動リバースエンジニアリング、AIエージェントによる東方再構築、TH08、TH095、PC-98 " +"TH04の知識がどのように化合物であるかを反映しています。" + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "プロジェクト間で実施された経験" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "東方復興エッセイ" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}ホーム{ph1}{ph2}/{ph3}恐竜スピードラボ" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "検査→再構築→変更" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "恐竜のスピードルールを再構築します。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"ゲームの加速を再現するには、まずその速度を制御するルールを見つけます。 {ph0} REAが実行中のスクリプトを返しました;{ph1} " +"私たちは、このミニゲームを構築するために、そのルールを使用しました {ph2}調節可能な速度。{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "このページでは" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}再生し、速度を変更します{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}回復されたルールを読む{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}再構築を確認する{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}分析を試してみてください{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "再生し、速度を変更します" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"プレスプレイは、その後、サボテンの上にジャンプします。 速度スライダを動かして、より遅いまたはより速いゲームを試してみてください。 " +"回復されたルールを選択して6から開始し、徐々に再び加速します。" + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "再構築したゲームで遊ぶ" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "スタート" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "ジャンプ ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "リスタート" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "速度" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "回復された加速ルールを使用する" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "元のルール:6から開始し、13に向かって増加します。" + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "スライダーを動かして独自の速度を設定します。 スペースまたはジャンプはサボテンをクリアします。" + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "再構成を再生するには、JavaScriptを有効にします。 上記のコードと説明は読みやすいままです。" + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "返されたスクリプトREAを読みます" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"私達は点検しました {ph0}wayouのChromium派生ブラウザ版{ph1} REAと。 それはロードされたものを返しました " +"{ph2}、ゲームの更新機能にこのブランチを含めます:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "設定は次のとおりです {ph0}, {ph1} と {ph2}. ゲームは衝突することなく更新時にこのブランチを実行します。" + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "新しいゲームで同じルールを使用します" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "コピー" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"ミニゲームは、自動加速のためにこの機能を使用しています。 スライダーを動かすと、代わりに固定速度が供給されます。 " +"描画、ジャンプ物理学と長方形の衝突チェックは、この教育ゲームのための新しいコードであり、そのシミュレーションは、毎秒60の更新で進みます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}スピードルールをダウンロードする{ph1} · {ph2}ゲームコードを読む{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "再構築を確認する" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"私たちは、障害物や自動スケジューリングを無効にして、元のゲームの更新機能と呼びました。 これらの記録された速度を、回復されたルールの再生と比較します。" + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "更新情報" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "オリジナルゲーム" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "再構築されたルール" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "速度チェックを実行する" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "値は小数点以下3桁に丸められます。 分岐は追加する前にチェックするので、最終的な増分は13をちょうど上回る速度を取ることができます。" + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "自分で分析を試してみてください" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}REAのセットアップ {ph1} あなたのコーディングの代理店と。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "フォローしてください {ph0}ブラウザ接続手順{ph1}、を使用して {ph2} ページURLとして。" + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "エージェントにページURLとローカルデバッグエンドポイントを指定し、このプロンプトをコピーします。" + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}この恐竜のゲームを検査するためにREAを使用してください。 なぜそれは速くなるのですか? " +"速度ルールを表示し、調整可能な速度で小さなバージョンを構築します。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"フォローアップを依頼する: {ph0}「ジャンプの高さはどこで計算されますか? 新しいバージョンにjump-" +"heightコントロールを追加します。”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"ソース: {ph0}検査された速度コード{ph1}、Chromiumの著者。 {ph2}著作権とBSDライセンス{ph3}. " +"REA4.1.0は、Chrome150で実行中のHTTPエディションを検査しました。" + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome恐竜ゲーム:その速度ルールを再構築-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "REAで恐竜ゲームの速度ルールを読んで、それを再構築し、速度を変更して再生します。" + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "恐竜スピード復元" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "恐竜ミニゲーム。 ゲームがフォーカスされている間にジャンプボタンを使用するか、スペースを押します。" + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "再構築された速度ルールのコピー" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "コピー恐竜解析プロンプト" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}ホーム{ph1} /よくある質問" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REAよくある質問。" + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "セットアップ、更新、分析、トラブルシューティング。" + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "トピックス" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}セットアップと更新{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}分析{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}トラブルシューティング{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}データと共有{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "セットアップと更新" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "REA のインストール方法は?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "端末·エージェントの設定" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "コピー" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"セットアップは REA の MCP " +"接続を登録し、対応する調査スキルをインストールします。完了したらエージェントを再起動し、調べたいファイルのパスと質問を渡してください。必要な環境と最初の分析手順は{ph0}セットアップガイド{ph1}で確認できます。" + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "REAを使用できるコーディングエージェントはどれですか?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"ローカルMCPサーバーをサポートする任意のエージェント。 セットアップには、Claude " +"Code、Claudeデスクトップ、Codex、Cursor、Gemini " +"CLI、Windsurf、Devin、OpenCode、Antigravity、GitHub Copilot CLI、Command Code、Grok" +" Buildが含まれていますOMP、およびVS Code。 Grok Botのコネクタはチャットから追加されます。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}コーディングエージェントを接続する{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "REA の更新方法は?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "REAは、バグ修正を含め、頻繁にリリースされます。 CLIをnpmとともにインストールした場合 :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "ターミナル*インストールされているCLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "更新によって印刷されたsetup refreshコマンドに従います。 エージェントを設定した場合 {ph0}、走る:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "端末·更新エージェントの設定" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"変更内容を確認し、エージェントを再起動してください。REA " +"の接続設定にはパッケージのバージョンが指定されているため、セットアップをやり直すと新しいリリースを使えます。単発の CLI 操作では、{ph0} " +"の後にコマンドを続けてください。" + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "からスキルをインストールしていますskills.sh もういい?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"スキルは、あなたのエージェントの調査の指示を与えます。 走れ。 {ph0} REAセットアップ{ph1} " +"MCPサーバーに接続して一致するスキルをインストールするには、エージェントを再起動してツールを呼び出すことができます。" + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "分析" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "REAで何を分析できますか?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "あなたが持っている種類のソフトウェアから始めてください:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "{ph0}ネイティブ実行可能ファイルとライブラリ{ph1}:関数、アセンブリ、擬似コードおよび参照。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "{ph0} JavaScriptおよびElectronアプリ{ph1}:モジュール、インポート、IPCとソースの場所。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "{ph0}ブラウザのページ{ph1}:スクリプト、要求、および実行時の観察。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REAには、マネージアセンブリ、Android Apk、ファームウェア、パッケージリソースのワークフローもあります。 " +"{ph0}ケーススタディを見る{ph1} 働いた調査のために。" + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Hopper、Ghidra、またはIDAが必要ですか?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"マシンコードプログラムの詳細な分析は、そのうちの1つを使用します。 " +"静的JavaScriptと.NET検査は、供給されたファイルで動作し、マシンコードのプログラムエンジンの分析を必要としません。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"既存のGhidraまたはIDAインストールを接続するか、セットアップにHopperを検出させてインストールを提案させます。 " +"使用できるプロバイダーは、ホストとターゲットによって決まります。 {ph0}マシンコードプログラムの解析の設定{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "コーディングエージェントなしでREAを使用できますか?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "はい。. CLIは同じ分析ワークフローを使用します。 ローカルJavaScriptまたはElectronアプリの場合:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "端末*静的アプリケーション解析" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"パスを抽出したアプリケーションフォルダまたはASARファイルに置き換えます。 {ph0}CLIを使用する {ph1} インストールオプション用。" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "REA はどんなコードを返しますか?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"ネイティブプログラムの分析では、アセンブリと疑似コードに加え、関数呼び出し、参照、関連する定数が得られます。JavaScript " +"の分析では、モジュール、それらの関係、ソース内の位置が得られます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"エージェントは、これらの調査結果を使用して、動作を説明したり、実装を記述してテストしたりします。 ザ- {ph0} DX-Ball計算{ph1} と " +"{ph2}CTFフラグチェッカー{ph3} そのプロセスがどのように機能するかを示します。" + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "エージェントに何を聞けばいい?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "それにローカルターゲットと調査するための一つの動作を与えます。 JavaScriptまたはElectronアプリの場合:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"パスをターゲットに置き換えます。 ザ- {ph0}ガイド{ph1} ネイティブ、Electron、およびブラウザの例のプロンプトを提供します。" + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "トラブルシューティング" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "エージェントにREAツールが表示されないのはなぜですか?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "セットアップ後にエージェントを再起動または再接続します。 でそのREA登録を確認してください {ph0};Codexのため :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "端末·一つのクライアントを確認してください" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"置換 {ph0} クライアントIDでは、次のようになります {ph1} または {ph2}. " +"レポートに不足している登録または古い登録が表示されている場合は、そのクライアントのセットアップを実行します:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "端末*クライアントのセットアップを修復" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"その計画を確認し、クライアントを再起動します。 登録は正常ですが、ツールが存在しない場合は、クライアントのMCP接続エラーを確認してください。 " +"{ph0}より多くのセットアップ診断{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "最初にHopperを起動する必要がありますか?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REAは、操作が必要なときにHopperを開始します。 macOSでは、無人分析の前にデモモードまたはライセンス認証の最初の実行選択を完了します。 " +"{ph0}ネイティブプロバイダーの設定を参照してください{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "バグが起きたらどうすればいい?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}更新REA {ph1}、エージェントを再起動し、同じタスクを再試行します。 最近のリリースでは既に問題が解決されている可能性があります。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"それが持続する場合, {ph0}課題を開く{ph1} " +"あなたのREAバージョン、オペレーティングシステム、ターゲットタイプ、再現する手順とエラー出力を使用します。 " +"問題がマシンコードプログラムの分析に関係する場合は、プロバイダー名を含めます。" + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "データと共有" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "REAは私のアプリをアップロードしますか?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "REAは、マシン上のターゲットを分析します。 エージェントは結果を受け取り、モデルプロバイダーのデータポリシーがその結果に適用されます。" + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "例を共有したり、貢献したりするにはどうすればよいですか?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"便利なREAの例がありますか? 私たちはそれを見たいと思います。 ターゲット、あなたの質問、調査結果、およびそれらをどのようにチェックしたかを共有します" +" {ph0}発行{ph1} または {ph2}プルリクエスト{ph3}. 短いコードの抜粋と数字は、他の人が調査に従うのに役立ちます。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"バグレポート、機能要求、ドキュメント、コードの改善も歓迎します。 また、例について説明することもできます {ph0}コミュニティ{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA FAQ:セットアップ、アップデート、およびトラブルシューティング" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "一般的なREAの質問への回答:インストール、更新、分析ツール、コーディングエージェント、トラブルシューティングと共有例。" + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "REAに関するよくある質問" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "コピー REAセットアップコマンド" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "COPY REA updateコマンド" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Copy agent setup refreshコマンド" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "コピー REA CLI解析コマンド" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "分析例のコピー" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "クライアント診断コマンドのコピー" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "スコープ設定のコピーコマンド" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}ホーム{ph1} /あなたの最初の調査" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "どこを見つける{ph0}エクスポートされたノートは行きます。" + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "REAを使用して、小さなアプリを検査し、そのエクスポートノートボタンに従って、自分で詳細を確認します。" + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "この演習では" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. セットアップ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. 輸出について尋ねる{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. 答えに従ってください{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. 予測を確認する{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. 別の質問をする{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. エージェントをREAに接続します" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "コピー" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "または、ターミナルでこのコマンドを実行します:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "計画を確認し、設定を承認してから、エージェントを再起動します。 すでに接続されていますか? 以下に進みます。" + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. CSVがどこに書かれているかを尋ねる" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"この例では、6つのファイルElectronアプリを使用しています。 {ph0}ノートのエクスポート{ph1} ボタン。 " +"エージェントは、Electronをインストールまたは起動せずにコードを検査できます。" + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "エージェントはファイルをダウンロードし、検査のために解凍されたフォルダをREAに与えます。" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}ダウンロード例ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"エージェントがファイルをダウンロードできない場合は、このアーカイブを自分で解凍します。 それへの道を与えてください {ph0} " +"フォルダと同じエクスポートの質問。" + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. コードに戻って答えに従ってください" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "ファイルと行の参照に関する簡単な説明を探してください:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"ボタンはaを送ります {ph0} メッセージ。 メインプロセスは、CSVとしてノートをフォーマットし、書き込みます {ph1} " +"ユーザーのダウンロードフォルダにあります。 列は次のとおりです {ph2} と {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "ボタンからファイルライターへ" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "REAの静的解析は、メッセージとそのハンドラーをペアリングします。 宛先はコードから読み取られます。" + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"ファイルパス、フォーマッタ、および書き込み呼び出しは、このハンドラーにまとめられています。 " +"その答えがそれらを残す場合は、これらの行を表示するようにエージェントに依頼してください。" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}完全なコードトレースと記録されたREA結果を参照してください{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. 予測を確認する" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "コンマはCSV列を区切っています。 ノートタイトル自体にコンマまたは引用符が含まれている場合はどうなりますか?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "自分でチェックを実行します" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "開梱された端末で端末を開く {ph0} フォルダ:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"このコマンドは、bashやZshなどのhere-documentをサポートするシェルを使用します。 " +"エージェントは、プラットフォームのシェルで同じJavaScriptを実行できます。" + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. 別の質問をする" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "同じ会話でフォローアップを試してみてください:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "ファイルを書き込めない場合はどうなりますか? エラーに従ってページに戻ります。" + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "または、エージェントに独自のアプリを提供し、一つのボタン、ファイル、または動作について尋ねます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}NotionがテキストとHTMLをどのようにコピーするか{ph1}{ph2}パッケージ化されたElectronアプリのクリップボード機能に従ってください。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}DX-Ballがステレオサウンドポジショニングを計算する方法{ph1}{ph2}元の指示と再建のチェックを読んでください。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}セットアップまたは分析のトラブルシューティング{ph1}{ph2}REAを更新し、動けなくなった場合は接続を確認してください。{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "あなたの最初のリバースエンジニアリング調査-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"小さなノートアプリでREAを試してみてください。 " +"エージェントを設定し、エクスポートされたノートの場所を尋ね、サンプルタイトル付きのCSVフォーマッタを確認します。" + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "あなたの最初のREA調査" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "コピー REAインストールプロンプト" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Copy setupコマンド" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "コピーノート調査プロンプト" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "コピー CSVチェックプロンプト" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "コピーフォーマッタチェックコマンド" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}ホーム{ph1} /はじめに" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "REAをセットアップします。" + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "REAをコーディングエージェントに接続するか、端末からローカルアプリを検査します。" + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "ターミナルを開いて確認してください:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "ターミナル" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "コピー" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows(PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows PowerShell" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "条件に同意するように求められた場合は、\"Y\"と入力します。 PowerShellを閉じて、もう一度開き、実行します {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"PowerShellが後で言う場合 {ph0}「このシステムでスクリプトの実行が無効になっています」{ph1} あなたが実行するとき " +"{ph2}、これを一度実行して再試行してください:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Homebrewを使用する場合 :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS*Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "それ以外の場合:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "ターミナルを閉じて、もう一度開いてから、:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"インストーラは必要です {ph0} と {ph1} (Debian/Ubuntuで: {ph2}). ターミナルを閉じて、もう一度開いてから、:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"あなたの分布は独自のものです {ph0} パッケージは22.19より古いことが多いので、チェックしてください {ph1} " +"あなたが代わりにそれを使用する場合。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "通常のインストーラを好みますか? からLTSバージョンをダウンロードしてください {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "セットアップオプション" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}コーディングエージェントを接続する{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}CLIを使用する {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}マシンコードプログラムの解析の設定{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}助けを得る{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "コーディングエージェントを接続する" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"セットアップを実行して、REAをコーディングエージェントに接続します。 クライアントの選択肢には、Claude " +"Code、Codex、Cursor、Gemini CLI、Windsurf、Grok " +"Build、およびその他のサポートされているMCPクライアントが含まれます。 Grok Botのコネクタはチャットから追加されます。" + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "コーディングエージェントは初めてですか?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"コーディングエージェントは、ブラウザタブではなくコンピュータ上で動作するAIアシスタントです。 " +"ファイルを読み込んでコマンドを実行することができ、変更を加える前に要求します。 REAはリバースエンジニアリングツールを提供します。" + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "まだお持ちでない場合は、1つを選択し、インストールページに従ってサインインします:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "{ph0}{ph1} Claude Code {ph2}{ph3} Anthropicによって。 有料Claudeプランが必要です。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "{ph0}{ph1} Codex {ph2}{ph3} OpenAIによって。 ChatGPTアカウントでサインインします。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "{ph0}{ph1} OpenCode {ph2}{ph3}、オープンソース。 お好みのモデルプロバイダを接続します。" + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "次に、それを開き、下のプロンプトをその中にコピーします。 エージェントはREAのセットアップを実行し、何かを変更する前に計画を示します。" + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "または自分でセットアップを実行します" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "ターミナルを開くにはどうすればよいですか?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} スタートメニューを開き、次のように入力します {ph2}PowerShell{ph3} " +"Enterキーを押します。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "{ph0} macOS :{ph1} プレス {ph2} {ph3}、タイプ {ph4}ターミナル{ph5} Enterキーを押します。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "{ph0} Linux :{ph1} プレス {ph2} {ph3} {ph4} ほとんどのデスクトップで。" + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"でコマンドを貼り付ける {ph0} {ph1} (macOS : {ph2} {ph3};Linux端子: {ph4} {ph5} " +"{ph6})を押し、Enterキーを押します。" + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"クライアントを選択し、セットアッププランを確認します。 REAは、MCP接続とマッチング調査スキルを追加し、既存の構成のバックアップを保持します。 " +"変更を適用する前に尋ねます。" + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "セットアップが完了したら、クライアントを再起動します。" + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "クライアントを再起動するにはどうすればよいですか?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}デスクトップアプリ{ph1} (Claudeデスクトップ、Cursor、Windsurf、VS " +"Code):アプリを完全に終了してから、もう一度開きます。 ウィンドウを閉じるだけでは十分ではありません。 macOSプレスに {ph2} " +"{ph3};Windowsでは、トレイアイコンがある場合は、トレイアイコンからも終了します。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}ターミナルエージェント{ph1} (Claude Code,Codex,Gemini CLI):セッションを終了し、再度開始します。" + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "エージェントにターゲットパスと特定の質問を与えます。 JavaScriptまたはElectronアプリの場合は、次のように開始できます:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"を見てください {ph0} そして、それはデータをエクスポートする方法を見つけます。 " +"関連するエントリポイント、呼び出し、依存関係、および調査結果のソースの場所を表示します。" + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "パスをローカルターゲットに置き換えます。" + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "フォルダのフルパスを取得するにはどうすればよいですか?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} ファイルエクスプローラーで、フォルダーを右クリックして、次を選択します {ph2}パスとしてコピー{ph3}." +" Windows10で、Shiftキーを押しながら右クリックします。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} Finderで、フォルダを右クリックし、オプションを押したまま、を選択します " +"{ph2}パス名として\"...\"をコピーします{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "{ph0}任意のシステム:{ph1} フォルダをターミナルウィンドウにドラッグすると、そのパスが表示されます。" + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "ターミナルでは、スペースを含むパスの周りに引用符を付けます。" + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "CLIを使用する" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "アプリを実行せずに、JavaScriptまたはElectronアプリケーションフォルダーまたはASARアーカイブを分析します:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "静的アプリケーション分析" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"パスを抽出したアプリディレクトリに置き換えます。 {ph0} ファイル。 Windowsでは、次のようなパス {ph1} ここで働いています。" + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "どこでアプリを見つけるのですか。asarファイル?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electronアプリは、通常、それを維持します {ph0} フォルダ:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "{ph0} macOS :{ph1} {ph2} (アプリを右クリックして選択します {ph3}パッケージの内容を表示する{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} 多くの場合 {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "一部のアプリは他の場所にインストールされます。 アプリのフォルダを検索します {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "結果はアプリを識別し、モジュール間の接続を示し、ソースの場所を示します。 REAが解決できない接続は、結果にマークされています。" + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "パーマネントをご希望の場合は {ph0} シェル内のコマンド:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "CLIをインストールする" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}JavaScriptアプリケーションガイドの続きを読む{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "マシンコードプログラムの解析の設定" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"マシンコードプログラムには、ローカル解析ツールが必要です。 以下のいずれかを選択して設定し、REAに実行可能ファイルまたはライブラリを与えます。" + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "ツールを選択します:Ghidra、HopperまたはIDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"既存のGhidra12.1を使用します。X64またはarm64上のLinuxまたはmacOS上のXインストールおよび64ビットJDK21以降。 " +"Ghidraインストールには、ホストアーキテクチャ用のネイティブ逆コンパイラが必要です。 セットアップを実行する前にパスを設定します:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Ghidraインストールを接続します" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra接続•macOS/Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"両方のパスを既存のインストールに置き換えます。 セットアップはそれらをチェックし、選択したクライアントの有効な設定を記録します。 Linux " +"arm64では、Ghidraのネイティブ逆コンパイラを個別にビルドする必要がある場合があります。" + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "GhidraをWindowsに接続する" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows " +"x64は、固定ローカルNTFSドライブ上のネイティブx86およびx64PEアプリケーションとDllのための実験的な、読み取り専用のサポートを持っています。" +" 既存のGhidra12.1を使用します。Xのインストールおよび64ビットJDK21以降:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra接続•Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "2つのパスをインストールに置き換えてから、セットアップの計画を確認します。" + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"HopperをmacOSまたはLinuxに接続します。 " +"上記のsetupコマンドを実行します。既存のインストールを検出するか、承認のためのインストール計画を提供します。" + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "macOSでは、無人分析の前にデモモードまたはライセンス認証のHopperの最初の実行選択を完了します。" + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"検証済みのIDAセットアップでは、Windowsを使用し、接続されたGUIまたはヘッドレスデータベース用の既存のMCP登録が使用されます。 " +"LinuxおよびmacOSヘッドレス解析は未検証のままです。" + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "既存のIDA MCP登録を接続する" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"アップストリームサーバーの動作を維持する {ph0}, {ph1} とオプション {ph2} JSONファイルで。 既存の {ph3} " +"を持つオブジェクト {ph4} エントリーも受け付けています。 セットアップ前にそのファイルにREAをポイントします:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA接続•Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"添付されたプロファイルは、IDAで既に開いている元のバイナリを持つアップストリームレガシー1.4.0ツールを使用します。 " +"ヘッドレスプロファイルは、上流のdatabase-supervisor APIを使用し、次のような登録を行います " +"{ph0};実際の検証は、IDA9.3Windows x64スーパーバイザをカバーしています。 医師はIDAを起動せずに登録をチェックします。" + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"REAに元の実行可能ファイルパスを与え、次のようにします {ph0} CLIクエリで。 エージェントの場合は、次のものが含まれます。 {ph1} " +"REA登録の環境で、バイナリを開くときにIDAを選択します。" + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "既存のGhidraセットアップでは、次のような関数を検査します:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "関数解析" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "置換 {ph0} 検査する関数名またはアドレスを指定します。" + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "マシンコード-プログラム-セッションの分析の仕組み" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"各CLIコマンドはバイナリをインポートして分析し、そのセッションを閉じます。 " +"エージェントのMCPクエリは、セッションが開いている間にインポートされたバイナリを再利用します。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "{ph0}マシンコードプログラムの分析の例に従ってください{ph1} 関数の結果がどのように回復された計算につながるかを確認します。" + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "助けを得る" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "エージェントにREAが表示されない場合" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "セットアップ後にクライアントを再起動または再接続します。 とのREA接続を確認してください {ph0};Codexのため :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "一つのクライアントをチェック" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "プロバイダが注意を必要とする場合" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "使用しているプロバイダーを確認してください。 Ghidraのため :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "一つのプロバイダを確認してください" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "レポートには、失敗したチェックと推奨される次のステップが表示されます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "{ph0} REAよくある質問{ph1}{ph2}更新、エージェント、分析に関する迅速な回答。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "{ph0}調査ガイドを選ぶ{ph1}{ph2}バイナリ、Electronアプリ、およびブラウザの例を使用しました。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "{ph0} GitHubの問題{ph1}{ph2}コマンドと診断に関する問題を報告します。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "{ph0} REAコミュニティ{ph1}{ph2}質問、調査、進行中の作業。{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "REAをインストールし、コーディングエージェントを設定します" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"REAをコーディングエージェントに接続するか、ターミナルからローカルのJavaScriptまたはElectronアプリを検査します。 " +"セットアップ、最初の質問とネイティブプロバイダガイド。" + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "コピー Node.jsバージョンチェック" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "コピー Node.js のインストールコマンド Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "PowerShell実行ポリシーコマンドのコピー" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "コピー Homebrew Node.jsインストールコマンド" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "macOSのfnmインストールコマンドのコピー" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Node.js24コマンドをmacOSにコピーする" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Linuxのfnmインストールコマンドのコピー" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Node.js24コマンドをLinuxにコピーする" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA入門ガイド" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "コピー REAインストールプロンプト" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Copy agent setupコマンド" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Copy JavaScript解析コマンド" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Copy CLIインストールコマンド" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Ghidra接続をコピーする•macos/linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Windows PowerShell用のGhidra接続のコピー" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Windows PowerShell用のIDA接続のコピー" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "ネイティブ関数解析コマンドのコピー" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "クライアント診断コマンドのコピー" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "プロバイダ診断コマンドのコピー" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}ホーム{ph1} / {ph2}ガイド{ph3} /ブラウザ観察" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "何が起こるか見てください{ph0}あなたがクリックすると。" + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "小さなブラウザアプリを使用して、アクション、そのネットワーク要求、およびダウンロードを構築するJavaScriptを接続します。" + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "このガイドの内容" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}この例は次のとおりです{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}ブラウザを開く{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}あなたの代理店に尋ねる{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}CLIからのキャプチャ {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}リクエストとスクリプトを読む{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "[エクスポート]をクリックするとどうなりますか?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"ザ- {ph0}ノートブラウザの例{ph1} を持っている {ph2}ノートのエクスポート{ph3} ボタン。 それをクリックするとロードされます " +"{ph4}、CSVとして二つのノートをフォーマットし、ダウンロードを開始します。" + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "クリックからCSVダウンロードへ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01*あなた{ph1}{ph2}[メモのエクスポート]をクリックします{ph3}{ph4}キャプチャの実行中にブラウザでアクションを実行します。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02*REA " +"{ph1}{ph2}要求を記録する{ph3}{ph4}選択したページから要求URL、応答ステータス、JSON構造をキャプチャします。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03*あなたの代理店{ph1}{ph2}エクスポートコードを読む{ph3}{ph4}監視された要求をに接続して下さい {ph5} で " +"{ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "[ノートのエクスポート]をクリックする前に、キャプチャを開始します。" + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "リモートデバッグでChromeを開く" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "別のブラウザプロファイルとローカルデバッグポートを使用して、ホストされたNotesの例を開きます。 Linuxについて :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "例のブラウザを起動します" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "コピー" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"インストールされているブラウザの実行可能パスをmacOSまたはWindowsに使用します。 " +"ページのURLを検査する別のページに置き換えることができます。" + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "REAは、この既存のブラウザに接続します。 ページの制御を維持し、アクションを実行し、終了したらブラウザを閉じます。" + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "一つのアクションを見るためにあなたのエージェ" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用して、ノートのエクスポートをクリックしながらこのページを検査します。 " +"それはどのような要求を行い、CSVはどのように構築されていますか?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"プロンプトの例。 エージェントにデバッグエンドポイントを与える, {ph0}、およびページのURL。 クリックする前にキャプチャを開始しましょう。" + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"エージェントはページターゲットを検出し、観察ウィンドウを開始し、結果の証拠を読み取ります。 その後、エクスポートの背後にあるスクリプトを検査できます。" + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "または端末からキャプチャします" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "ページのターゲットIDを検索する:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "ページを探す" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "Notesの例のURLでターゲットを選択します。 置換 {ph0} そのIDで以下を実行し、次に実行します:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "次の10秒をキャプチャします" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"コマンドを数秒間接続してから、をクリックします {ph0}ノートのエクスポート{ph1} そのブラウザで。 " +"結果は、観測ウィンドウが終了した後に到着します。" + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"キャプチャされた結果には、選択されたページ、そのウィンドウ中のネットワークアクティビティ、およびJSON応答の形状が含まれます。 " +"以前の要求はこのキャプチャの外にあります。" + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "リクエストとエクスポートスクリプトを読む" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "ローカルノートの例でREA4.1.0で記録されました" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "捕獲された事実" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "値" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "リクエスト" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "応答" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "リクエストイニシエータ" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} •スクリプト" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "応答構造" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} と {ph1} と {ph2} フィールド" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "ロードされたスクリプトを読む" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"要求はデータソースを識別し、REAレコードを識別します {ph0} その創始者として。 " +"キャプチャされたスクリプトソースを読んで、データの使用方法を確認します:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "ダウンロードは、JSON応答を使用してページで構築されます。 CSV書式設定ステップはスクリプトから取得されます。 {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "要求するスクリプトを見つけます {ph0}. カンマや引用符を含むタイトルはどのようにエスケープされますか?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"インストールされているJavaScriptまたはElectronアプリの場合は、次の手順を続行します。 {ph0}アプリケーションワークフロー{ph1}" +" ファイルとプロセスの境界に従う。" + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "ブラウザとネットワーク分析-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"REAを使用してノートのエクスポートを観察する:ブラウザページを選択し、クリックをキャプチャし、要求を検査し、エクスポートスクリプトに従います。" + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "ブラウザ観察" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "例のブラウザをコピーして起動します" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "プロンプトの例をコピーする" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "コピーページを探す" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "次の10秒をキャプチャしてコピーします" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "ロードされたスクリプトをコピーして読みます" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}ホーム{ph1} /ガイド" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REAガイド." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"ネイティブ関数、Electronエクスポート、またはブラウザ要求を分析します。 各ガイドには、プロンプト、コード、および結果が含まれています。" + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "最初の調査" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "REAのセットアップ" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "コーディングエージェントを接続するか、端末からREAを使用します。" + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "REAを始める" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "マシンコードプログラム" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "左/右の音の位置の計算を回復します" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "Windowsゲーム実行可能ファイルから始めます。 命令を検査し、呼び出し元に従って、数値定数を読み取り、回復されたCを確認します。" + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "機械コードの解析プログラムガイド" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "CSVエクスポートに従ってください" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"小さなNotesアプリは、レンダラー、プリロード、メインプロセス全体に一つの機能を広げます。 " +"REAを使用して、API、IPCチャネル、およびファイルライターを接続します。" + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript&Electronガイド" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "大規模なパッケージ化されたアプリの場合は、次の {ph0} Notionのクリップボードブリッジ{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "ブラウザの動作" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "クリックを観察する" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "作業ノートの例を開き、エクスポート要求をキャプチャして、その応答をダウンロードに変換するコードを見つけます。" + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "ブラウザ観察ガイド" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "リバースエンジニアリングガイド-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "ネイティブ計算、Electron CSVエクスポートとブラウザ要求:短い働いた例を通してREAを学びます。" + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}ホーム{ph1} / {ph2}ガイド{ph3} /JavaScript&Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Electronをトレースする {ph0} CSV輸出。" + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "ページAPIからElectron IPCを介して、CSVファイルライターにボタンをクリックします。" + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "このガイドの内容" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}この例は次のとおりです{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}あなたの代理店に尋ねる{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}エクスポートコードのトレース{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}例を試してみてください{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}CSVライターを検査する{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "\"エクスポートノート\"はどこに行くのですか?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"このガイドでは、小さなElectronアプリを使用しています。 クリック {ph0}ノートのエクスポート{ph1} " +"ページ内のAPIを呼び出し、メインプロセスに交差し、CSVを書き込みます。 動作は複数のファイルに分散されます。" + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "CSVは、Electronプロセス間でエクスポートします" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}レンダラー→プリロード{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} によって公開されるAPIを呼び出します " +"{ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}プロセス間{ph1}{ph2}{ph3}{ph4}{ph5}プリロードはIPCチャネルを起動します。これは、メインプロセスへの名前付きメッセージです。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}主なプロセス{ph1}{ph2}エクスポートハンドラー{ph3}{ph4}{ph5} " +"そのチャネルを処理し、CSVライタを呼び出します。{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} メモの書式設定→ {ph1} 書き込み {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REAは、そのハンドラーへのリテラルIPC呼び出しと一致し、公開されたAPIを識別します。 " +"パスはコードから推測され、ランタイムキャプチャは何が実行されるかを確認できます。" + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "CSV輸出について尋ねる" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "{ph0}エージェントをREAに接続します {ph1} そして、それにappディレクトリまたはASARファイルを与えます:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "コピー" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}私はこのアプリでノートをエクスポートするときに何が起こるかを見つけるためにREAを使用し " +"CSVはどこで作成されますか?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "プロンプトの例。 アプリケーションフォルダへの絶対パスを含めるか、 {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REAはアプリケーションファイルを読み取り、エントリポイント、モジュール、およびプロセス境界のマップを構築します。 " +"エージェントはそのマップを使用して、調査をエクスポート機能に絞り込みます。" + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "エクスポートコードのトレース" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "ページは小さなAPIを呼び出します" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "ページはメソッド名を知っています。 実装はプリロード内に存在し、レンダラーに公開されます。" + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "REAレコード {ph0} とリテラルチャンネル {ph1}. その呼び出しをメインプロセスの単一の一致ハンドラーとペアにします。" + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"ハンドラーを読むことは元の質問に答えます: {ph0} メモをフォーマットし、メインプロセスは書き込みます {ph1} " +"ユーザーのダウンロードフォルダに移動します。" + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"以下のダウンロード可能な例でREA4.1.0によって記録されました。 ソースの場所は、API、チャネル、およびハンドラーの調査結果に伴います。" + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "自分で例を分析してください" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}ダウンロード例ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "6つのソースファイルを参照します。" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "静的アプリケーション分析" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"パスを解凍したフォルダに置き換えます。 あなたは1つのIPCチャネルと1つの一致するハンドラを見つける必要があります {ph0}. " +"ソースの場所は次のとおりです {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"独自のアプリの場合は、そのディレクトリまたはASARパスで同じコマンドを使用します。 " +"エージェントは、REAの機能トレースツールを使用して、リテラル文字列、API名、またはIPCチャネルを追跡できます。" + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "CSVライターを検査する" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "フォロー {ph0} そのハンドラに。 どの入力がCSVライターに到達し、ファイルの書き込みに失敗した場合はどうなりますか?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "これらの詳細を検査するには、ソースの場所を使用します。 計算されたチャネル名とあいまいなハンドラーは未解決のままである可能性があります。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Notionのクリップボードブリッジに従ってください{ph1} " +"{ph2}パッケージ化されたElectronアプリにも同じアプローチを適用します。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "{ph0}ブラウザのエクスポートを観察する{ph1}{ph2}実際のクリックをキャプチャし、それが作る要求を参照してください。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "{ph0}ネイティブ関数に従う{ph1}{ph2}機能がネイティブコードに依存している場合は、バイナリに進みます。{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "JavaScriptおよびElectron分析-REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"トレースAノートCSVレンダラー API、プリロード、およびREAを使用したIPCハンドラーを介してエクスポートします。 " +"ダウンロード可能なサンプルファイルと検証済みの分析結果が含まれています。" + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "プロンプトの例をコピーする" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "静的アプリケーション分析のコピー" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "{ph0}ホーム{ph1} / {ph2}ガイド{ph3} /機械コードプログラムの解析" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "回復DX-Ballの{ph0}左/右の音の位置の計算。" + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "元の命令を調べ、入力と定数を特定してから、復元されたCを確認します。" + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "このガイドの内容" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}この例は次のとおりです{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}あなたの代理店に尋ねる{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}REAの結果を読む{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}回復とチェック{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}独自のバイナリを使用する{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "左/右のステレオサウンドの位置を計算する" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "DX-Ballでは、レンガのヒットが水平画面の位置を供給します。 サウンドコードは、それを左/右パン値に変換します。" + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"開始機能, {ph0}、短い逆コンパイラの結果を持っています:への呼び出し {ph1}. " +"REAはまた、エージェントに不足している算術を調査する方法を与えるその命令と呼び出し元を返します。" + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "これらの条件に新しいですか?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "{ph0}説明書:{ph1} プロセッサが実行する手順は、次のような読み取り可能な形式で示されています {ph2} または {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}逆コンパイラの結果/擬似コード:{ph1} 命令をCのようなコードに戻そうとする分析ツールの試み。 " +"この例のように、部品が欠落する可能性があります。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "{ph0}発信者:{ph1} これを呼び出す関数。 どの値が渡されるかを示します。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "{ph0}住所:{ph1} プログラム内の場所で、次のような16進数で記述されています {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "{ph0}定数:{ph1} プログラムに格納されている固定番号は、生のバイトとして読み取られ、デコードされます。" + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "証拠の三つの部分、一つの計算" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01*説明書{ph1}{ph2}整数入力{ph3}{ph4}スタック読み取りは、浮動小数点命令で使用される値を提供します。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "{ph0}02*発信者{ph1}{ph2}画面座標{ph3}{ph4}ブリックヒットの発信者が通過します {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03*データバイト{ph1}{ph2}数値定数{ph3}{ph4}参照されたバイトはに解読します {ph5}, {ph6} " +"とスケール値。{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "REAは、命令、関数呼び出しの関係、およびバイトを提供します。 エージェントはそれらを一緒に解釈します。" + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "行動について尋ねる" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"後 {ph0}REAをエージェントに接続する{ph1} と " +"{ph2}マシンコードプログラムの解析ツールの設定{ph3}、ローカル実行可能ファイルと質問を提供します:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "どの分析ツールを使うべきですか?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REAは、ネイティブプログラムを読むためにこれらのいずれかが必要です:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} (macOSまたはLinux):REAのセットアップがそれを検出するか、それをインストールすることを提案します。 " +"macOSでは、Hopperを一度開き、デモモードを選択するか、最初の分析の前にライセンスをアクティブにします。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} " +"(macOSまたはLinux;Windowsで実験):無料ですが、既存のGhidra12.1が必要です。Xのインストールおよび64ビットJDK21以降。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "{ph0} IDA {ph1} (Windows):MCP登録を持つ既存のIDAセットアップの場合。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "見る {ph0}マシンコードプログラムの解析の設定{ph1} ステップのために。" + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "コピー" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用して、DX-Ballがステレオサウンドの位置を計算する方法を見つけます。 " +"計算を説明し、コードを表示します。{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"プロンプトの例。 エージェントにローカルのDX-Ball1.07実行可能ファイルへのパスを指定します。 REAにはDX-" +"Ballが含まれていないため、独自のコピーを使用するか、持っている別の小さなWindowsプログラムについて同じ種類の質問をしてください。" + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "ファイルのフルパスを取得するにはどうすればよいですか?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} ファイルエクスプローラーで、ファイルを右クリックして選択します {ph2}パスとしてコピー{ph3}. " +"Windows10で、Shiftキーを押しながら右クリックします。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} Finderで、ファイルを右クリックし、オプションを押したまま、を選択します " +"{ph2}パス名として\"...\"をコピーします{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "{ph0}任意のシステム:{ph1} ファイルをターミナルウィンドウにドラッグすると、そのパスが表示されます。" + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "REAの結果を読む" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "入力を読む" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "命令は整数引数をロードし、浮動小数点演算用に変換します。 これは、最初の擬似コードビューに存在しない入力です。" + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "発信者に従ってください" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REAは、ブリックヒット呼び出し元を識別します。 以前の手順では、タイル座標に30を掛けます。 {ph0} (20)は、レンガの画面位置を与えます。" + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "参照される定数の読み取り" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "算術はこれらのアドレスを参照します。 命令の順序は、それらがどのように使用されているかをエージェントに伝えます。" + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "復元された機能の書き込みと確認" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"縮尺が1.0の場合、画面の位置0、320、640は整数変換の前に-500、0、500にマップされます。 " +"この計算では、画面の中心がステレオフィールドの中心に置かれます。" + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"エージェントはREAの調査結果を使用してC.Separate " +"checkを記述し、3,205個の入力を元のx86関数と比較し、完全な関数のコンパイルされた63バイトすべてを再現しました。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}完全な調査とアセンブリとCの比較を参照してください{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "独自のバイナリで試してみてください" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}マシンコードの解析プログラムのプロバイダを接続します。{ph1} " +"次に、エージェントにローカルの実行可能ファイルまたはライブラリと調査する機能を提供します。 " +"有用な開始質問には、\"このファイルはどのように解析されますか?\"または\"このメニューアクションを処理する関数はどれですか?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "関数名またはアドレスがすでにわかっている場合は、端末からクエリできます。 構成されたGhidraインストールの場合:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "関数解析" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"ターゲットパスを置き換え、 {ph0} 独自の関数名またはアドレスを使用します。 " +"各CLI呼び出しは、バイナリをインポートして分析し、そのセッションを閉じます。 " +"エージェントのMCPクエリは、セッションが開いている間にインポートされたバイナリを再利用します。" + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "擬似コードを指示と参照と一緒に読んでください。 結果がコールまたは値を未解決のままにした場合は、その場所を次の質問として使用します。" + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "ネイティブバイナリ解析-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "REAでネイティブ計算を復元する:命令を検査し、呼び出し元に従って、定数を読み取り、再構成されたCを確認します。" + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "機械コードプログラムの解析" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "プロンプトの例をコピーする" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "コピー関数解析" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "REAのセットアップ" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}REAのセットアップ {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}REとは何ですか?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}REA がどう役立つか{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}恐竜ゲーム{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}電卓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}REAを試してみてください {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}さらに詳しく{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}ヘルプとフィードバック{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}コミュニティ{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "コーディングエージェントとのリバースエンジニアリング" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "ソフトウェアの{ph0}仕組みを知ろう。" + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "REA は、プログラムを調べて動作を説明するためのツールをコーディングエージェントに提供します。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "すでに再を知っていますか? {ph0}分析ガイドへスキップ→{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "もっと深く行きたいですか? {ph0}ブログを読む→{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "このプロンプトをコーディングエージェントに貼り付けてください:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "コピー" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "ターミナルから実行することもできます:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "設定の変更内容を確認して承認したら、エージェントを再起動します。" + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "リバースエンジニアリングとは?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "{ph0}プログラムそのものを調べて{ph1}、ソフトウェアの仕組みを理解することです。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"目標:機能を十分に理解する {ph0}それを説明してください{ph1}, {ph2}それを変更します{ph3} または " +"{ph4}それを再構築します。{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "REA を使う前 · {ph0}自分で{ph1}調べる" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} 枝をデコードする" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} トレース呼び出し" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} ルールを回復する" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}オリジナルx64·選択された指示{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01*どの支店?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "“{ph0}0x5b? 0x5c?{ph1} 同じ場所に2つのジャンプ。 これらはどの演算子ですか?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "コマンドIdを検索し、ブランチにラベルを付けます。" + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "ディバイド÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "乗算×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · 呼び出された関数は何をする?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "「100は明らかです。 呼び出しは単なるアドレスです。 {ph0}どちらが分かれていますか? どの値が入りますか?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "ヘルパー関数を検査し、格納されている値をトレースします。" + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "ディバイド" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03·ルールとは何ですか?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "\"このパスは、他の入力によって乗算されます。 だから {ph0}10%は200の10%を意味します{ph1} +の後。”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "オペランドに名前を付け、両方の演算子パスを確認します。" + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "図解専門家の推論" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "{ph0}命令をデコードし、関数呼び出しに従って計算を再構築します。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "REA を使うと · {ph0}エージェント{ph1}に聞く" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "プロンプトは一つだけ。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "{ph0}普段の言葉で{ph1}エージェントに質問します。" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}プロンプトの例*電卓" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "回答例*調査結果に基づく" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "+の後に、%ボタンがかかります {ph0}最初の数の割合。{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA が提供する情報" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "ハンドラーの命令、逆コンパイルされたコード、および呼び出し。" + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "エージェントが説明すること" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "どのブランチが適用され、何が計算され、どのように再構築するか。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"インストールされている電卓DLLから選択されたアセンブリ。 考えと返信は、調査結果を示しています。 {ph0}電卓の例に続きます↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "{ph0}2つの例を試してみましょう。{ph1} ゲームの速度を変更し、電卓に戻り、その%ボタンを再構築します。" + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "例01•Chromeの恐竜ゲーム" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "恐竜はなぜ速くなる?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "ゴール" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "でゲームを再構築する {ph0}調節可能な速度。{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "なぜそれをリバースエンジニアリング?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"その加速を再現するには、次のものが必要です " +"{ph0}実行中のゲームのルール{ph1}:どのくらいの速、それが増加し、それが停止したときに、それが開始されます。" + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "再構築したゲームで遊ぶ" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "スタート" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "ジャンプ ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "リスタート" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "速度" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "回復された加速ルールを使用する" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "元のルール:6から開始し、13に向かって増加します。" + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "スライダーを動かして独自の速度を設定します。 スペースまたはジャンプはサボテンをクリアします。" + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "再構成を再生するには、JavaScriptを有効にします。 上記のコードと説明は読みやすいままです。" + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA が返した結果" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}ページ内で実際に実行されているスクリプト。{ph1} エージェントは更新機能と速度設定を読み取り、新しいゲームでそのルールを使用します。" + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}例プロンプト*恐竜ゲーム" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}この恐竜のゲームを検査するためにREAを使用してください。 なぜそれは速くなるのですか? " +"速度ルールを表示し、調整可能な速度で小さなバージョンを構築します。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "検査対象: {ph0}wayouのChromium派生ブラウザ版{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}6時からスタート。{ph1} 追加 {ph2}0.001{ph3} 速度は以下のとおりですが、衝突のない各更新 {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "スピードラボを開く→" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "各部分が何をするか" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01*REA {ph1}{ph2}実行中のゲームのスクリプトを読む{ph3}{ph4}実際のコードと設定をエージェントに返します。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02*あなたの代理店{ph1}{ph2}ルールを再構築し、コントロールを追加します{ph3}{ph4}スピードスライダーで小さなゲームで回収された加速を使用してください。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03*あなた{ph1}{ph2}スピードとプレイを変更します{ph3}{ph4}元の加速を試してから、自分のペースを選択してください。{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "スクリプト、チェック、および分析を試す方法を参照してください" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REAは、ローカルデバッグ接続を介してHTTP browser editionを検査し、ロードされたものを返しました " +"{ph0}、そのソースとダイジェストを含みます。" + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"私たちは、障害物や自動スケジューリングを無効にして、制御されたブラウザチェックで元のゲームの更新機能を呼びました。 " +"4,000回の更新後の速度は10.0、10,000回の更新後は13.0で、小数点以下1桁に四捨五入されていました。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"新しいミニゲームは、その速度ルールを保持します。 その描画、ジャンプ、および衝突コードは、小さな教育の実装です。 {ph0}ラボを開く{ph1} " +"新しいコードを表示し、同じ速度チェックを実行するには。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"ターゲットを自分で検査するには、次の手順に従います {ph0}ブラウザ接続手順{ph1} を使用して {ph2}恐竜のページ{ph3}. " +"エージェントにページURLとローカルデバッグエンドポイントを指定し、上記のプロンプトをコピーします。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "{ph0}検査された速度コード{ph1} · {ph2} Chromium著者·BSDライセンス{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "例02•Windows計算機" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "電卓の % ボタンを再現する。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "処理する小さな電卓を構築する {ph0}+と×の両方が正しく。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"同じボタンを使用します {ph0}+と×の後の異なるルール。{ph1} " +"インストールされているアプリを調べて、パーセンテージが適用されている数を見つけます。" + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "計算を試してみてください" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "リセット" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10%の200=20. 次に、200+20=220。" + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "検査されたパーセンテージルールのインタラクティブなイラスト。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "{ph0}1つの枝は100で割ります。 もう1つは、最初の数で乗算します。{ph1} エージェントは両方を使用して%ボタンを再作成します。" + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "この例では, {ph0} と {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}プロンプトの例*%ボタンを再構築する" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用して、Windows計算機の%ボタンを検査します。 " +"+と×の後にルールを回復し、両方を使用する小さな電卓を作成します。{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "と+" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}最初の数の10%を取ります。{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "×付き" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}10%を0.1に変えます。{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "インストールされているアプリから作業中の%ボタンへ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02*REAはライブラリを読み込みます{ph1}{ph2}%ハンドラーのコードを返します{ph3}{ph4}関数は演算子をチェックし、定数を使用します" +" {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03*あなたのエージェントはそれを解釈します{ph1}{ph2}ルールの説明と再現{ph3}{ph4}ブランチをMicrosoftのソースと照合してから、上記の+と×を試してください。{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "実際のコードと答えがどのようにチェックされたかを参照してください" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"REA4.1.0で検査:Windows電卓11.2508.4.0、x64。 " +"読み取り可能な概要は、回復されたブランチを説明するために、Microsoftの公開ソースからの名前を使用しています。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "{ph0}割合の実装{ph1} · {ph2}マイクロソフトのテストケース{ph3} · {ph4}ネイティブセットアップガイド{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "あなたの最初の調査" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "小さなアプリでREAを試してみてください。" + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "私たちのノートの例をダウンロードし、そのCSVエクスポートをトレースし、一つの変更された入力を確認してください。" + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "ガイド付きの例を試してください" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "もっと詳しく知りたい?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"理解したいことや構築したいことをエージェントに伝えます。 REAを使うと、何でもからの一緒に働くことができます " +"{ph0}このウェブサイトを複製する{ph1} に {ph2}その実行可能ファイルからゲームを再構築します。{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}プロンプトの例·ウェブサイト" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "はい、これ。" + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}例プロンプト·ゲームの再構築" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}実行可能ファイルからこのゲームを再構築するには、REAを使用します。 " +"Cでゲームプレイロジックを回復し、オリジナルに対してテストします。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}DX-Ballのケーススタディを見る→{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "設定と分析の手順については、ターゲットを選択します:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "マシンコードプログラム" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "実行可能ファイルおよびライブラリ内の関数、文字列、参照、および関数呼び出しの関係を検査します。" + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "機械コードの解析プログラムガイド" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "アプリケーションフォルダまたはASARアーカイブからモジュール、ルート、IPCおよびネイティブ依存関係をマップします。" + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "アプリケーションワークフロー" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "ブラウザとランタイムアクティビティ" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "選択したブラウザまたはプロセスアクティビティをキャプチャし、実行間で結果を比較します。" + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "ブラウザ観察ガイド" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "質問がありますか?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}よくある質問を読む{ph1}, {ph2}Discordで私たちとチャット {ph3}、または {ph4}GitHubの問題を開く{ph5} " +"バグや機能要求のために。" + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "コミュニティに参加" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "調査を共有し、Discord上の他のREAユーザーからの助けを得る。 プロジェクトの更新については、X上のREAに従ってください。" + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-コーディングエージェントのリバースエンジニアリング" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"コーディングエージェントを使用して、アプリ、バイナリ、ブラウザの動作をリバースエンジニアリングします。 " +"明確なガイドに従って、REAを使用してインタラクティブな例を試してください。" + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "コピー REAインストールプロンプト" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Copy setupコマンド" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "手動計算機の分析に従ってください" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "コピー電卓パーセントの質問" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "恐竜ミニゲーム。 ゲームがフォーカスされている間にジャンプボタンを使用するか、スペースを押します。" + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "コピー恐竜解析プロンプト" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "計算を選択する" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "コピー電卓分析プロンプト" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "ウェブサイトプロジェクトプロンプトをコピーする" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "コピーゲーム再構築プロンプト" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}ホーム{ph1} / {ph2}展示会のご案内{ph3} /アンドロイド" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "ケーススタディ·Aegis認証器" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "オーセンティケータはどのようにしていますか{ph0}ログインコードを生成しますか?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "6桁のコードは30秒ごとに変更されます。 REAを使用してAndroid APKで計算を見つけ、制御できる時計で再構築します。" + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis3.4.3·アンドロイド·公式リリースAPK*6.9MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "AegisをGitHubに表示する" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "APKから再現できるコードへ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01*機能を見つける{ph1}{ph2}3,077クラス→生成メソッド{ph3}{ph4} " +"REAはパッケージを検索し、表示アクションとコピーアクションで使用されるコードをトレースします。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02*計算を読む{ph1}{ph2}時間+アカウントキー→6桁{ph3}{ph4} REAは、メソッドとデフォルトを返します。 " +"エージェントは、それらがどのように一緒に収まるかを説明します。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03*再構築とチェック{ph1}{ph2}クロックを変更します。 " +"コードを見てください。{ph3}{ph4}新しいブラウザのデモでは、ルールを再現し、公開されている参照ケースと照合します。{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "このケーススタディでは" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}あなたの代理店に尋ねる{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}コードジェネレータを試してみてください{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}REAでコードを見つける {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}計算を読む{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}再構築を確認する{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}APKを自分で調べてください{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "あなたの代理店に尋ねる" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"アプリは変更されたログインコードを示しています。 私たちは見つけたい {ph0}何がそれを変えるのですか{ph1} そしてその行動を再現します。" + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "コピー" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"ダウンロードしたAPKのプロンプトの例で、REAのAndroid分析が構成されています。 {ph0}APKと解析セットアップを入手↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "コードジェネレータを試してみてください" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"アプリは時間を次のようにグループ化します {ph0}30秒のブロック。{ph1} ブロック番号とアカウントキーを組み合わせてコードを生成します。 " +"同じキーとブロックは同じコードを生成します。" + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "時計を60秒に移動する" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "時間" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "秒" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "私達の調節可能な例の時計" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30秒ブロック" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "ブロック" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59秒{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "生成されたコード" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "アカウントキー+ブロック→6桁" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "時間の例(秒単位)" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59秒" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60秒" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"時59秒): {ph0}287082.{ph1} 60秒で: {ph2}359152.{ph3} 1つのブロック内を移動すると、コードは変更されません。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"キーは固定されており、公開されています {ph0}RFC6238テストデータ{ph1}. このデモでは、APKから回収された計算を実装しています。" + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "この図は、59秒での結果を示しています。 クロックを変更するには、JavaScriptを有効にします。" + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "REAでコードを見つける" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "APKを3つのクラスに絞り込みます" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} 他の2つは、プログレスバーとインポートされたアカウントに関するものです。 TOTPは、時間ベースのワンタイムパスワードを意味します。" + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "ジェネレータをアプリのディスプレイに接続します" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REAはタイムスタンプオーバーロードを識別し、基本メソッドの呼び出し元を検索します。 検査 {ph0} 次に、表示呼び出しを表示します {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "要求には、入力パスが短縮されて表示されます。 結果クラス名は共通を省略します {ph0} プレフィクス..." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "計算を読む" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REAを返します {ph0}クロック変換、デフォルト設定、および生成方法。{ph1} " +"コンストラクターは30秒の間隔と6桁を設定します。timestampメソッドは秒をブロック番号に変換します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} タイムブロック" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} キー+ブロック" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} 六桁" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "{ph0}時間はブロックを選択します。{ph1} 秒30から59までのすべてのブロックを与えます1. 60秒で、ブロックは2になります。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}重要なことも重要です。{ph1} ジェネレータは、アカウントキーとブロックを組み合わせます。 " +"別のキーを持つアカウントは、同時に別のコードを表示できます。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}六桁を維持します。{ph1} " +"1,000,000で除算した後の残りの部分は、必要に応じてゼロで埋められるため、コードは0で始めることができます。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"いくつかの検査方法からの抜粋、表示のためのラインラッピング。 右のパネルは説明的な要約です。 {ph0} " +"AegisコードはGPL-3.0です。{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "発電機の中" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"リリースされたAPKは {ph0} で {ph1}. REAはからの呼び出しに従います {ph2} 元のソースはヘルパーを呼び出します {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"最後のハッシュバイトが位置を選択します。 その位置にある4バイトは、正の31ビット数を提供します。フォーマットすると、要求された桁数に減少します。 " +"コンストラクタの最後の引数は、コンパイルによって導入されたコード書式分岐を選択します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}一致するリリースソースとの比較{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "再構築を確認する" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"選択したREA-返されたJavaメソッドを小さなテストプログラムで組み立てました。 彼らの出力は、上の独立した再構成に一致しました " +"{ph0}133件のテストケース{ph1}、タイムブロック境界とゼロで始まるコードを含みます。" + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "時間例" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "6桁のコード" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30秒" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109秒" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"ジェネレータは、公開されている六つのSHA-1リファレンスケースにも一致します {ph0}6238{ph1}. " +"それらに対するブラウザの実装を確認してください:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "参照チェックの実行" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "デモの計算を読む" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "参照ケースは8桁を使用します。 このチェックでは、6桁の結果も確認されます。" + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "検証は、抽出されたJavaメソッドと新しいデモを実行します。 Android APKは静的に検査されました。" + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "APKを自分で調べてください" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}REAのセットアップ {ph1} macOSまたはLinuxで、これら2つのファイルを同じフォルダーにダウンロードします。 " +"Windowsでは、WSLなどのLinux環境を使用します。" + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Android analysisには完全なJDK17以降が必要です。 で選択します。 {ph0} または {ph1}. " +"このケースはJDK21を使用していました。" + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "プロバイダーファイルでREAをポイントし、APKを検査します :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS/Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"エージェントは、上記のプロンプトを使用してREAのCLIを続行できます。 MCPのために、加えて下さい {ph0} " +"REAサーバーの環境に接続し、再接続します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "次の質問: {ph0}アカウントが8桁または異なる時間間隔を使用するとどうなりますか?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "ソース" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}公式Aegis3.4.3リリース{ph1} · {ph2}ソースコミットの一致{ph3} · {ph4}GPL-3.0ライセンス{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}RFC6238参照ケース{ph1} · {ph2}デモテストデータ{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"2026年10月9日にREA6.1.0で検査されました。 " +"逆コンパイルされた抜粋はAegisにクレジットされています;図,読みやすい要約とブラウザの再構成は、新しい教材です." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APKリバースエンジニアリング:ログインコード-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "Aegis Android APKをREAで検査し、その六桁のログインコード計算を回復し、調整可能なクロックで再構築を試してください。" + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APKケーススタディ" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "コピー Aegisプロンプトの例" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "ログインコードの計算に従ってください" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "コピー APK検査コマンド" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}ホーム{ph1} / {ph2}展示会のご案内{ph3} /CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "ケーススタディ·DownUnderCTF2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "で旗を見つける{ph0}CTFバイナリ。" + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "REAを使用して、小さなフラグチェッカーを検査し、そのルールを方程式に変換し、元のプログラムを印刷する入力を見つけます {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "マスクされた正方形の旗チェッカー*簡単·Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "オリジナルのチャレンジを見る" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "バイナリからチェックされた答えへ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01*チェックを見つける{ph1}{ph2}文字列→関数のチェック{ph3}{ph4} " +"REAは、プロンプト、その参照、および入力を受け入れるか拒否するコードを検索します。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02*ルールを抽出する{ph1}{ph2}36文字·26和{ph3}{ph4} REAは、各チェックの背後にある命令とデータを返します。 " +"エージェントはそれらを方程式に変えます。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03*解決して実行する{ph1}{ph2}回収フラグ→正解!{ph3}{ph4}Pythonスクリプトは方程式を解きます。 " +"REAは、結果を受け入れる元のプログラムをキャプチャします。{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "課題はjosephによるもので、DownUnderCTFの公式リポジトリに掲載されています。" + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "このケーススタディでは" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}チェックコードを見つける{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}1つのマスクを読む{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}読み取り可能なコードへのアセンブリ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}方程式を解く{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}答えを確認してください{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}自分で試してみてください{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "チェックコードを見つける" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"配布資料は15KBの実行可能ファイルです。 それはフラグを要求し、次に印刷します {ph0} または {ph1}. " +"あなたの代理店への簡単な要求から始めなさい。" + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "コピー" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用してms_flag_checkerを分析し、フラグを見つけます。 " +"チェックがどのように機能するかを説明し、元のプログラムで答えを確認します。{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "ローカルで利用可能なダウンロードされたチャレンジと接続されているマシンコードのプログラムプロバイダーの分析との例のプロンプト、。" + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "その機能に入力プロンプトに従ってください" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "この参照は、実行可能ファイルの元の関数名が削除されていても、エージェントに調査する場所を提供します。" + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "チェッカーとその2つのヘルパーを読む" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"最初のループは36文字コードをコピーします。 チェックループはマスクをデコードし、選択したコードを合計し、結果を格納された番号と比較します。 その " +"{ph0}-バイト-ステップ-アクロス {ph1} バイトは26個のマスクを与えます。" + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "これらは、新鮮なREA分析から選択された結果です。 アドレスはREAのインポートされたイメージを参照します。" + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "一つのチェックは、一つの文字を明らかに" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"チェッカーは入力を6×6グリッドに配置します。 マスクは、どのセルが合計に寄与するかを選択します。 " +"そのコンパクトなエンコーディングは、負の数を使用してセルをスキップし、正の数を使用してセルを選択します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "7番目のチェックでは、1つの位置のみが選択されます。 {ph0}オープンフィギュア{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "バイナリからマスクとそのターゲットを読み取ります" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"命令 {ph0} マスクバイトを符号付き値として読み取ります。 これが理由です {ph1} -21を意味します。 " +"ターゲットはリトルエンディアンの整数です。 一緒に、これらのバイトはエージェントに次のことを伝えます {ph2}、その文字は {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "指示から読み取り可能なチェックまで" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "加算ヘルパーとその呼び出し元をCの同じルールに接続するステップを選択します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} スタート" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} 選択" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} 追加" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} アドバンス" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} 比較" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA*選択されたオリジナルの指示" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "読み取り可能なC*ワンチェックの概要" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01*ゼロから開始します。{ph1} {ph2} 実行中の合計を保持します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "{ph0}02*マスクセルを確認します。{ph1} ゼロ値は文字をスキップし、ゼロ以外の値には文字が含まれます。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "{ph0}03*文字コードを追加します。{ph1} 同じオフセットの入力の整数が合計に追加されます。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "{ph0}04*次のセルに移動します。{ph1} 元のループは整数ごとに4バイト進み、6つのセルの6行を訪問します。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05*保存されたターゲットと比較します。{ph1} 呼び出し元は、合計を受信します {ph2}. ミスマッチがジャンプします {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "命令は、加算ヘルパーとその呼び出し元から来ています。 Cは、説明的な名前と平坦化された36セルループを持つ説明的な要約です。" + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "26の方程式を解く" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"ほとんどのマスクは複数のセルを選択します。 たとえば、最初のチェックでは16個の文字コードが追加され、合計1441個が必要です。 " +"重複する選択は、小さなPythonスクリプトが一緒に解くことができる方程式を与えます。" + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python*ソルバーの抜粋" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3は、これらの方程式を満たす値を見つけるソルバーです。 この抜粋は、抽出されたチェックを使用し、aを前提としています {ph0} " +"文字、数字、アンダースコアと中括弧を持つフラグ。 完全なダウンロードには、26個のマスクとターゲットすべてが含まれています。" + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "完全なソルバーをダウンロードする" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "元のプログラムで答えを確認してください" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REAのプロセスキャプチャは、解決されたフラグを受け入れる元の実行可能ファイルを記録します。 から選択した文字を変更する {ph0} に {ph1} " +"最初の合計を1441ではなく1440にし、プログラムはそれを拒否します。" + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "入力" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "観測された出力" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "終了コード" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "ソルバーの旗" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "一つの文字が変更されました" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "回収されたフラグとキャプチャされた出力を表示する" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA•オリジナルプログラム出力" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "フラグのコピー" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "回復された値は、バイナリを解決した後にチェックされた、主催者の公開されたチャレンジメタデータのフラグとも一致します。" + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "ソース、ターゲットの識別情報および分析の詳細" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"2026年10月8日に、REA4.1.0とGhidra12.1.4をLinux x64で使用して、新鮮な分析と2つのプロセスキャプチャを行いました。 " +"バイナリは削除されたx86-64ELF、15,248バイトです。" + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"文字列参照、関数、定数は、主催者のソースまたはソリューションを読み取る前に検査されました。 " +"Pythonソルバーとダイアグラムは、これらのREA結果から構築されました。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}主催者のソースと比較する{ph1} · {ph2}チャレンジメタデータとフラグ{ph3} · {ph4} REA証拠ノート{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "自分で試してみてください" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"元のチャレンジとソルバーを1つのフォルダにダウンロードします。 上記のプロンプトを使用してエージェントに調査するか、含まれているスクリプトを実行します。" + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "ターミナル*解決して実行" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"スクリプトは候補フラグを出力します。プログラムのプロンプトに貼り付けます。 ニーズを解決するPythonと {ph0}. " +"元の実行可能ファイルを実行するには、Linux x86-64が必要です。" + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "コーディングエージェントでREAをセットアップする" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "CTFリバースエンジニアリング:DownUnderCTFフラグチェッカー-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"REAを使用して、DownUnderCTFのマスクされた正方形のフラグチェッカーを解決します。 " +"チェック機能を見つけ、マスクを抽出し、復元されたフラグを元のプログラムと比較します。" + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "CTFフラグチェッカーのケーススタディ" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "CTFの例をコピーするプロンプト" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "CTFマスク方程式;小さな画面で水平にスクロール" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"第七のマスクは、21個のセルをスキップし、位置21を選択し、次に14をスキップします。 そのセルだけが合計に貢献します。 " +"必要な文字コードは55で、文字が7であることを意味します。" + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "CTFチェックに従ってください" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "CTFアセンブリのコピー" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "読み取り可能なCTFチェックのコピー" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "CTFソルバーの抜粋をコピー" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "回収フラグのコピー" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "CTFソルバーコマンドのコピー" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}ホーム{ph1} / {ph2}展示会のご案内{ph3} /DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "ケーススタディ•DX-Ball1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "DX-Ballの再構築 {ph0}その実行可能ファイルから。" + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "目標は、1996年のWindowsゲームの保守可能なCバージョンです。 REAは、エージェントが元の機能を一度に検査するのに役立ちます。" + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386*C·REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"実行可能ファイルからチェックされたC.REAまでの一つの関数は、命令、呼び出し元、およびデータ読み取りを提供します。 " +"{ph0}オープンフィギュア{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "このケーススタディでは" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}プロジェクト{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}サウンドパン{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}結果の確認{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}仕事を続ける{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "維持されたC関数" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "元のコードとの比較" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "コンパイルされたバイトに一致する関数" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "プロジェクトチェックポイント:2026年10月7日。 {ph0}進捗台帳{ph1} · {ph2}テストカバレッジ{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "これまでのプロジェクト" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"回収されたコードは、ボードとリソースの処理、レンガのヒット、アニメーション、パーティクル、ボーナスの生産をカバーしています。 " +"現在のビルドには、検査ユーティリティと分析ライブラリが用意されています。 " +"プレイ可能なゲームの作業は、ボールとパドルの物理学、パワーアップハンドリングとWindowsの統合を続けています。" + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "左/右の音の位置の計算を見つける" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"レンガがヒットすると、その水平位置がサウンドコードに渡されます。 調査は、その画面座標がどのように左/右パン値になるかを回復するために必要でした。" + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "コピー" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用して、DX-Ballがステレオサウンドの位置を計算する方法を見つけます。 " +"計算を説明し、コードを表示します。{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"ローカルの実行可能ファイルを使用して、コーディングエージェントのプロンプトの例を示します。 " +"以下の調査は、REAクエリと答えの背後にある証拠を示しています。" + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"エージェントはREAを使用して関数を検査し、ブリックヒット呼び出し元に従って実行可能ファイルから定数を読み取りました。 " +"これらの結果は、以下のC関数を書くのに必要な入力と算術を提供しました。" + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"の最初の関数の結果 {ph0} 擬似コード宣言が含まれています {ph1} と呼び出し {ph2}. " +"その命令ビューは、スタック入力と浮動小数点演算を示しました。 その不一致は、エージェントに調査を続ける具体的な理由を与えました。" + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "最初の逆コンパイラビュー" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "出力に変換呼び出しが表示されます。 以下の手順を読むと、入力とその呼び出しを供給する計算が明らかになります。" + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "REAを通じて答えた三つの質問" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "不足している入力を回復する" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"関数の結果には、擬似コードと呼び出し元と一緒に命令が含まれます。 ここに, {ph0} 逆コンパイラビューから欠落している整数入力を公開します。" + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "入力を理解するために発信者に従ってください" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REAは、最初の結果でこの呼び出し元を識別しました。 その前の指示はスケールします {ph0} 30で、20を追加すると、レンガの画面座標が得られます," +" {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "メモリアドレスの背後にある値を読み取る" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "返されるバイトは、2つの算術定数と初期パンスケールを確立します。 エージェントは、C式に必要な値を持つようになりました。" + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "REAの調査結果からCへ" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "以下の5つの手順に従ってください。 各選択は、元の指示と彼らが通知したC行を強調表示します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} 入力" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} 乗算" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} 減算" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} スケール" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} 戻る" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "オリジナルx86*抜粋" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "再構築されたC" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01*入力を読みます。{ph1} REAの関数結果の命令ビューは次のようになります {ph2} と使用 {ph3} 整数をロードする。 " +"REAを介して呼び出し元に続いて、Cパラメータの画面座標の意味を確立します {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02·1.5625を掛けます。{ph1} {ph2} でダブルを読み込みます {ph3}. REAによって返されるバイト数 {ph4} " +"にデコード {ph5};Cは同じ定数を使用します。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03·500.0{ph1} {ph2} でダブルを読み込みます {ph3}. REAのバイト結果は次のようにデコードされます " +"{ph4}、計算の中心を画面座標にシフトする {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04*保存されたスケールを適用します。{ph1} 第二の {ph2} 読みます {ph3}. そのグローバルは名前が付けられています " +"{ph4} 維持されたソースで。 REAの第二バイトの読み取りは、その初期値を確立します {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05*整数を返します。{ph1} での呼び出し {ph2} リーチ {ph3}、REAの呼び出し先の結果で識別されます。 " +"Cは結果を次のようにキャストします {ph4};original-x86比較は戻り値をチェックします。" + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"アセンブリの抜粋では、入力命令、算術命令、および戻り命令が選択されます。 " +"以下の完全なリストには、介入する店舗と機能のセットアップとクリーンアップも含まれています。" + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "完全なアセンブリおよび支持の証拠" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA結果·0x406400-0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "発信者が供給するもの" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "でのブリックヒット機能 {ph0} タイル座標を30でスケーリングし、20を加算してから、呼び出しの前にプッシュします:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "データが読み取るものが確立するもの" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REAバイト読み取り、リトルエンディアン倍精度としてデコード" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "住所" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "値" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "のために使用される" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "最初の乗算" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "引き算" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} 最初は" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "保存されたパンスケール" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "ハッシュピン付きDX-Ball1.07ターゲット用にREA4.1.0で記録されました。 リンクされた調査ノートには証拠Idが保持されます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "{ph0}維持されたソース{ph1} · {ph2}調査ノートおよび証拠の参照{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "復元された機能を確認する" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "復元された関数は、戻り値が元のものと一致し、コンパイルされたバイトが実行可能ファイルと一致するという2つのチェックを渡します。" + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3,205件" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"テストでは、元のx86関数を実行し、その戻り値を維持されたCと比較します。0、0.5、1、20、-1の5つのパンスケールで、0から640までのすべての整数位置をカバーします。" + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63一致するバイト" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"C関数は、ピン留めされたVC4.0ツールチェーンでコンパイルされます。 " +"コンパイラの再生は、レビューされた再配置を適用し、参照された定数を確認した後、完全な関数と一致します。" + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"スケールが1の場合、復元された計算では、左端に-500、中央に0、右端に500が返されます。 " +"オーディオ作業の次の部分は、その値をゲームのサウンドバックエンドと統合することです。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}コンパイラのリプレイの詳細を読む{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "調査を続ける" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"パーティクルの更新、爆発キュー、ボーナスの生成にも同じアプローチが使用されています。関連する関数を検査し、それらの状態と依存関係を回復し、実装を元のものと比較します。" + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"サウンドパン機能を自分で検査するには、DX-Ballプロジェクトのセットアップ手順に従って、一致する元のターゲットを指定します。 次に実行します:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "DX-Ballチェックアウトで" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "{ph0} DX-Ballリポジトリ{ph1}{ph2}現在のソース、進行状況、およびローカル設定。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "{ph0} REA分析ワークフロー{ph1}{ph2}計算に従ってから、独自のバイナリで同じアプローチを使用します。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "{ph0}パーティクルとボーナス生産{ph1}{ph2}状態、キュー、ピクセル書き込みに関するより大きな調査。{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ballリバースエンジニアリング:サウンドパン—REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"バイナリ解析からDX-Ball再構成をREAまで、維持されたC、元の-x86テスト、およびコンパイルされた関数バイトのマッチングに従ってください。" + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "DX-Ballサウンドパン調査;小さな画面で水平にスクロール" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL。EXE関数0x00406400はREAで検査されます。 " +"命令はxをロードし、1.5625を乗算し、500.0を減算し、pan_scaleを適用して整数を返します。 " +"維持されているCは、元のx86に対して3,205ケースで独立してチェックされ、VC4.0コンパイラによって63バイトに一致します。" + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball再構築ケーススタディ" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "プロンプトの例をコピーする" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "左/右の音の位置の計算に従ってください" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "元のアセンブリの抜粋をコピーする" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "コピー音-パン機能" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "完全な音パンアセンブリをコピーします。" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Copy DX-Ball解析コマンド" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}ホーム{ph1} /ショーケース" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REAケーススタディ." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "アンドロイド、ゲーム、ElectronとCTFの挑戦、コード、数字とチェックされた結果と。" + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "アンドロイド*APK分析" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "認証者がログインコードを生成する方法" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"リリースされたAPKでAegisの6桁のコード計算を見つけます。 " +"REAを使用して生成メソッドをトレースし、デモクロックを移動して、コードが30秒ごとに変更される理由を確認します。" + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Androidのケーススタディを読む" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF•マシンコードプログラムの分析" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "CTFフラグチェッカーを解決する" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"REAで簡単なダウンアンダーの挑戦を点検します。 " +"そのチェック機能を見つけ、マスクと合計を方程式に変換してから、元のプログラムで解決されたフラグを確認します。" + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "CTFのケーススタディを読む" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "ネイティブ-リコンストラクション" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ballの左/右の音の位置の計算" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"1996年のWindowsゲームから左/右の音の位置の計算を回復します。 " +"REAの命令、呼び出し元の参照、数値定数は小さなC関数につながり、元の動作と63のコンパイルされたすべてのバイトに対してチェックされます。" + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "DX-Ballのケーススタディを読む" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron•機能トレース" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "NotionがテキストとHTMLをどのようにコピーするか" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Notionのパッケージ化されたJavaScriptを介してページに面したAPIをトレースします。 " +"そのIPCラッパーに従ってシステムクリップボードに移動し、小さなHTMLマーカーが豊富なブロックデータをコピーに接続する方法を確認します。" + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Notionのケーススタディを読む" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS*再構成" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "どのようにTH04は弾丸のリングを目指していますか" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"REAを使用して元の16ビット角度ヘルパーを検査します。 " +"その乗算、除算、座標演算を読み取り可能なC++に一致させ、プレイヤーに向けたリングをどのように生成するかを確認します。" + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "TH04のケーススタディを読む" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "ステップバイステップガイド" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"ガイドは、ネイティブ計算、Electronエクスポート、およびブラウザ要求を順を追って説明します。 " +"それぞれがプロンプトと具体的なターゲットで始まります。" + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "ガイドを読む" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "リバースエンジニアリングのケーススタディ-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"コード、数字、デモを通じてREA調査に従ってください:Android認証器、DX-" +"Ball、Notion、TH04、およびDownUnderCTFフラグチェッカー。" + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}ホーム{ph1} / {ph2}展示会のご案内{ph3} /Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "ケーススタディ·Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "どのようにNotionコピー{ph0}テキストとHTML。" + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"NotionのページAPIから、プリロードとメインプロセスを介してElectronのクリップボードライターにクリップボード呼び出しをトレースします。" + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notionデスクトップ7.6.1·JavaScript*REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Notionのデスクトップパッケージ内のブリッジ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01*ページに直面するAPI{ph1} {ph2}{ph3}{ph4} {ph5}プリロードは呼び出し可能なメソッドを公開します。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02*プリロードラッパー{ph1} {ph2}{ph3}{ph4} {ph5}Wrapperはチャンネルと引数を送信します。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03*メインプロセスハンドラー{ph1} {ph2}{ph3}{ph4} {ph5}受信者は、どのページが送信されたかを確認します。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04*システムクリップボード{ph1} {ph2}{ph3}{ph4} {ph5} " +"Electronは、指定されたテキストとHTMLを書き込みます。{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "一つのチャネルは、二つの側面を結合します: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"パッケージ化されたコードは、プリロードプロセスとメインプロセスで同じチャネルを使用します。 " +"ラッパーを解決すると、これらの名前の背後にあるElectron呼び出しが明らかになります。" + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "このケーススタディでは" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}クリップボードブリッジに従ってください{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}ブロックの構造を維持する{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}より多くの例とソース{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "コピー操作はどこに行きますか?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"ページには、次のようなメソッドが表示されます {ph0}. プリロードでの実装はラッパーです。 " +"有用な質問は、そのラッパーが何を送信し、どのコードがそれを受信するかです。" + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "コピー" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用して、NotionがテキストとHTMLをシステムクリップボードにコピーする方法を追跡します。 " +"各ステップでコードを表示します。{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "コーディングエージェントが使用できるNotionのローカルアプリケーションパッケージを使用した例のプロンプト。" + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REAは、読み取りを開始する場所を検索します" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"REAを使用してタブプリロードを分析すると、ページに公開されているAPIとIPC要求を送信する呼び出しが検索されます。 " +"どちらの調査結果も、縮小されたバンドルのソース範囲が付属しています:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA調査結果→二つの場所を開く" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"新鮮なから選択されたフィールド {ph0} Notionのタブプリロードの結果、REA4.1.0で記録されました。 " +"ポジションは、元のバンドルのラインとゼロベースの列を使用します。" + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"エージェントはこれらの場所を開き、組み立てられたAPIでclipboardメンバーを見つけて、次のように {ph0}. そのコールサイトの供給 " +"{ph1}. この名前は、エージェントにメインバンドルで探すための正確な何かを与えます。 以下の4つの抜粋は、それが接続するルートを示しています。" + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "コードの4つの短い部分" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "パッケージ化されたJavaScriptから簡略化され、可読な変数名が付いています。 無関係なメンバーは省略されます。" + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "ページに公開されているAPIから開始します" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "このメンバーは、チャネル名を指定します。 の実装 {ph0} リクエストがページのプロセスからどのように離れるかを示します。" + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "プリロードのラッパーを解決する" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"返された関数は、Electronの要求と応答IPCを介して引数を転送します。 私たちは今、探すことができます {ph0} メインプロセス側。" + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "受信機の登録方法を確認する" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "メインプロセスは別のラッパーを使用します。 その {ph0} メソッドを登録します。 {ph1} そのチャンネルの受信機。" + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "書き込みとその送信者チェックを見つけます" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"これが目的地です。 送信者を確認した後、ハンドラーは提供されたデータをElectronのクリップボードAPIに渡します。 " +"チャネルと2つの解決されたラッパーは、公開されたメソッドをこの呼び出しに接続します。" + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "コピーされたブロックはどのようにその構造を保持しますか?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Notionのwebエディタは、テキストとHTMLを介して送信します {ph0}. " +"ブロックデータをローカルに保持し、コピーされたHTMLにIDを入れて接続します。" + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "保存されたブロックデータへのHTMLリンク" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "HTML IDを読み取る" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "同じローカルIDを検索する" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Notionブロックデータの復元" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "例示的なテキストとID。 記録されたモジュールテストでは、Idが一致するとブロックデータが復元されます。" + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "貼り付け時に、NotionはHTML IDを探し、保存されたコピーと照合します。 一致するIdは、ブロックデータを復元します。" + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "2026年7月13日にキャッシュされたwebアセットから記録されたクリップボード形式。" + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "より多くの例とソース" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "別の例:Markdownテーブル" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "NotionはMarkdownをブロックデータに解析します。 この例では、テーブルがヘッダー行とデータ行になる方法を示します。" + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "NotionのMarkdownパーサーを介したテーブル" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "抽出されたMarkdownパーサーからの出力を記録しました。 テーブルは行とセルになります。" + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "別のパス:オフラインSQLite接続" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Notionのレンダラリクエスト {ph0} IPCを介して。 " +"メインプロセスはメッセージチャネルを作成し、1つのポートをレンダラーに、もう1つのポートをSQLiteユーティリティプロセスに提供します。 " +"後続のステートメントのバッチと結果は、そのポート上を移動します。" + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"このハンドオフに続いて、データベース作業がどこで実行されるか、および最初のIPC要求のみをトレースすると後の会話が失敗する理由を説明します。" + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "出典と抜粋の読み方" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"クリップボードブリッジはNotionデスクトップ7.6.1から来ています {ph0}:タブのプリロードと {ph1}. " +"抜粋は、縮小された変数名を展開し、無関係なコードを省略します。sender-checkヘルパーは、その基礎となるもので表示されます {ph2} " +"呼び出します。" + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"仮想クリップボードとMarkdownの例は、モジュールを含む2026年7月13日にキャッシュされたwebアセットからのものです {ph0}, " +"{ph1}, {ph2} と {ph3}. これらのアセットには独自のバージョンがあります。 " +"保存されたプローブは、抽出されたモジュールと小さなハーネスを実行しました。" + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"ここに示されているREAの結果は、公開されたREA4.1.0パッケージで記録された、保存されたタブプリロードの集中分析です。 " +"これは、APIを検索し、操作を呼び出します。 クリップボードメンバーと一致する受信機は、パッケージ内のラッパー実装を読み取ることによって接続されます。" + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"Markdownの例では、パーサーモジュールを使用しています {ph0}. " +"保存されたモジュールのテストでは、ページフィルタとチャットフィルタの両方がこのテーブルを保持することが示されています。 " +"Paste/import、structured Markdown、AI/chatパーサーには、別々のエントリポイントと中間形式があります。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} " +"JavaScriptアプリケーションガイド{ph1}{ph2}小さなElectronアプリケーションのエクスポート機能に従ってください。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "{ph0} DX-Ball再構成{ph1}{ph2}チェックされたC関数へのネイティブの指示に従ってください。{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electronリバースエンジニアリング:クリップボード-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"短いコードの抜粋とその豊富なクリップボード形式を見て、Electronのプリロード、IPCラッパーとメインプロセスを通じてNotionのクリップボードAPIに従ってください。" + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electronケーススタディ" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Notion分析プロンプトのコピー" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "コピー Notionプリロード抜粋" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "コピー Notion呼び出しラッパーの抜粋" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Notionハンドラーラッパーの抜粋をコピーする" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "コピー Notionクリップボードレシーバー抜粋" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "貼り付け時に豊富なクリップボードデータを復元する" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "コンテンツにスキップ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}ホーム{ph1} / {ph2}展示会のご案内{ph3} /TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "ケーススタディ*東方4:蓮の国物語" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "TH04の再構築{ph0}弾丸のパターン。" + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "弾丸のリングは、短い角度の計算で始まります。 REAを使用して元のDOS関数を検査し、その指示に従って読み取り可能なC++に従います。" + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98*16ビットDOS·C++およびアセンブリ" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "TH04再構成を見る" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "元の指示からチェックされたソースへ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01*オリジナルゲーム{ph1}{ph2}メイン...EXE{ph3}{ph4}PC-98実行可能ファイルとそのbullet-" +"angleヘルパー。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02*REAと点検して下さい " +"{ph1}{ph2}説明書+参考文献{ph3}{ph4}ロードされたDOSコードを確認し、実行可能ファイルから角度計算を読み取ります。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "{ph0}03*C++を読む{ph1}{ph2}スペース→狙い→回転{ph3}{ph4}各操作を維持された再構成に接続します。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04*ソースを確認する{ph1}{ph2}一致するバイト数2,139件{ph3}{ph4}記録されたコンパイラチェックは、このヘルパーを含む箇条書き生成コードをカバーします。{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "REAは、元のコードとその分析証拠を返します。 TH04プロジェクトは、保守されたソースとコンパイラのチェックを提供します。" + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "このケーススタディでは" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}弾丸のリング{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}REAが返すもの{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}C++へのアセンブリ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}ソースの確認{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}完全なプロジェクト{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "リングがプレーヤーをどのように狙うか" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"エリーの攻撃は、最初のカウント16の目的としたリングを要求します。 一つのヘルパーは、各弾丸の方向を計算します。 " +"同じリングは、固定方向に直面したり、プレイヤーに向かって回すことができます。" + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}あなたのコーディングエージェント" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "コピー" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用して、TH04が弾丸のリングを作成し、プレイヤーにそれを向ける方法を見つけます。 " +"計算を説明し、コードを表示します。{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "元の実行可能ファイルと再構築チェックアウトがローカルで利用可能なプロンプトの例。" + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04は256の角度の単位で完全な右回りの回転を貯える。 16箇条書きの場合、各インデックスには16単位が追加されます: {ph0}. " +"プレイヤーの方向を追加すると、それらの位置が一緒に回転します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "カウント16、プレイヤーの方向40、およびテンプレートの回転0のための回収された角度の数学の図。 {ph0}オープンフィギュア{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "回収されたソース内の発射テンプレート" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "エリーのリングアタック·ソース抜粋" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "これらの行は、難易度とパフォーマンスチューニングの前にパターンを選択します。 {ph0}攻撃のソースを読む{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "REAが返すもの" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"私達は点検します {ph0}、各弾丸の速度と角度を設定する関数。 REAは、その命令、擬似コード、および参照を返します。 " +"その結果の3つの部分がパターンを説明しています。" + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "コードを読む前にDOSイメージを確認してください" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "このチェックは、ロードされたコードと再配置レコードを提供された実行可能ファイルに関連付けます。 上記のパスは表示のために短縮されています。" + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "リングの乗算と除算を読む" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} 箇条書きのインデックスを保持します。 シフトはそれに256を乗算し、除算はから読み取られたカウントを使用します {ph1}. " +"そのフィールドに保持されているソース名 {ph2}. 完全なシーケンスが以下に表示されます。" + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "パターンがプレイヤーに向かって回転する場所を見つける" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"命令オペランドは、2つの座標差と方向ヘルパーを公開します。 その戻り値は相対的なリング角度に追加されます。 " +"REAは、エージェントがそれらの背後にある元の操作をチェックすることができます。" + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "アセンブリから読み取り可能なC++へ" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "元の指示と角度の計算に一致するステップを選択します。 完全なソースは、スプレッド、スタック、ランダムパターンも処理します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} インデックス" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} スペース" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Aim" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} 回転" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} 店舗" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA•オリジナルの16ビット命令" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "-----------" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01*箇条書きの索引を読みます。{ph1} Stack引数は次の場所にロードされます {ph2}. " +"16箇条書きのリングでは、このメンバーインデックスは0から15まで実行されます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02*フルターンの周りの方向をスペースします。{ph1} {ph2} 256で乗算します。 カウントはゼロです-単語に拡張され、その後 " +"{ph3} 積をその数で除算します。 カウント16の場合、各インデックスは16の角度単位を進めます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03*プレイヤーの方向を追加します。{ph1} 2つの減算は、プレーヤーマイナス原点座標を形成します。 方向ヘルパーは、角度を返します " +"{ph2};それを追加すると、リング全体がプレイヤーに向かって変わります。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04*パターンの回転を追加します。{ph1} {ph2} テンプレートの角度を追加します。 " +"Ellyの初期テンプレートはそれをゼロに設定します;他のパターンは回転で同じヘルパーを使うことができます。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05*最終的な角度を1バイトに保ちます。{ph1} 店は書いています {ph2} spawn-angleフィールドに移動します。 " +"値は、符号なしバイトのキャストと同じように、255の後に折り返します。 周囲のソースもこの角度と速度を速度に変換します。" + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"アセンブリは目的とされたリング枝、目的の計算および最終的な店を選ぶ。 上記のC++は読みやすい要約です。 " +"以下のコンパイラチェックは、リンクされたプロジェクトの保守されたソースに適用されます。" + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "リングを読み、ソースを目指してください。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "{ph0}リングマクロ{ph1} · {ph2}目的および速度の源{ph3} · {ph4}角度表現{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "保守されたソースの確認" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"TH04プロジェクトの記録されたチェックは、このヘルパーを含む箇条書き生成コードを、固定されたTurbo " +"C++4.0Jツールチェーンでコンパイルします。" + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "一致するバイト数2,139件" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "コンパイルされた箇条書き生成コードは、元の実行可能ファイルの2,139バイトのセクションに一致します。" + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "二つのクリーンビルド" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "2つの別々のビルドでは、同じ一致するバイトが生成されます。 記録された入力ハッシュは、ここに示されている維持されたソースと一致します。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "2026年10月3日に録音されました。 {ph0}コンパイラチェックを読む{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "ターゲットidと分析範囲" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "元のターゲット" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}、156,258バイト、DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "ヘルパーエントリー" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} REAのロードされたイメージで" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "元のファイルオフセット" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}、によって返される {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "記録されたコード検査" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA4.1.0•2026年10月7日" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"コンパイラチェックは、このヘルパーを含む完全なbullet-add codeセクションをカバーしています。 " +"彼らはまた、そのマップの貢献と重複した再配置を比較します。" + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REAは負荷セグメントで静的DOS負荷イメージを検証しました {ph0}. そのアドレスは、その分析画像を記述します。 " +"関数の結果は、517バイトのスパンにわたって2つの範囲で503のボディバイトを報告します。上記の選択された命令は、それらの報告された範囲にあります。" + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"ソース名とコンパイラチェックはTH04チェックポイントから来ています {ph0}. このページでは、同じ元のターゲットの新しいREA検査を追加します。 " +"提供されたゲームのアイデンティティは、リポジトリマニフェストによって固定されており、独立した原始的なダンプの出所はまだ開いています。" + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"図は角度の計算を示しています。 " +"完全なゲームコントロール、タイミング、およびPC-98ハードウェアの動作には、再構築プロジェクトで別々のランタイムチェックがあります。" + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "フルTH04の再構成" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"このプロジェクトは、維持されたC++とアセンブリからゲームの4つのDOS製品を構築します。 " +"弾丸の生成を超えて、ソースはステージ、ボス、レンダリング、入力、メニュー、エンディングとスコアの処理をカバーしています。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}TH04リポジトリを探索する{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "{ph0}箇条書き生成ソース{ph1}{ph2}完全なヘルパー、他のパターンタイプとテンプレートチューニング。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}DOSビルドと実行ガイド{ph1}{ph2}ソースをビルドし、プロジェクトのPC-98エミュレーターのワークフローでテストします。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "{ph0}現在のプロジェクトの状態{ph1}{ph2}DOS検証と別のネイティブx64ポート。{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04リバースエンジニアリング:DOS弾丸パターン-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"TH04のREAの元の16ビットDOSコードを点検して下さい。 " +"アセンブリと回収されたC++に従って、弾丸のリングがどのように間隔をあけてプレイヤーに向けられているかを確認します。" + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "このページでは" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04弾丸パターンのケーススタディ" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "コピー TH04プロンプトの例" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "TH04固定および目的とした弾丸リング;小さな画面で水平にスクロールします" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"16弾のリングの2つの図。 固定リングは角度ゼロから始まります。 " +"40のプレイヤーの方向を追加すると、すべての方向が同じ量だけ回転します。強調表示された最初の箇条書きは、プレイヤーに向かって指します。 " +"どちらも16角度単位、つまり22.5度の間隔を保ちます。" + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "コピー TH04発射テンプレート" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "TH04の目的としたリング計算に従ってください" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "コピー TH04アセンブリの抜粋" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "コピー読み取り可能な目的のリング計算" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "ページ上部へ" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "コピー" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "コピーされた" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "選択された" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "クリップボードにコピーされたコード。" + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "コードが選択されています。 キーボードを使ってコピーします。" + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA上のGitHub({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "距離 {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "サボテンを打つ。 別の速度を試してみてください。" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "スペースまたはジャンプ¶" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "再びプレイ" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "スタート" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "一時停止" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "プレスプレイは、その後、サボテンの上にジャンプします。" + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "サボテンを打つ。 もう一度再生を押すか、速度を変更して再起動します。" + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "走っている。 スペースまたはジャンプはサボテンをクリアします。" + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "一時停止しました。 続行するには、[再生]を押します。" + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "固定速度: {speed}. スペースまたはジャンプはサボテンをクリアします。" + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "固定速度: {speed}. プレイを押して試してみてください。" + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "回復されたルール:6から開始し、13に向かって増加します。" + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "固定速度: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "復元されたルールを再生しました。 4つの値はすべて、小数点以下3桁に丸められたときに制御されたオリジナルゲームのチェックと一致します。" + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "リプレイは、記録されたオリジナルゲームの値とは異なります。 上記の速度ルールと設定を比較してください。" + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} 秒" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} 秒、時間ブロック {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "このブラウザでは、対話式計算は使用できません。 この例では、59秒のコードを示しています。" + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "チェック…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "{passed} / {total} チェックが渡されました(6つの参照ケース、6桁と8桁)。" + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "参照チェックを実行できませんでした。 もう一度やり直してください。" + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "コンピュータで考えるアナリスト" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "一つのチェックは、一つの文字を明らかに" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"第七のマスクは、six by six入力グリッド内の位置21のみを選択します。 その文字コードは55に等しくなければならないので、文字は7です。 " +"他のマスクは異なる位置を選択し、さらに方程式を与えます。" + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "第七のチェック。 セルラベルは0から始まる入力位置です。" + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "エンコードされたマスク:-21,+1,-14,0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "21セルをスキップします。 1を選択します。 スキップ14。 0で停止します。" + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "この合計に寄与するセルは1つだけです" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "旗の位置21には7が含まれている必要があります。" + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "選択された:1つのセル" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26個のマスクは26個の方程式を与える。" + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "フラグを見つけるために一緒にそれらを解決します。" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ballサウンドパン調査" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REAは、1つのDX-Ball関数の命令、呼び出し元、およびバイト読み取りの証拠を提供します。 " +"スタック入力は、1.5625を乗算し、500をオフセットし、スケーリングして整数に変換されます。 " +"Cは3,205個のオリジナル-x86ケースと63バイトのコンパイラ-リプレイでチェックされている。" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "スタック" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "入力 x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "整数" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "返す" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "復元した関数" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "保守可能な C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "衝突時の呼び出し" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "元のコード" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "比較" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3,205 件" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "VC4.0 ビルド" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 バイト一致" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA調査の流れ" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"ローカルターゲットについて質問します。 " +"REAは、ローカル分析アダプタを介して検査およびトレースし、証拠を返し、エージェントが説明、実装、テストする際にフォローアップの質問をサポートします。" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. 質問" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "エージェント + 対象" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "アプリ / バイナリ / Web" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. 調査と追跡" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. 根拠を読む" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "コード / 参照 /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "不明点" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. 結果を使う" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "エージェント" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "説明 / 実装 / テスト" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "分析ツール" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "ローカル分析アダプター" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "追加の質問" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04:弾丸のリングの間隔と照準" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"完全な右回りの回転に256の角度の単位がある。 十六弾は、240を介して、角度ゼロ、十六、三十から二から始まります。 " +"四十の例のプレイヤーの方向を追加すると、すべての十六方向が一緒になります。 テンプレートの回転はゼロです。" + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "固定リング" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "第一弾:アングル0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "目的としたリング" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "第一弾:プレイヤーの方向性" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "原点" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "プレーヤー" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "同じ間隔:256÷16=16角度単位=22.5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "事例" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "ブログ" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "はじめる" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "ガイド" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "ソースコード" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "MIT ライセンス" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "コミュニティに参加" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "X でフォロー" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA*選択したスクリプトソース" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "ソースコード" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "期待されるフォーマッタ出力" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "説明書" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "発信者" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "定数" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "C関数" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "ボタン" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "プリロードAPI" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSVファイル" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "あなたのかちりと言う音" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "キャプチャリクエスト" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "エクスポートスクリプト" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA結果·概要。ipc抜粋" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA命令の抜粋·0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA発信者の抜粋*0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "REAバイトの結果·リトルエンディアンの倍精度として解釈されます" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "回収されたC*抜粋" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "REA の使い方を見る ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "セットアップガイド" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "ショーケース→" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "検査されたスクリプトから選択された設定" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "%ハンドラーの読み取り可能な要約" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA*選択されたオリジナルの指示" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "オペレーター Id·Microsoftのソース" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Xの@reatoolsに従ってください" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "エージェント→REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA→エージェント*選択された結果" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA→エージェント*メソッドと呼び出し元" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA*選択された逆コンパイルされたJava" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "読みやすい要約*エージェントの解釈" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA*generateOTP、完全なボディ" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "ダウンロードAegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Android分析プロバイダーをダウンロード" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "エージェント→REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA→エージェント*選択された結果" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA→エージェント*選択された指示" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "エージェント→REA*read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA→エージェント·セブンスエントリ" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "オリジナルの実行可能ファイル·SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "オリジナルの挑戦をダウンロード" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "ソルバーをダウンロード" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA結果*擬似コードの抜粋" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "エージェント→REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA→エージェント*命令抜粋" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA→エージェント*発信者の抜粋" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "エージェント→REA·2 {ph0} ご要望-ご要望" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REAバイト結果*ダブルとしてデコード" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "あなた自身のターゲットから始めて下さい" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "コードの生成" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "回復されたルール" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "調節可能な時計" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "バイナリ" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "コードの確認" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "方程式" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "正解!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "実行可能ファイル" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA調査結果" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "回収されたC" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "検証" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "パッケージ化されたアプリ" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "公開されたAPI" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "IPCラッパー" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "クリップボード" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "元のDOSコード" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA命令" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "角度計算" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "弾丸リング" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "公開されたページAPI" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "レンダラIPCコール" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "システムのクリップボードに送信されます" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Notionによってローカルに保存されます" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "マークダウン入力" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "構造化パーサー出力*抜粋" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "独自のアプリを分析する" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "エージェント→REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA→エージェント·選択されたフィールド" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "エージェント→REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA→エージェント*命令抜粋" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "同じ機能結果-目安抜粋" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "対応c++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "リングマクロ·TH04ブランチ、抜粋" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "角度と速度·ソース抜粋" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "%を押して、10に何が起こるかを確認します。" + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "200の10%は20です。 =を押して追加します。" + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "乗算の場合、10は0.1になります。 =を押して乗算します。" + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "翻訳が更新されています。 今のところ英語でこのページを読んでください。" + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用して分析する {ph3} データをエクスポートする方法を説明します。 " +"関連するコードとソースの場所を表示します。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3} を使って REA " +"をインストールし、このコーディングエージェントに接続してください。まず変更内容を提示し、私が承認してから実行してください。その後、インストールを確認してください。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}ダウンロード {ph3} 新しいサンプルフォルダに解凍します。 " +"REAを使用して、[ノートのエクスポート]をクリックしたときに何が起こるかを確認します。 どこに表示しますか {ph4} " +"が書き込まれ、どのフィールドが含まれているか、関連するファイルと行が書き込まれます。{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3} を使って REA " +"をインストールし、このコーディングエージェントに接続してください。まず変更内容を提示し、私が承認してから実行してください。その後、インストールを確認してください。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3} を使って REA " +"をインストールし、このコーディングエージェントに接続してください。まず変更内容を提示し、私が承認してから実行してください。その後、インストールを確認してください。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用して検査する {ph3}. 私のためにこのウェブサイトを複製します。{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "復興 · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "と {ph0} と npm 利用可能で、セットアップを実行し、コーディングエージェントを選択し、提案された変更を確認します。" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "提供された例*{ph0}とnpm*コーディングエージェント" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"次のようなコーディングエージェントを使用します Claude Code, Codex または Cursor. あなたが必要になります {ph0} と " +"npm;ザ- {ph1}セットアップガイドサポートされているバージョンの一覧{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "{ph0}ページ · {ph1}{ph2}{ph3}ノートのエクスポート{ph4}{ph5}コール {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "{ph0}橋 · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}名前付きメッセージをメインプロセスに送信します。{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}ハンドラー · {ph1}{ph2}{ph3}書き込み {ph4}{ph5}{ph6}でフォーマッタを呼び出します {ph7} " +"そして、ファイルを書き込みます。{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} *8-12行目" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Id1とタイトルを持つノートのCSVを予測します {ph3}. 次に、例を実行します {ph4} とのフォーマッタ " +"{ph5} それを確認する。 予測と実際の出力を表示します。{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "タイトルは引用符で囲まれた1つのフィールドにとどまり、各引用符は2倍になります。 これはフォーマッタを直接チェックします {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV フォーマッタ" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "あなたが必要になります {ph0} 22 (22.19+), 24 (24.11+) または26+。 npmはと来ます {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "持っていない {ph0}、またはわからない?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"もし {ph0} 印刷v22.19+、v24.11+またはv26+、準備が整いました。 " +"古いバージョンまたは\"認識されません\"/\"コマンドが見つかりません\"を印刷する場合は、インストールします {ph1} 24LTS:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} ·ソースの抜粋の例" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "{ph0}例を開きます{ph1} · {ph2}ダウンロード {ph3}{ph4} · {ph5}ダウンロード {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} ·ソースの例" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"例をダウンロードして解凍します。 アーカイブには完全なものが含まれています {ph0} フォルダ。 それを分析する {ph1} と npm; " +"Electron この例では必要ありません。" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"初めて、または行方不明 {ph0} またはコーディングエージェント? {ph1}ステップバイステップセットアップガイドに従ってください→{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "例えば:{ph0}なぜ電卓で {ph1} を計算すると 220 になる?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用してWindows計算機を検査します。 なぜですか {ph3} " +"220を与えますか?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA·ロード {ph0} *選択した行" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"私たちはなぜ見ましたか {ph0}{ph1} 220を与えます。{ph2} それでは、+と×の両方のルールを回復し、それらを試してみましょう。" + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01*REA読み取り {ph1}{ph2}{ph3}電卓アプリを起動します{ph4}{ph5}コードが開きます {ph6}. " +"次に、エージェントはインストールされているアプリのライブラリを選択します。{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}REAを使用してaegis-v3.4を検査します。{ph3}. " +"6桁のログインコードを生成する方法を見つけ、30秒ごとに変更する理由を説明し、時間を変更できる小さなデモを再構築します。{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0}-APIメンバー" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0}*IPCヘルパー" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "メイン/{ph0} *ハンドラーヘルパー" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "メイン/{ph0} *クリップボード受信機" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "再構築·ディノ-スピード.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "と Node.js と npm 利用可能で、セットアップを実行し、コーディングエージェントを選択し、提案された変更を確認します。" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "提供された例*Node.jsとnpm*コーディングエージェント" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "次のようなコーディングエージェントを使用します Claude Code, Codex または Cursor. あなたが必要になります Node.js と" +#~ " npm;ザ- {ph0}セットアップガイドサポートされているバージョンの一覧{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "{ph0}ページ*レンダラー。js{ph1}{ph2}ノートのエクスポート{ph3}{ph4}コール {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "{ph0}橋*前荷。js{ph1}{ph2}{ph3}{ph4}{ph5}名前付きメッセージをメインプロセスに送信します。{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}ハンドラー*メイン。js{ph1}{ph2}メモを書きます。csv{ph3}{ph4}でフォーマッタを呼び出します {ph5} " +#~ "そして、ファイルを書き込みます。{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}を予測する CSV ノ身分を証明するものの提示が必要1名こんにちは,\"REA\". " +#~ "次に、例のtoCsvフォーマッタを次のように実行します Node.js それを確認する。 予測と実際の出力を表示します。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "タイトルは引用符で囲まれた1つのフィールドにとどまり、各引用符は2倍になります。 これはフォーマッタを直接チェックします Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV フォーマッタ" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "あなたが必要になります Node.js 22 (22.19+), 24 (24.11+) または26+。 npm が付属しています Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "持っていない Node.js、またはわからない?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "もし {ph0} 印刷v22.19+、v24.11+またはv26+、準備が整いました。 " +#~ "古いバージョンまたは\"認識されません\"/\"コマンドが見つかりません\"を印刷する場合は、インストールします Node.js 24LTS:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}例を開きます{ph1} · {ph2}エクスポートをダウンロードします。js{ph3} · " +#~ "{ph4}ノートをダウンロードします。json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "例をダウンロードして解凍します。 アーカイブには完全なものが含まれています {ph0} フォルダ。 それを分析する Node.js と npm; " +#~ "Electron この例では必要ありません。" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "初めて、または行方不明 Node.js またはコーディングエージェント? {ph0}ステップバイステップセットアップガイドに従ってください→{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "例えば:{ph0}なぜ電卓で 200 + 10% を計算すると 220 になる?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用 REA 検査するには Windows 電卓。 " +#~ "なぜ200+10%が220を与えるのですか?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "私たちはなぜ見ましたか {ph0}200+10%与えます220.{ph1} それでは、+と×の両方のルールを回復し、それらを試してみましょう。" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA calcを読み込みます。exe{ph1}{ph2}電卓アプリを起動します{ph3}{ph4}コードが開きます {ph5}. " +#~ "次に、エージェントはインストールされているアプリのライブラリを選択します。{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用 REA aegis-v3.4.3を検査する。------- " +#~ "6桁のログインコードを生成する方法を見つけ、30秒ごとに変更する理由を説明し、時間を変更できる小さなデモを再構築します。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/preload.js-APIメンバー" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/preload.js*IPCヘルパー" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "メイン/インデックス。js*ハンドラーヘルパー" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "メイン/インデックス。js*クリップボードレシーバー" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "メイン...js·8-12行目" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "輸出します。js·ソースの例の抜粋" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "レンダラーjs·ソースの例" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "プリロードjs·ソースの例" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "メイン...js·ソースの例" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA·ロードされたインデックス。js*選択した行" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用 REA /absolute/path/to/appを分析し、データをエクスポートする方法を説明します。 " +#~ "関連するコードとソースの場所を表示します。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}インストール REA を使ってこのコーディングエージェントに接続し、 npx rea-エージェント@最新のセットアップ." +#~ " 承認のためのセットアップ計画を表示し、インストールを確認します。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ダウンロード https://rea.tools/examples/notes-example.zip " +#~ "新しいサンプルフォルダに解凍します。 使用 REA 私はエクスポートノートをクリックしたときに何が起こるかを見つけるために。 " +#~ "どこにノートを表示します。csvが書き込まれ、それに含まれるフィールド、および関連するファイルと行が書き込まれます。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}インストール REA を使ってこのコーディングエージェントに接続し、 npx rea-エージェント@最新のセットアップ." +#~ " 承認のためのセットアップ計画を表示し、インストールを確認します。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}インストール REA を使ってこのコーディングエージェントに接続し、 npx rea-エージェント@最新のセットアップ." +#~ " 承認のためのセットアップ計画を表示し、インストールを確認します。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用 REA 検査するには https://rea.tools/. " +#~ "私のためにこのウェブサイトを複製します。{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "コード[21]=55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "×パンスケール" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}リバースエンジニアリング何でも{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/ko/messages.po b/website/locales/ko/messages.po new file mode 100644 index 000000000..49b34879b --- /dev/null +++ b/website/locales/ko/messages.po @@ -0,0 +1,12519 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}홈{ph1} /블로그" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "블로그" + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "리버스 엔지니어링에 대한 생각." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "게임 재구성{ph0}에세이" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "리버스 엔지니어링의 산업 혁명" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "어떤 매뉴얼 다시고 재구성TH08,TH095및TH04에 대해 가르쳐 에이전트,검증 및 지는 화합물에 걸쳐 프로젝트입니다." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "기사 읽기" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "여N0zoM1z0·10 월 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} 상단" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA블로그—에 대한 생각을 리버스 엔지니어링" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "리버스 엔지니어링에 대한 생각,실제 경험을 바탕으로 REA 그리고 인공지능 요원들도" + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "REA -소프트웨어가 어떻게 작동하는지 알아보십시오. 코딩 에이전트로 리버스 엔지니어링." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "REA 홈" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "주 메뉴" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "GitHub에서 REA 보기" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "REA Discord 참여" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "X에서 REA 팔로우" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}홈{ph1} / {ph2}블로그{ph3} /동방 재건" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "에세이*동방 재건" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "리버스 엔지니어링의 산업 혁명." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "여N0zoM1z0·10 월 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "핵심 요점" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}조사에 대해 에이전트에게 자율성을 부여합니다.{ph1} 명확한 목표와 수용 기준을 설정 한 다음 에이전트가 다음에 무엇을 " +"시도할지 결정하게하십시오." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}저장소 및 자식을 작업 메모리로 사용하십시오.{ph1} 코드와 함께 추론을 유지. 자식 체크 포인트는 대화가 끝난 후 다음 " +"세션이 계속 할 수 있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}증거가 당신이 주장하는 것을 결정하게하십시오.{ph1} 자신감 있는 설명은 여전히 테스트가 필요합니다. \"알 수 없음\"은 " +"증거가 불완전 할 때 유효한 답변입니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}검증 참조(오라클)도 테스트하십시오.{ph1} 거부해야 할 경우를 시도하십시오. 이 버그를 놓친 경우,그것에 의존 이전 결과를 " +"다시 방문하십시오." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}우리는 산업혁명의 초기 단계에 있습니다.{ph1} 그 방법들은 여전히 형성되고 있습니다. 탐험 할 것이 많이 남아 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "어떻게 경험 화합물" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}인간의 방향{ph1} *목표 및 수용 기준" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "자율성" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "에이전트" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "실험을 선택하십시오.{ph0}가설을 제안합니다." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "검증" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "검증 기준" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "에 대한 테스트{ph0}구체적인 참조." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "저장소" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "작업 기억" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "코드,증거,{ph0}수표 및 수업." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "불일치{ph0}{ph1}가설 수정{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "더 나은{ph0}{ph1}시작 지점{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "재사용" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}패스{ph1} *결과 및 증거 유지" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "각 프로젝트는 더 나은 출발점으로 다음 프로젝트를 떠납니다. 그것은 우리가 간격을 발견할 때 체크를 고치는 포함한다." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "이 기사 에서" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}2026 년 8 월{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0}TH08:계속{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}두 가지 접근법{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0}TH095:합성{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0}TH04:아키텍처 전반에 걸쳐{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}정확한 것부터 읽을 수있는 것까지{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}산업 변화{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}가능한 것{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "2026 년 8 월에 변경된 사항" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"이 작업을하기 전에 수동 리버스 엔지니어링을 많이했습니다. 나는 설명이 될 때까지 함수를 검사 한 다음 그 설명을 프로그램에 대해 테스트" +" 할 것입니다. 더 얻는 것은 다음 기능에 내 자신의 시간을 더 많이 보내는 것을 의미했습니다. 그것은 또한 내 머리 속에 점점 더 큰 " +"그림을 유지하는 것을 의미했습니다." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"내 재 작업의 대부분은 게임에. 나는 그들의 행동을 이해하고 결국 소프트웨어 포트 또는 모드로 운반 할 수 있도록 재구성합니다. 즉,이 " +"문서의 뒤에 경험이다. 이 방법은 다른 곳에서 유용 할 수 있지만 각 필드는 신뢰할 수있는 참조에 대해 확인할 수있는 것을 " +"설정해야합니다." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"8 월 2026 에서 에이전트 중심의 재를 진지하게 탐구하기 시작했습니다. 나는 에이전트가 프로그램 및 일반 개발 도구에 액세스 할 " +"수있는 방법을 멀리보고 싶었다. 동방 재건은 저에게 알아낼 수 있는 상당한 프로젝트를 주었습니다." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"초기 진전은 놀라웠습니다. 조사는 내가 모든 개별 단계를 선택하지 않고 계속 움직일 수 있습니다. 실패한 비교는 에이전트를 다른 호출 " +"함수로 보낼 수 있습니다. 그것은 작은 진단을 작성하고 그 결과를 사용하여 다음에 무엇을 시도할지 결정할 수 있습니다. 그 자유를 주는 " +"것은 변화를 가져왔습니다.저는 프로젝트의 방향과 그 수표가 신뢰할 수 있는지에 더 많은 관심을 기울일 수 있었습니다." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"속도는 먼저 내 관심을 얻었다. 그런 다음 현재 프로젝트를 넘어 생존 할 것이 무엇인지 궁금해하기 시작했습니다. 다음 게임은 우리가 방금" +" 배운 모든 것에서 이익을 얻을 수 있습니까?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08:건물에서 인간의 작업" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0}TH08{ph1},불멸의 밤,의 연속으로 시작 {ph2}GensokyoClub의 재건{ph3}. 그들의 공개 소스는 나에게 " +"상당한 기초를 주었다. 그것은 건물의 지식과 내가 계속에서 보존 한 기여의 역사와 함께 왔습니다." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"수입된 역사는 8 월 10 일 공공 검문소에서 끝납니다. 나의 독립적 인 연속은 8 월 13 일에 시작되었습니다. 8 월 19 " +"일까지,원장은 1,107 개의 확인된 게임 기능에 대한 소스를 기록했습니다." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"재생 가능한 Linux 재건 항구는 계속이 시작된 지 약 11 일 후인 8 월 24 일에 착공되었다. 웹 에디션이 이어졌습니다. 원주민 " +"Linux 64 비트 릴리스는 8 월 30 일에 도착했다." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"저를 놀라게 한 것은 그 작업이 사람들이 실행할 수 있는 프로그램에 도달했다는 것입니다. 거기에 도착하는 것은 개별 기능을 넘어 다음과 " +"같은 문제가 필요했습니다. 두 함수가 분리되어 올바르게 보였을 때에도,그들은 우연히 공유되어야 할 상태의 별도의 복사본을 사용할 수 " +"있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"이것은 참조 검사를 작업의 중심으로 만들었습니다. 나는 그들을 부른다 {ph0}검증 참조(오라클){ph1}. 코드 비교를 통해 재구성된 " +"함수가 원래의 명령어를 재현하는지 알 수 있습니다. 런타임 검사는 실행된 경로가 예상 상태에 도달하는지 여부를 알려줍니다. 에이전트는 " +"설명을 제안하고 테스트합니다.불일치로 인해 조사할 수 있는 특별한 것이 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "잘못된 상수와 정확히 일치" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "오라클은 누군가가 쓴 소프트웨어입니다. TH08 그 소프트웨어에 얼마나 의존 할 수 있는지에 대한 명확한 알림을주었습니다." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"9 월,다운스트림 스위치 포트에서 보고된 버그로 인해 아이템 자동 수집이 다시 시작되었습니다. 재구성된 소스는 플레이어의 힘을 " +"{ph0}. 원래 사용 {ph1},최대 전력 임계값." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"정상적인 전력은 음이 아니므로 재구성된 전력 검사는 항상 효과적으로 만족되었습니다. 수집 라인 위에,게임은 최대 전력을 필요로하지 않고 " +"아이템을 유치 할 수 있습니다. 조건의 다른 예외는 정확했습니다. 이 상수는 동작을 변경했습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}그러나 함수는 이미 정확한 비교를 통과했습니다.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"재구성은 다른 주소에 상수를 넣을 수 있습니다. 비교 도구는 컴파일된 명령어의 주소를 원본과 비교하기 전에 조정함으로써 이를 " +"설명했습니다. 그러나 참조 된 주소에 저장된 부동 소수점 값을 확인하지 않았습니다." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"수표에 구멍이 남았어요 그것은 원래의 재구성 된 명령을 가리킬 수 있습니다 {ph0} 소식통은 여전히 {ph1}. 명령어 바이트가 " +"일치했습니다. 소스는 뭔가 다른 것을 의미했습니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"그 {ph0}9 월 2 일 수정{ph1} 소스를 수정하고 비교 확인 참조 상수의 실제 바이트를했다. A {ph2}더 넓은 감사{ph3} " +"그런 다음 1,548 개의 부동 소수점 상수 참조를 조사했습니다. 5 개의 허용된 함수에서 12 개의 잘못된 참조를 발견했습니다." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"비교는 이제 모든 부동 소수점 상수를 확인합니다. 테스트에는 의도적으로 잘못된 값이 포함되어 거부되었는지 확인합니다. 우리는 또한 약한 " +"검사를 통과 한 결과를 재검토해야했습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "{ph0}검증 참조(오라클)도 재구성해야 했습니다.{ph1} 그것을 수리하는 것은 게임 수리의 일부였습니다." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"팀이 주로 에이전트와 함께 일하는 한 사람 일 때 중요합니다. 나는 개인적으로 그들이 생산하는 모든 라인을 검사 할 수 없습니다,내 " +"자신감의 많은 자신의 검사에 달려있다. 공유 검증 참조(오라클)의 사각 지대는 내가 알아 차리기 전에 많은 조사에 영향을 줄 수 " +"있습니다. 나는 검사기가 실제로 확인하는 것을 이해하고 실패해야하는 경우에 대해 테스트해야합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"작업이 계속되면서 그 수표들은 저장소의 일부가 되었습니다. 소스 변경의 이유와 나중에 세션이 이전 세션이 멈춘 곳에서 시작될 수 있는 " +"메모도 마찬가지였습니다. {ph0}소스 코드 저장소는 프로젝트의 작업 메모리가 되고 있었습니다.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "{ph0}성공적인 일괄 처리는 복구 된 코드와 다음 일괄 처리를위한 더 나은 환경을 모두 제공했습니다.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "재건에 대한 두 가지 다른 아이디어" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub의 {ph0}공개 추가 정보{ph1} 이런 종류의 작업에 대한 의견이 분분합니다. 이 통지서는 추가 개발이 완료될 " +"때까지 사적으로 이루어질 것이라고 발표합니다. 한 구절은 이렇게 말합니다.:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"우리의 작업에서 가져온 이 공간에서의 사기꾼(인공지능 디컴파일화 및 포트)의 부상은 미래의 디컴파일화 노력에 대한 나쁜 이미지를 " +"그립니다…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"이 통지는 또한 유지 관리자에 대한 심리적 인 피해를 설명합니다. 그들의 기여 정책은 주로 인공 지능으로 생성 된 풀 요청을 제외합니다." +" 그들은 어려운 일에 자유 시간을 투자했고,그 일은 제 계속을 가능하게 했습니다. 나는 그 뒤에 노력을 존중. 제가 논의하고 싶은 의견 " +"불일치는 재건이 어떻게 진행되어야 하는지,그리고 기여가 어떻게 판단되어야 하는지에 관한 것입니다." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"내가 알고 있던 수동 작업 흐름에서 함수에 대한 이해를 개발하고 재구성하는 것은 보통 같은 사람에게 떨어졌습니다. 프로젝트는 그 사람의 " +"전문성에 크게 의존했습니다. 기여자에 대한 신뢰는 중요했습니다.왜냐하면 그들이 일하는 동안 많은 추론이 일어났기 때문입니다." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"기존 프로젝트는 이미 소스에 대한 지식을 보존하고 도구를 구축합니다. 나를 위해 변경 한 것은 에이전트가 그 지식을 사용하여 다음 조사를" +" 독자적으로 수행 할 수 있다는 것입니다." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"나의 계속안에,나는 결과를 받아들이기를 위해 목적 그리고 기준을 결정한다. 에이전트는 조사할 자유가 넓습니다. 제안된 재건은 관련 " +"검사에서 살아남아야 합니다. 에이전트가 대부분의 작업을 수행하더라도 다른 사람이 구현을 선택한 이유를 검토 할 수 있기를 바랍니다." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"이것은 어려운 전환이 될 수 있습니다. 수년간의 신중한 작업이 훨씬 더 빨리 움직이는 연속의 기초가 될 수 있습니다. 즉 신용에 대한 " +"실제 질문을 제기한다. 또한 유지 관리자가 기여를 수락하기 전에 알아야 할 사항을 변경합니다." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"산업 비유는 이것에 대해 생각하는 데 도움이됩니다. 공예에서,그 과정의 대부분은 그것을 수행하는 사람의 기술에 달려 있습니다. 기계는 그" +" 기술이 필요한 곳에서 변합니다. 누군가는 여전히 프로세스를 설계하고 출력이 잘못되었을 때 인식해야합니다. 다른 지역 사회는 그들이 " +"원하는 변화의 양을 선택할 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"제 선택은 공개적으로 계속하는 것입니다.상속된 작품이 인정되고 그 역사가 보존됩니다. 나는 새로운 작업이 검토 할 수 있기를 바랍니다. " +"그것은 우리에게 이 접근법이 얼마나 멀리 갈 수 있는지 물어보고 그 과정에서 무엇이 잘못되었는지 배울 수 있는 방법을 제공합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"출처: GensokyoClub의 {ph0}추가 정보 공지{ph1} 2026 년 10 월 10 일에 확인된 {ph2}기여 정책{ph3}. " +"이 인용구는 줄여진 인용구입니다. TH08의 {ph4}신용 및 출처{ph5} 연속 경계를 기록하십시오." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095:경험이 시작되는 합성의" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0}TH095{ph1} 총알을 쏘면 그 경험의 가치를 훨씬 더 쉽게 볼 수 있었습니다. 그 저장소는 8 월 29 일에 " +"시작되었으며,레저에 확인된 게임 기능이 없습니다. 우리는 여전히 게임을 배워야 했습니다. 그러나 우리는 이미 재건을 시작하는 방법과 " +"그것을 계속 움직이는 방법에 대해 훨씬 더 많이 알고 있었습니다." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"9 월 7 일까지,모든 697 개의 확인된 게임 기능은 출처를 가지고 있었다. 9 월 8 일까지 696 건이 정확한 비교로 받아들여졌다." +" 전체 프로그램은 9 월 9 일에 연결되었습니다. 그 Windows 초기화 후 약 12 일 후인 9 월 10 일에 재생 가능한 것으로 " +"표시되었다." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"나는 이것이 첫 번째 프로젝트의 속도보다 더 흥미 진진하다고 생각했습니다. 새로운 타겟은 다른 게임에서 수행된 작업에서 이익을 얻을 수 " +"있습니다. 이 경험은 이미 도구와 프로젝트 조직 방식에 존재했습니다." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"예를 들어, TH08 일찍 조립 프로그램에 관심을 지불하는 우리를 가르쳤다. 여러 개의 복구된 함수가 동일한 상태에 의존한다면,그들의 " +"고립된 비교는 중요한 질문을 열어두고 있습니다. 우리는 그들이 함께 일하는 것을 볼 필요가 있습니다. 그 교훈은 우리가 어떻게 접근했는지" +" 형성하는 데 도움이되었습니다 TH095전체 프로그램 구축입니다." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"내 머리 속에 남아있는 교훈은 내가 거기있는 동안 유용합니다. 일단 다른 세션이 실행될 수 있는 체크가 되면,제가 이사를 한 후에도 계속" +" 도움을 줄 수 있습니다. 다음 에이전트는 결과로 이어진 조사를 반복하지 않고 결과를 사용할 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"부동 소수점 상수 버그도 그 메모리에 속합니다. 왜 참조를 확인해야 하는지 설명합니다.또한 그 뒤에 있는 데이터를 확인해야 합니다. 그 " +"수정 사항을 코드로 유지하면 나중에 프로젝트가 이전 검사의 사각지대를 상속하는 것을 피할 수 있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}이 방법은 다음 게임의 시작 자료의 일부가됩니다.{ph1} 우리는 다음 프로젝트의 노력을 목표에 대해 실제로 새로운 것에 더 " +"많이 쓸 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"나중에 가입하는 사람들도 같은 혜택을 받을 수 있습니다. 그들은 결정을 검사하고 작업을 계속하기 전에 확인을 다시 실행할 수 있습니다. " +"그들은 프로젝트의 전체 역사를 재구성해서 왜 소스가 그렇게 보이는지 알아낼 필요가 없습니다." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04:워크플로는 다른 아키텍처에서 살아남습니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0}TH04{ph1} 로터스 랜드 스토리,이 작품을 PC-98 도스 시대 이제 타겟은 4 개의 협력 프로그램을 가진 16 비트 " +"환경이었습니다. 하드웨어 동작을 이해하려면 Windows 게임. 기존 {ph2}레크 98 일{ph3} 여기에도 귀중한 지식과 자료를 " +"제공했습니다." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"이제 도스 재건이 진행되고 있습니다. 내 수동 테스트에서,나는 그들의 엔딩을 통해 완전한 정상 경로를 재생하고 저장을 확인했다. 현재 " +"작업은 네이티브 64 비트 포트입니다. 작업 도스 버전을 먼저 설정하면 해당 통신 포트에 참조가 제공됩니다." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"건축물은 우리가 조사해야 할 것을 바꾸었습니다. 그것은 또한 우리가 우리의 작업을 확인하는 컴파일러와 런타임을 변경했습니다. 그러나 " +"에이전트는 여전히 결과를 통해 질문을 따라 그 결과가 다음 실험을 안내 할 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"게임 플레이에서 결말으로의 전환을 고려하십시오. 우리는 어떤 국가가 그 경계를 넘어서고 어떤 프로그램이 그것에 책임이 있는지 " +"알아야합니다. 그것은 우리가 도스 제품에 대해 조사 할 수있는 것입니다. 한 번의 증거이며 검사를 사용할 수 있는 에이전트를 통해 작업 " +"할 수 있습니다 질문을 많이 그랬던 것처럼에Windows제목입니다." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"이것이 바로 TH04 인수에 문제. 상당한 플랫폼 변화는 우리가 새로운 작업 방식으로 다시 시작하도록 강요하지 않았습니다. 아키텍처가 " +"문제를 정의했고,워크플로우는 여전히 문제를 해결하는 방법을 제공했습니다." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"64 비트 포트의 경우 이제 도스에서 이미 복구 된 동작에 대해 새 구현을 검사 할 수 있습니다. 재건에 대한 지식은 항구에 구축할 수 " +"있는 무언가를 제공합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"2026 년 10 월 10 일 현재 프로젝트 상태: {ph0}도스 재구성 및 수동 테스트{ph1} · {ph2}64 비트 포트{ph3}." +" 항구는 개발 중입니다." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "정확한 코드에서 읽을 수있는 코드로" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "일단 재건이 이루어지면 다른 사람이 그것을 이해할 수 있기를 바랍니다." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"나에게 조립 및 원시 오프셋은 오랜 친구처럼 느낄 수 있습니다. 나는 이것이\"읽을 수있는\"의 약간 특이한 정의라는 것을 " +"깨닫는다.\"대부분의 사람들은 실행 파일의 메모리 레이아웃을 머릿속에 유지하지 않고 게임의 논리를 따르기를 선호합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"그게 바로 {ph0}의미 재구성{ph1} 들어옵니다. 복구된 필드는 여전히 주로 오프셋으로 알려져 있습니다. 우리는 그 역할을 설명 할 " +"수있을 때까지 게임이 그것을 사용하는 방법을 따릅니다. 그런 다음 우리는 그것을 의미있는 이름과 증거에 맞는 유형을 줄 수 있습니다. " +"다음 사람이 그 해석이 어디서 왔는지 볼 수 있도록 우리는 출처와 추론을 유지합니다." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"이것은 소프트웨어 포트에 특히 중요합니다. 절대 주소는 오래된 실행 파일에 무언가가 살았던 곳을 알려줍니다. 64 비트 구현은 어떤 " +"객체가 그 상태를 소유해야 하는지 결정하는 데 거의 도움이 되지 않습니다. 동작을 안전하게 이동하려면 이전 메모리 액세스 뒤에 있는 " +"관계를 복구해야 합니다." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "내가 지금 사용하는 순서는:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}정확한 기준선을 복구합니다.{ph1} 역사적인 컴파일러로 재구성된 조각을 컴파일합니다. 관련 코드 및 데이터를 원래 실행 파일과" +" 비교합니다. 다음 단계는 명확한 출발점이 있도록 기록 해결되지 않은 차이." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}빌드 및 원래 플랫폼에서 재생할 수 있습니다.{ph1} 원래의 아키텍처와 컴파일러를 사용하여 실제 프로그램에 그 조각을 " +"연결합니다. 중요한 게임 플레이 경로를 연습하십시오. 여기서 격리 된 함수 비교가 놓친 공유 상태 또는 초기화 문제를 찾을 수 있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}두 참조에 대한 의미를 재구성하십시오.{ph1} 한 번에 게임의 일관된 부분을 가져 와서 복구 된 소스가 무엇을 의미하는지 " +"확립하십시오. 정확한 비교 및 재생 가능한 역사적 빌드를 유지하면서 표현을 향상시킵니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}현대 포트를 만드십시오.{ph1} 기본 64 비트 빌드와 같은 새 환경으로 설정된 동작을 이동합니다. 재구성된 오리지널 플랫폼 " +"게임은 포트의 동작을 비교하는 데 참고 자료로 남아 있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"두 번째 단계의 플레이 가능한 빌드는 {ph0}두 번째 검증 참조(오라클){ph1} 세 번째 동안. 첫 번째 검증 참조(오라클)는 변경된" +" 소스가 여전히 관련 원본 코드와 데이터를 재생하는지 확인합니다. 두 번째는 재구성된 프로그램이 우리가 실행하는 경로를 따라 여전히 " +"빌드되고 올바르게 동작하는지 확인합니다." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"그들은 다른 실수를 잡습니다. 형식 변경은 생성된 명령어를 변경할 수 있습니다. 소유권 변경은 다른 상태 복사본을 사용하여 게임의 두 " +"부분을 남길 수 있습니다. 두 검사를 모두 사용할 수 있도록 유지하면 에이전트가 리팩터를 더 수행하기 전에 조사하지 않을 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"이름은 그 자체의 증거가 필요합니다. 정확한 비교를 통해 어떤 필드가 실제로\"무적 시간\"을 의미하는지 알 수 없습니다.\"우리는 " +"게임이 그것을 쓰고 사용하는 방식에서 그것을 확립해야합니다. 그 의미 가 확실 하지 않다면,중립적 인 이름 은 자신감 있는 추측 보다 " +"다음 독자 에게 더 도움 이 된다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"우리는 프로젝트를 통해 이 순서를 배웠습니다. TH08 나중에 역사적인 플랫폼 감사 전에 이미 재생 가능한 포트를 가지고있었습니다. 그 " +"때문에 어떤 결함들은 보기 어려워졌습니다. 그 {ph0}공장의 현재 워크 플로우{ph1} 원래 플랫폼 빌드를 먼저 배치하므로 시맨틱 " +"작업은 포팅이 시작되기 전에 참조로 사용할 수 있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}정확한 재구성은 우리에게 참조를 제공합니다. 의미적 재구성은 회복된 지식을 사용할 수 있게 해줍니다.{ph1} 포트는 둘 다에 " +"구축 할 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "이 산업 변화를 만드는 것" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"이 프로젝트들은 제가 관심을 기울인 곳에서 바뀌었습니다. 에이전트가 앞으로 조사의 대부분을 수행 할 수 있으면,자신의 작업 환경을 " +"개선하는 것은 내가 할 수있는 가장 유용한 것들 중 하나가되었다. 더 나은 도구는 나중에 필요한 모든 기능을 도울 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"여기서 자율성이 중요합니다. 유용한 다음 단계는 실패한 실험 후에 만 명확 해집니다. 에이전트는 예상치 못한 곳에서 그 결과를 따라갈 수" +" 있는 충분한 자유가 필요합니다. 만약 제가 각 단계를 처방할 때까지 기다려야 한다면,많은 작업이 제 관심에 묶여 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"나는 에이전트가 잘못된 가설을 세울 것으로 기대한다. 중요한 것은 우리가 그들을 시험하고 그 결과로부터 배울 수 있는지 여부입니다. " +"실패한 검사는 다시 시도할 만큼 실수를 잘 이해하는 데 도움이 됩니다. 나는 여전히 축적 된 증거가 프로젝트 이정표를 지원하는지 여부를 " +"결정해야합니다." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA 에이전트가 분석 도구에 액세스할 수 있도록 합니다. 함수의 호출자에 대한 질문은 바로 그 호출자를 검사 할 수 있습니다. 재구성 " +"프로젝트는 컴파일러와 자체 참조 검사를 제공합니다. 에이전트는 그것을 사용하여 제안된 출처를 테스트하고 그 설명이 어디에 있는지 볼 수 " +"있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"그 TH08 버그는 그 검사가 자신의 엔지니어링 관심을받을 자격이 이유를 보여줍니다. 같은 비교가 수백 개의 함수에서 사용되면,그 안에 " +"있는 격차는 한 구현의 실수보다 훨씬 더 퍼질 수 있습니다. 검사기를 테스트하면 나중에 모든 작업에 사용할 수 있는 피드백이 향상됩니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"산업적 비유는 여기서 유용한 역사적 예를 가지고 있습니다. 볼턴과 왓트는 {ph0}1796 년 증기 엔진 표시기{ph1} 엔진 밸브를 " +"조정하는 데 도움이됩니다. 녹음 버전은 피스톤 스트로크를 통해 압력을 추적했습니다. 엔진의 내부 동작을 검사할 수 있게 했습니다. 우리의" +" 비교 도구는 비슷한 목적을 제공합니다:그들은 우리가 그것을 개선하는 동안 기계가 무엇을하고 있는지 살펴 보자." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}우리는 이 산업 변화의 초기 단계에 있습니다.{ph1} 인프라의 대부분은 아직 미숙합니다. 에이전트는 우리의 수표가 지원하도록 " +"설계된 것보다 더 빨리 이동할 수 있으므로 프로세스는 그들과 함께 개발해야합니다. 공유 도구에서 결함이 발견되면 이를 복구하고 영향을 " +"받은 결과를 다시 검토해야 합니다. 다음 프로젝트는 더 강력한 도구를 상속 할 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"또한 어떤 대화에도 실질적인 제한이 있습니다. 대규모 재건이 끝나기 전에 끝날 것입니다. 소스 코드 저장소는 마지막 결정의 이유를 잃지 " +"않고 다른 세션이 계속될 수 있도록 해야 합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"그 {ph0}동방 재건 공장{ph1} 그 필요에서 성장했습니다. 이 프로젝트는 앞으로 자신의 검사와 교훈을 수행 할 수있는 공유 방법을 " +"제공합니다. 한 게임에 대한 작업은 다른 게임의 시작 조건을 개선 할 수 있습니다." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"이것이 산업적 비유를 저에게 의미 있게 만드는 것입니다. 경험은 다른 사람들이 사용할 수 있는 도구의 일부가 되기 시작합니다. 이러한 " +"도구를 개선하면 다음 사람 또는 다음 에이전트가 얼마나 많은 작업을 수행 할 수 있는지 변경됩니다." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "우리가 지금 고려할 수있는 프로젝트" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"이 시작 결정을 변경하기 때문에 속도 문제. 게임은 리버스 엔지니어링에 매혹적 일 수 있으며 현실적으로 줄 수있는 것보다 내 자신의 " +"관심을 더 많이 요구할 수 있습니다. 많은 프로젝트가 아이디어를 유지합니다." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"이제 나는 반복적 인 조사를 통해 그러한 프로젝트를 계속 진행할 수있는 방법을 볼 수 있습니다. 작동하는 재구성을 얻는 것은 소프트웨어 " +"포트를 더 실용적으로 만듭니다. 읽을 수있는 의미를 복구하면 다른 사람이 모드를 쉽게 탐색 할 수 있습니다. 게임을 이해하는데 투입된 " +"노력은 첫 번째 버전이 실행된 후에도 계속 성과를 낼 수 있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"나는 지금 익숙하지 않은 프로그램을보고 묻는다: {ph0}어떤 액세스,피드백 및 축적 된 지식으로 에이전트가이 작업을 안정적으로 수행 할" +" 수 있습니까?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"그 질문은 내가 이전에 혼자 남겨 두었을 프로젝트를 고려하게합니다. 각자는 우리가 다음에 접근하는 방식을 향상시킬 수 있습니다. 나는 " +"그것이 우리를 얼마나 멀리 데려 갈 수 있는지 계속 탐구하고 싶다." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "프로젝트 이정표 및 출처" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"날짜는 기록된 프로젝트 체크포인트를 설명합니다. GitHub 2026 년 10 월 10 일 역사. 경과 시간은 커밋 사이의 일정 " +"시간입니다. 소스 존재,정확한 비교,빌드 및 런타임 결과는 각각 다른 이정표를 지정합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0}TH08:{ph1} {ph2}8 월 13 일 계속{ph3}, {ph4}8 월 19 일 소스 레저{ph5}, {ph6}8 월 24" +" 일 Linux 항구{ph7}, {ph8}8 월 26 일 웹 에디션{ph9},그리고 {ph10}8 월 30 일 64 비트 Linux " +"릴리스{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0}TH095:{ph1} {ph2}8 월 29 일 초기 원장{ph3}, {ph4}9 월 7 일 원본 원장{ph5}, {ph6}9 월" +" 8 일 비교{ph7}, {ph8}9 월 9 일 연결{ph9},그리고 {ph10}9 월 10 일 플레이 가능-빌드 레코드{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0}TH04:{ph1} {ph2}10 월 10 일 전달{ph3} 작업 도스 재구성,유지 관리자의 완전한 정상 경로 테스트 및 현재 " +"64 비트 위상을 기록합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0}TH08 오라클 수정:{ph1} {ph2}보고된 자동 수집 버그{ph3}, {ph4}소스 및 비교 수정{ph5},그리고 " +"{ph6}전체 부동 리터럴 감사{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}의미 재구성:{ph1} {ph2}TH08의 가독성 플레이 북{ph3} 그리고 {ph4}팩토리의 위상 순서 및 두 가지 유효성 " +"검사 경로{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}산업 역사:{ph1} {ph2}과학 박물관 그룹의 증기 기관 표시기 기록{ph3} 1796 년 도입과 압력 기록 메커니즘을 " +"설명합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}방법:{ph1} 공장 {ph2}에이전트 자율성{ph3} 그리고 {ph4}크로스 게임 지식{ph5} 문서는 작업 원칙과 교훈을 " +"유지합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}더 많은 기사{ph1} · {ph2}탐색 TH04 조사{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "리버스 엔지니어링의 산업 혁명—REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 에 반영한 설명서 리버스 엔지니어링,동방으로 재건 AI 에이전트,그리고 지식이 어떻게 화합물 전 " +"TH08,TH095PC-98TH04." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "프로젝트 간 경험" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "동방 재건 에세이" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}홈{ph1}{ph2}/{ph3}공룡 속도 연구소" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "검사→다시 작성→변경" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "공룡의 속도 규칙을 다시 작성하십시오." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"게임의 가속을 재현하려면 먼저 속도를 제어하는 규칙을 찾으십시오. {ph0}REA 실행 중인 스크립트를 반환했습니다;{ph1} 우리는이 " +"미니 게임을 구축하기 위해 규칙을 사용 {ph2}조정 가능한 속도.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}재생 및 속도 변경{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}복구 된 규칙 읽기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}재건 확인{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}분석 시도{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "재생 및 속도 변경" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"재생을 누른 다음 선인장을 뛰어 넘습니다. 속도 슬라이더를 움직여 더 느리거나 빠른 게임을 시도하세요. 복구 된 규칙을 선택하여 6 에서" +" 시작하고 점차적으로 다시 가속하십시오." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "재구성한 게임 플레이" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "시작" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "점프 ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "다시 시작" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "속도" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "복구된 가속 규칙 사용" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "원래 규칙:6 에서 시작한 다음 13 으로 늘립니다." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "자신의 속도를 설정하는 슬라이더를 이동합니다. 공간 또는 점프는 선인장을 지 웁니다." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "사용JavaScript을 재생하는 재건. 위의 코드와 설명은 읽을 수 있습니다." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "스크립트 읽기 REA 반환" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"우리는 검사 {ph0}와이우의 Chromium-파생 브라우저 에디션{ph1} 함께 REA. 그것은 로드 된 반환 {ph2},게임의 " +"업데이트 기능에 이 지점을 포함:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "설정은 다음과 같습니다 {ph0}, {ph1} 그리고 {ph2}. 이 게임은 충돌 없이 업데이트에서 이 브랜치를 실행합니다." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "새로운 게임에서 동일한 규칙을 사용" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "복사" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"미니 게임은 자동 가속을 위해이 기능을 사용합니다. 슬라이더를 이동하면 대신 고정 속도를 제공합니다. 그리기,점프 물리학 및 사각형 충돌" +" 검사는 이 교육 게임의 새로운 코드입니다.시뮬레이션은 초당 60 개의 업데이트로 진행됩니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}속도 규칙 다운로드{ph1} · {ph2}게임 코드 읽기{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "재건 확인" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"우리는 장애물과 자동 예약이 비활성화 된 원래 게임의 업데이트 기능을 불렀습니다. 기록 된 속도를 복구 된 규칙의 재생과 비교하십시오." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "업데이트" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "원래 게임" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "재구성된 규칙" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "속도 검사 실행" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"값은 세 개의 소수로 반올림. 분기는 더하기 전에 확인합니다.그래서 최종 인크림트는 13 을 조금 넘는 속도를 낼 수 있습니다." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "직접 분석해 보세요" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}설정 REA{ph1} 코딩 에이전트와 함께." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "따라 {ph0}브라우저 연결 단계{ph1},사용 {ph2} 페이지" + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "에이전트에 페이지 및 로컬 디버깅 끝점을 지정한 다음 이 프롬프트를 복사합니다." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 이 공룡 게임을 검사합니다. 왜 더 빨리 얻을 수 있습니까? 속도 규칙을 표시 한 다음 조정 " +"가능한 속도로 작은 버전을 만듭니다.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "후속 조치 요청: {ph0}\"점프 높이는 어디에서 계산됩니까? 새 버전에 점프 높이 컨트롤을 추가합니다.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"출처: {ph0}검사된 속도 코드{ph1}, Chromium 저자. {ph2}저작권 및 라이선스{ph3}. REA 4.1.0 에서 " +"실행중인 버전을 검사했습니다. Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome공룡:게임을 다시 속도 원칙—REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "공룡 게임의 속도 규칙을 읽으십시오 REA,다시 만든 다음 속도를 바꾸고 재생하십시오." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "공룡 속도 재구성" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "공룡 미니 게임. 게임이 집중되는 동안 점프 버튼을 누르거나 공간을 사용합니다." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "재구성된 속도 규칙 복사" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "복사 공룡 분석 프롬프트" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}홈{ph1} /자주하는 질문" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA자주 묻는 질문에 있습니다." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "설정,업데이트,분석 및 문제 해결." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "주제" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}설정 및 업데이트{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}분석{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}문제 해결{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}데이터 및 공유{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "설정 및 업데이트" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "REA는 어떻게 설치하나요?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "터미널*에이전트 설정" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "복사" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"설정 명령은 REA의 MCP 연결을 등록하고 분석 스킬을 설치합니다. 완료되면 에이전트를 다시 시작한 뒤 분석할 파일 경로와 질문을 " +"전달하세요. 필요한 환경과 첫 분석 방법은 {ph0}설정 가이드{ph1}에서 확인할 수 있습니다." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "어떤 코딩 에이전트가 사용할 수 있습니까 REA?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"로컬을 지원하는 모든 에이전트 MCP 서버 설치 포함 Claude Code, Claude 데스크톱, Codex, Cursor, " +"Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot CLI, " +"Command Code, Grok Build, OMP,그리고 VS Code. 그록 봇의 커넥터는 채팅에서 추가됩니다." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}코딩 에이전트 연결{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "REA는 어떻게 업데이트하나요?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "REA 버그 수정을 포함하여 자주 출시됩니다. 당신이 설치 한 경우 CLI 함께 npm:" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "터미널·설치CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "업데이트에서 인쇄한 설치 새로 고침 명령을 따릅니다. 를 통해 에이전트를 설정하는 경우 {ph0},실행:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "터미널*에이전트 설정 새로 고침" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"변경 내용을 확인하고 에이전트를 다시 시작하세요. REA 연결 설정은 특정 패키지 버전을 사용하므로 설정 명령을 다시 실행해야 새 버전이" +" 적용됩니다. CLI를 한 번 실행할 때는 {ph0} 뒤에 원하는 명령을 붙이세요." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "에서 기술을 설치 skills.sh 충분히?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"이 기술은 에이전트 조사 지침을 제공합니다. 실행 {ph0}REA 설정{ph1} 연결하려면 MCP 이 도구를 호출 할 수 있도록 서버와 " +"일치하는 기술을 설치 한 다음 에이전트를 다시 시작합니다." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "분석" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "무엇을 분석 할 수 있습니까 REA?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "당신이 가지고있는 소프트웨어의 종류로 시작:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "{ph0}기본 실행 파일 및 라이브러리{ph1}:함수,어셈블리,의사 코드 및 참조." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "{ph0}JavaScript 그리고 Electron 앱{ph1}:모듈,수입,아이피씨 및 소스 위치." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "{ph0}브라우저 페이지{ph1}:스크립트,요청 및 런타임 관찰." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA 또한 관리되는 어셈블리,안드로이드 소프트웨어,펌웨어 및 패키지 리소스에 대한 워크 플로우가 있습니다. {ph0}사례 연구 " +"참조{ph1} 일한 조사를 위해." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "내가 필요합니까 Hopper, Ghidra 또는 IDA?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"깊은 네이티브 분석은 그 중 하나를 사용합니다. 정적 JavaScript 그리고 닷넷 검사 제공된 파일 작업 및 기본 분석 엔진이 " +"필요하지 않습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"기존 연결 Ghidra 또는 IDA 설치 또는 설치 감지 Hopper 그리고 설치를 제안합니다. 호스트와 대상은 사용할 수 있는 공급자를" +" 결정합니다. {ph0}기본 분석 설정{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "내가 사용할 수 있습니까 REA 코딩 에이전트가 없다면?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "네 그 CLI 동일한 분석 워크플로를 사용합니다. 지역 JavaScript 또는 Electron 앱:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "터미널*정적 애플리케이션 분석" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "경로를 추출된 응용 프로그램 폴더로 바꾸거나 ASAR 파일 {ph0}사용 CLI{ph1} 설치 옵션." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "REA는 어떤 코드를 반환하나요?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"네이티브 프로그램을 분석하면 어셈블리와 의사 코드, 함수 호출, 참조, 관련 상수를 반환합니다. JavaScript를 분석하면 모듈과 " +"모듈 간 관계, 소스 위치를 반환합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"에이전트는 이러한 결과를 사용하여 동작을 설명하거나 구현을 작성하고 테스트합니다. 그 {ph0}DX-Ball 계산{ph1} 그리고 " +"{ph2}플래그 검사기{ph3} 그 과정이 어떻게 작동하는지 보여주세요." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "에이전트에게 무엇을 물어보면 되나요?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "로컬 대상 및 조사 할 하나의 동작을 지정하십시오. 에 대한 JavaScript 또는 Electron 앱:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"경로를 대상으로 바꿉니다. 그 {ph0}가이드{ph1} 네이티브에 대한 프롬프트 제공, Electron 그리고 브라우저 예제." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "문제 해결" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "왜 내 에이전트가 볼 수 없습니까 REA 도구?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "설치 후 에이전트를 다시 시작하거나 다시 연결합니다. 그 확인 REA 등록 {ph0};를 위해 Codex:" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "터미널*하나의 클라이언트 확인" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"교체 {ph0} 고객 아이디와 같은 {ph1} 또는 {ph2}. 보고서에 누락되거나 오래된 등록이 표시되면 해당 클라이언트에 대해 설치 " +"프로그램을 실행합니다:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "터미널*한 클라이언트의 설정을 복구" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"계획을 검토하고 클라이언트를 다시 시작하십시오. 등록이 정상이지만 도구가 없는 경우 클라이언트의 MCP 연결 오류. {ph0}더 많은 " +"설치 진단{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "내가 시작해야합니까 Hopper 먼저?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA 시작 Hopper 작업이 필요할 때. 시작 macOS,무인 분석 전에 데모 모드 또는 라이센스 활성화의 첫 번째 실행 선택을 " +"완료하십시오. {ph0}기본 공급자 설정을 참조하십시오{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "버그가 발생하면 어떻게 하나요?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}업데이트 REA{ph1},에이전트를 다시 시작하고 동일한 작업을 다시 시도하십시오. 최근 릴리스는 이미 문제를 해결할 수 " +"있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"지속되면, {ph0}문제 열기{ph1} 당신과 함께 REA 버전,운영 체제,대상 유형,재현 단계 및 오류 출력. 문제가 네이티브 분석과 " +"관련된 경우 공급자 이름을 포함합니다." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "데이터 및 공유" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "않습니다 REA 내 앱을 업로드 하시겠습니까?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "REA 컴퓨터의 대상을 분석합니다. 에이전트가 결과를 수신하고 해당 모델 공급자의 데이터 정책이 해당 결과에 적용됩니다." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "예를 공유하거나 기여할 수 있는 방법은 무엇입니까?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"유용한 REA 예? 우리는 그것을 보고 싶습니다. 대상,질문,결과를 공유하고 당신이 그들을 확인하는 방법 {ph0}문제{ph1} 또는 " +"{ph2}끌어 오기 요청{ph3}. 짧은 코드 발췌 및 수치는 다른 사람들이 조사를 수행하는 데 도움이됩니다." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"버그 리포트,기능 요청,문서 및 코드 개선도 환영합니다. 당신은 또한에서 예를 논의 할 수 있습니다 {ph0}커뮤니티{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REAFAQ 설치,업데이트 문제 해결" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "일반적인 답변 REA 트랙에 작은:설치,업데이트,분석 도구,코딩 에이전트,문제 해결 및 공유 예제." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "자주 묻는 질문들에 대한REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "복사REA설정 명령" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "복사REAupdate 명령" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "에이전트 설치 복사 새로 고침 명령" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "복사REACLI분석 명령" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "예제 분석 프롬프트 복사" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "클라이언트 진단 복사 명령" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "범위 설정 복사 명령" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}홈{ph1} /첫 번째 조사" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "어디 찾기{ph0}내 보낸 노트는 이동합니다." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "사용 REA 작은 응용 프로그램을 검사하려면 내보내기 노트 버튼을 따라 하나의 세부 사항을 직접 확인하십시오." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "이 연습에서" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. 설정{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. 수출에 대해 문의{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. 답을 따라{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. 예측 확인{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. 다른 질문{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. 에이전트에 연결 REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "복사" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "또는 터미널에서 이 명령을 실행하십시오:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "계획을 검토하고 설정을 승인한 다음 에이전트를 다시 시작하십시오. 이미 연결되어 있습니까? 아래 계속." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. 해CSV기록" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"예는 6 개의 파일입니다. Electron 와 응용 프로그램 {ph0}노트 내보내기{ph1} 버튼. 에이전트는 설치 또는 실행 없이 해당" +" 코드를 검사할 수 있습니다 Electron." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "에이전트가 파일을 다운로드하고 압축을 푼 폴더를 REA 검사를 위해." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}다운로드 예제 우편 번호{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"에이전트가 파일을 다운로드할 수 없는 경우 이 아카이브의 압축을 직접 풉니다. 그 길을 {ph0} 폴더 및 동일한 내보내기 질문." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. 답을 따라 코드로 돌아갑니다" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "파일 및 줄 참조와 함께 간단한 설명을 찾으십시오:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"이 버튼은 {ph0} 메시지 주요 프로세스는 노트를 다음과 같이 포맷합니다. CSV 그리고 글을 쓰죠. {ph1} 사용자의 다운로드 " +"폴더에 있습니다. 열은 {ph2} 그리고 {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "버튼에서 파일 작성기로" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "REA정적 분석은 메시지와 핸들러를 결합합니다. 대상은 코드에서 읽습니다." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"파일 경로,포맷터 및 쓰기 호출이 이 핸들러에 함께 있습니다. 그것의 응답이 그(것)들을 밖으로 떠나는 경우에 이 선을 보여주기 위하여 " +"당신의 대리인을 요구하십시오." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}전체 코드 추적 및 기록보기 REA 결과{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. 예측 확인" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "쉼표로 구분 CSV 열. 메모 제목 자체에 쉼표나 따옴표가 있으면 어떻게 됩니까?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "직접 확인 실행" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "압축을 푼 터미널을 엽니 다 {ph0} 폴더:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"이 명령은 여기 문서 지원 셸을 사용합니다. 귀하의 에이전트는 동일한 실행할 수 있습니다 JavaScript 플랫폼의 쉘에서." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. 다른 질문" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "동일한 대화에서 후속 조치를 시도하십시오:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "파일을 작성할 수 없는 경우 어떻게 됩니까? 오류를 따라 페이지로 돌아갑니다." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "또는 에이전트에게 자신의 앱을 제공하고 하나의 버튼,파일 또는 행동에 대해 물어보십시오." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "{ph0}어떻게 Notion 텍스트 복사{ph1}{ph2}패키지에서 클립보드 기능 따르기 Electron 앱{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "{ph0}어떻게 DX-Ball 사운드 패닝 계산{ph1}{ph2}원래 지침과 재건 수표를 읽으십시오.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "{ph0}설정 또는 분석 문제 해결{ph1}{ph2}업데이트 REA 문제가 발생할 경우 연결을 확인합니다.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "당신의 첫번째 리버스 엔지니어링 조사—REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "시도해봐 REA 작은 메모 앱에. 당신의 에이전트를 설정,내 보낸 노트가 어디로 물어,그리고 확인 CSV 샘플 제목 포맷터." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "귀하의 첫 번째REA조사" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "복사REA설치 프롬프트" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "설치 명령 복사" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "복사 노트 조사 프롬프트" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "복사 CSV 확인 프롬프트" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "복사 포맷터 검사 명령" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}홈{ph1} /시작" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "설정REA." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "연결 REA 코딩 에이전트에,또는 터미널에서 로컬 응용 프로그램을 검사합니다." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "터미널을 열고 확인:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "터미널" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "복사" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0}Windows (파워쉘){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "WindowsPowerShell" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "입력 와이 약관에 동의하도록 요청하는 경우. 파워 셸을 닫고 다시 연 다음 실행하십시오 {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"파워셸이 나중에 말한다면 {ph0}\"이 시스템에서 스크립트 실행을 사용할 수 없습니다.\"{ph1} 당신이 달릴 때 {ph2},이것을 " +"한 번 실행하고 다시 시도하십시오:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "당신이 사용하는 경우 Homebrew:" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "그렇지 않으면:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "터미널을 닫고 다시 연 다음:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "설치 프로그램 요구 사항 {ph0} 그리고 {ph1} (데비안/우분투에서: {ph2}). 터미널을 닫고 다시 연 다음:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "배포판 자체 {ph0} 패키지는 종종 22.19 보다 오래된,그래서 확인 {ph1} 당신은 대신 그것을 사용하는 경우." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "일반 설치 프로그램을 선호? 다운로드 {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "설정 옵션" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}코딩 에이전트 연결{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}사용 CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}기계 코드 프로그램 분석 설정{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}도움 받기{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "코딩 에이전트 연결" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"설치 프로그램을 실행하여 연결 REA 코딩 에이전트에. 고객 선택은 Claude Code, Codex, Cursor, Gemini " +"CLI, Windsurf, Grok Build,및 기타 지원 MCP 고객. 그록 봇의 커넥터는 채팅에서 추가됩니다." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "코딩 에이전트에 새로운?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"코딩 에이전트는 브라우저 탭이 아닌 컴퓨터에서 작동하는 인공지능 보조자입니다. 파일을 읽고 명령을 실행할 수 있으며 변경하기 전에 " +"묻습니다. REA그것을 리버스 엔지니어링 도구입니다." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "당신은 아직 하나가없는 경우,하나를 선택,그 설치 페이지를 따라 로그인:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "{ph0}{ph1}Claude Code{ph2}{ph3} 에 의해 Anthropic. 유료 필요 Claude 계획." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "{ph0}{ph1}Codex{ph2}{ph3} 에 의해 OpenAI. 귀하의 계정으로 로그인하십시오." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "{ph0}{ph1}OpenCode{ph2}{ph3},오픈 소스. 원하는 모델 공급자를 연결합니다." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"그런 다음 그것을 열고 아래 프롬프트를 복사하십시오. 에이전트 실행 REA의 설치 및 아무것도 변경하기 전에 당신에게 계획을 보여줍니다." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "또는 직접 설치 실행" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "터미널은 어떻게 열 수 있나요?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "{ph0}Windows:{ph1} 시작 메뉴를 열고 다음을 입력하십시오 {ph2}파워셸{ph3} 를 눌러 입력합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "{ph0}macOS:{ph1} 프레스 {ph2} {ph3},유형 {ph4}터미널{ph5} 를 눌러 입력합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "{ph0}Linux:{ph1} 프레스 {ph2} {ph3} {ph4} 대부분의 데스크톱에서." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"명령 붙여넣기 {ph0} {ph1} (macOS: {ph2} {ph3}; Linux 터미널: {ph4} {ph5} {ph6})를 누른 " +"다음 엔터를 누릅니다." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"클라이언트를 선택하고 설치 계획을 검토합니다. REA추가MCP연결와 일치하는 조사 기술,유지 백업 기존의 구성이 있습니다. 변경 사항을 " +"적용하기 전에 묻습니다." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "설치가 완료되면 클라이언트를 다시 시작합니다." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "내 클라이언트를 다시 시작하려면 어떻게 합니까?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}데스크톱 앱{ph1} (Claude 데스크톱, Cursor, Windsurf, VS Code):앱을 완전히 종료 한 다음 다시 " +"엽니 다. 창문을 닫는 것만으로는 충분하지 않습니다. 시작 macOS 프레스 {ph2} {ph3};에 Windows,또한 트레이 아이콘이" +" 있는 경우 트레이 아이콘을 종료합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}터미널 에이전트{ph1} (Claude Code, Codex, Gemini CLI):세션을 종료하고 다시 시작합니다." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"에이전트에 대상 경로 및 특정 질문을 제공합니다. 에 대한 JavaScript 또는 Electron 응용 프로그램,당신은 시작할 수 " +"있습니다:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"봐 {ph0} 그리고 데이터를 내보내는 방법을 찾으십시오. 검색 결과에 대한 소스 위치와 관련된 진입 점,통화 및 종속성을 표시합니다." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "경로를 로컬 대상으로 바꿉니다." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "폴더의 전체 경로를 어떻게 얻을 수 있습니까?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1} 파일 탐색기에서 폴더를 마우스 오른쪽 단추로 클릭하고 다음을 선택합니다 {ph2}경로로 복사{ph3}." +" 시작 Windows 10,마우스 오른쪽 버튼을 클릭하는 동안 이동을 누르고 있습니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0}macOS:{ph1} 파인더에서 폴더를 마우스 오른쪽 버튼으로 클릭하고 옵션을 누르고 다음을 선택합니다 {ph2}경로 " +"이름으로\"...\"복사{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "{ph0}모든 시스템:{ph1} 폴더를 터미널 창으로 드래그하면 해당 경로가 나타납니다." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "터미널에서 공백이 포함된 경로 주위에 따옴표를 넣습니다." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "사용CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "분석JavaScript또는Electron응용 프로그램 폴더 또는ASAR보관없이 응용 프로그램을 실행:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "정적 애플리케이션 분석" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "경로를 추출된 앱 디렉터리로 바꾸거나 {ph0} 파일 시작 Windows,같은 경로 {ph1} 여기서 작동합니다." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "어디 응용 프로그램의 찾을 수 있습니까.아사르 파일?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron 응용 프로그램은 일반적으로 그것을 유지 {ph0} 폴더:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0}Windows:{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "{ph0}macOS:{ph1} {ph2} (앱을 마우스 오른쪽 버튼으로 클릭하고 선택 {ph3}패키지 내용 표시{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0}Linux:{ph1} 종종 {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "일부 앱은 다른 곳에 설치됩니다. 에 대한 응용 프로그램의 폴더를 검색 {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "결과는 앱을 식별하고 모듈 간의 연결을 표시하며 소스 위치를 제공합니다. 연결 REA 확인할 수 없습니다 결과에 표시됩니다." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "만약 당신이 영구 {ph0} 쉘의 명령:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "설치CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}계속 JavaScript 신청 가이드{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "기계 코드 프로그램 분석 설정" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "네이티브 바이너리에는 로컬 분석 도구가 필요합니다. 선택하고 아래 하나를 구성,다음 제공 REA 실행 파일 또는 라이브러리." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "도구 선택: Ghidra, Hopper 또는 IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"기존 사용 Ghidra 12.1.64 비트 설치 및 64 비트 설치 및 64 비트 설치 및 64 비트 설치 및 64 비트 설치 및 64 " +"비트 설치 및 64 비트 설치 Linux 또는 macOS,64 또는 팔 64 에. 당신의 Ghidra 설치에는 호스트 아키텍처를 위한 " +"기본 디컴파일러가 필요합니다. 설치 프로그램을 실행하기 전에 경로 설정:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "당신의 연결 Ghidra 설치" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra연결·macOS/Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"두 경로를 기존 설치로 바꿉니다. 설치 프로그램은 이를 확인하고 선택한 클라이언트에 대한 유효한 설정을 기록합니다. 시작 Linux 팔 " +"64,당신은 구축해야 할 수도 있습니다 Ghidra네이티브 디컴파일러입니다." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "연결 Ghidra 시작 Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows 1000 개 이상의 웹 사이트에서 다운로드 할 수 있습니다. 기존 사용 Ghidra 12.1.64 비트 설치 및 64 비트" +" 설치 및 64 비트 설치 및 64 비트 설치 및 64 비트 설치 및 64 비트 설치:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra연결·WindowsPowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "두 경로를 설치로 바꾼 다음 설치 계획을 검토합니다." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"에 연결Hopper에macOS또는Linux. 위의 설치 명령을 실행;그것은 기존의 설치를 감지하거나 승인을 위해 설치 계획을 제공합니다." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "에macOS,완전한Hopper's first-실행 선택의 데모 모드 또는 라이센스를 활성화하기 전에 무인 분석이다." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"검증된 IDA 설정 사용 Windows,기존의 MCP 첨부 된 데이터베이스 또는 헤드리스 데이터베이스에 대한 등록. Linux 그리고 " +"macOS 헤드리스 분석은 아직 확인되지 않았습니다." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "기존 연결 IDA MCP 등록" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"업스트림 서버의 작동 유지 {ph0}, {ph1} 그리고 선택 {ph2} 제슨 파일에 기존 {ph3} 객체 {ph4} 입장도 허용됩니다." +" 포인트 REA 설정 전에 해당 파일에서:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA 연결 · Windows 파워셸" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"첨부된 프로필은 원래 바이너리가 이미 열려 있는 업스트림 레거시 1.4.0 도구를 사용합니다 IDA. 헤드리스 프로파일은 업스트림 " +"데이터베이스를 사용합니다. {ph0};실제 검증은 IDA 9.3 Windows 64 감독자. 의사는 시작하지 않고 등록을 확인합니다 " +"IDA." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"줘 REA 원래 실행 경로, {ph0} 에 CLI 쿼리 에이전트의 경우 다음을 포함합니다 {ph1} 그 안에 REA 등록 환경 및 선택 " +"IDA 바이너리를 열 때." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "기존의 Ghidra 설치,기능 검사:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "기능 분석" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "교체 {ph0} 검사할 함수 이름 또는 주소를 사용합니다." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "기계 코드 프로그램 세션의 분석 작동 방식" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"각 CLI 명령은 바이너리를 가져오고 분석 한 다음 세션을 닫습니다. 귀하의 에이전트의 MCP 쿼리는 해당 세션이 열려 있는 동안 가져온" +" 바이너리를 다시 사용합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "{ph0}기계 코드 프로그램 분석 예제를 따르십시오{ph1} 함수 결과가 어떻게 복구된 계산으로 이어지는지 확인합니다." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "도움 받기" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "에이전트가 표시되지 않는 경우 REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "설치 후 클라이언트를 다시 시작하거나 다시 연결합니다. 그 확인 REA 연결 {ph0};를 위해 Codex:" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "한 클라이언트 확인" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "공급자가 주의를 필요로 하는 경우" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "사용 중인 공급자를 확인하십시오. 에 대한Ghidra:" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "하나의 공급자 확인" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "이 보고서는 실패한 확인 및 제안 된 다음 단계를 제공합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "{ph0}REA 제품소개{ph1}{ph2}업데이트,에이전트 및 분석에 대한 빠른 답변.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "{ph0}조사 가이드 선택{ph1}{ph2}바이너리에 대한 작업 예제, Electron 앱 및 브라우저.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "{ph0}GitHub 문제{ph1}{ph2}명령 및 진단 문제를 보고합니다.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "{ph0}REA 커뮤니티{ph1}{ph2}질문,조사 및 진행중인 작업.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "설치 REA 그리고 코딩 에이전트 설정" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"에 연결REA를 코딩의 에이전트 또는 검사 지역JavaScript또는Electron에서 응용 프로그램 터미널도 있습니다. 설정,첫 번째 " +"질문 및 기본 공급자 가이드." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "복사Node.js버전을 확인" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "복사 Node.js 설치 명령 Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "복사 파워 셸 실행 정책 명령" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "복사 Homebrew Node.js 설치 명령" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "설치 명령 복사 macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "복사 Node.js 24 에 대한 명령 macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "설치 명령 복사 Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "복사 Node.js 24 에 대한 명령 Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA시작 안내" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "복사REA설치 프롬프트" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "에이전트 설정 복사 명령" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "복사JavaScript분석 명령" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "복사CLI설치 명령" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "기드라 연결 복사·마코스/리눅스" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "복사Ghidra연결WindowsPowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "복사 IDA 에 대한 연결 Windows 파워셸" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "기본 함수 분석 복사 명령" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "클라이언트 진단 복사 명령" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "공급자 진단 복사 명령" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}홈{ph1} / {ph2}가이드{ph3} /브라우저 관찰" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "무슨 일이 일어나는지 봐{ph0}당신이 클릭 할 때." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "작은 브라우저 앱을 사용하여 작업,네트워크 요청 및 JavaScript 즉,다운로드를 빌드합니다." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "이 가이드에서" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}예{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}브라우저 열기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}당신의 에이전트를 물어{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}에서 캡처 CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}요청 및 스크립트 읽기{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "내보내기를 클릭하면 어떻게 되나요?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"그 {ph0}참고 브라우저 예{ph1} 이 {ph2}노트 내보내기{ph3} 버튼. 그것을 클릭하면 로드 {ph4},두 음을 다음과 같이 " +"포맷합니다. CSV,그리고 다운로드를 시작합니다." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "에서 클릭하CSV다운로드" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01*당신{ph1}{ph2}메모 내보내기를 클릭합니다{ph3}{ph4}캡처를 실행하는 동안 브라우저에서 작업을 " +"수행합니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 · REA{ph1}{ph2}요청 기록{ph3}{ph4}선택한 페이지에서 요청 상태 및 응답 상태를 캡처합니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03*귀하의 에이전트{ph1}{ph2}내보내기 코드 읽기{ph3}{ph4}관찰된 요청에 연결 {ph5} 그 안에 " +"{ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "메모 내보내기를 클릭하기 전에 캡처를 시작합니다." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "오픈 Chrome 원격 디버깅" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "별도의 브라우저 프로필과 로컬 디버깅 포트를 사용하여 호스팅 노트 예제를 엽니다. 시작 Linux:" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "예제 브라우저 시작" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "복사" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "사용된 브라우저의 실행 파일 경로에macOS또는Windows. 페이지를 검사할 다른 페이지로 바꿀 수 있습니다." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "REA연결하는 이러한 기존 브라우저입니다. 당신은 페이지의 제어를 유지 작업을 수행하고 완료되면 브라우저를 닫습니다." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "에이전트에게 한 가지 작업을 시청하도록 요청" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 내가 수출 노트를 클릭하는 동안이 페이지를 검사합니다. 그것은 어떤 요청을하고,어떻게 CSV " +"내장?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "예 프롬프트. 에이전트에 디버깅 끝점 제공, {ph0} 그리고 페이지 당신이 클릭하기 전에 캡처를 시작하자." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"에이전트가 페이지 대상을 검색하고 관찰 창을 시작한 다음 결과 증거를 읽습니다. 그런 다음 내보내기 뒤에 스크립트를 검사 할 수 " +"있습니다." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "또는 터미널에서 캡처" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "페이지의 대상 아이디 찾기:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "페이지 찾기" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "참고 예제와 함께 대상을 선택합니다. 교체 {ph0} 그 아이디 아래,다음 실행:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "다음 10 초 캡처" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"명령을 몇 초 동안 연결한 다음 을 클릭합니다 {ph0}노트 내보내기{ph1} 그 브라우저에서. 결과는 관찰 창이 끝난 후에 도착합니다." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "캡처된 결과에는 선택한 페이지,해당 창 중 네트워크 활동 및 응답 모양이 포함됩니다. 이전 요청은 이 캡처 외부에 있습니다." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "요청 및 내보내기 스크립트 읽기" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "녹음된 REA 4.1.0 로컬 노트 예제" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "캡처 된 사실" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "값" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "요청" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "응답" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "요청 시작자" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} *스크립트" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "응답 구조" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} 함께 {ph1} 그리고 {ph2} 필드" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "로드된 스크립트 읽기" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"요청은 데이터 원본을 식별하고 REA 기록 {ph0} 그 시작자로서 캡처된 스크립트 원본을 읽고 데이터 사용 방법을 확인합니다:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"다운로드는 응답을 사용하여 페이지에 구성됩니다. 그 CSV 포맷 단계는 스크립트에서 온다;네트워크 캡처는이 클릭이 요청 된 " +"것을 설정합니다 {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "요청하는 스크립트 찾기 {ph0}. 쉼표 또는 따옴표가 포함 된 제목은 어떻게 이스케이프합니까?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"설치된 JavaScript 또는 Electron 앱,계속 {ph0}응용 프로그램 워크플로{ph1} 파일 및 프로세스 경계를 따르십시오." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "브라우저와 네트워크 분석—REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "함께 노트 내보내기 관찰 REA:브라우저 페이지를 선택,클릭을 캡처,요청을 검사하고 내보내기 스크립트를 따르십시오." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "브라우저 관찰" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "복사 예제 브라우저 시작" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "예제 프롬프트 복사" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "복사 페이지 찾기" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "다음 10 초 캡처 복사" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "로드 된 스크립트 읽기 복사" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}홈{ph1} /가이드" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REA가이드에 있습니다." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "네이티브 함수를 분석하면 Electron 내보내기 또는 브라우저 요청. 각 가이드에는 프롬프트,코드 및 결과가 포함됩니다." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "첫 번째 조사" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "설정REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "코딩 에이전트 연결 또는 사용 REA 터미널에서" + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "시작 REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "기계 코드 프로그램" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "왼쪽/오른쪽 사운드 위치 계산 복구" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "로 시작 Windows 게임 실행 파일. 지시 사항을 검사하고,발신자를 따르고,숫자 상수를 읽고 복구 된 것을 확인하십시오." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "기계 코드 프로그램 분석 가이드" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "따라CSV내보내기" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"작은 노트 앱은 렌더러,프리로드 및 메인 프로세스에 하나의 기능을 분산시킵니다. 사용REA연결하 API,IPC 채널 파일 작가입니다." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript&Electron가이드" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "더 큰 패키지 앱의 경우 다음을 수행합니다 {ph0}Notion클립보드 브리지의{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "브라우저 동작" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "클릭 관찰" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "작업 노트 예제를 열고 내보내기 요청을 캡처한 다음 응답을 다운로드로 전환하는 코드를 찾습니다." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "브라우저 관찰 가이드" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "리버스 엔지니어링 가이드 — REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "학습 REA 짧은 작업 예제를 통해:네이티브 계산, Electron CSV 내보내기 및 브라우저 요청." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}홈{ph1} / {ph2}가이드{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "추적 Electron{ph0}CSV 수출." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "따라 버튼을 클릭에서 페이지의 API 를 통해ElectronIPC 을CSV파일 작가입니다." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "이 가이드에서" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}예{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}당신의 에이전트를 물어{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}내보내기 코드 추적{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}예제 시도{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}검사 CSV 작가{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "\"노트 내보내기\"는 어디로 갑니까?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"이 가이드는 작은 Electron 앱 클릭 {ph0}노트 내보내기{ph1} 이 페이지에서는 기본 프로세스로 넘어가면서 이 페이지에서는 " +"기본 프로세스로 넘어가면서 이 페이지에서는 기본 프로세스로 넘어가면서 이 페이지에서는 기본 프로세스로 넘어가면서 CSV. 이 동작은 여러" +" 파일에 분산되어 있습니다." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "이CSV내보내기 전Electron프로세스" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "{ph0}렌더러→프리로드{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} 에 의해 노출 된 호출 {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "{ph0}프로세스 간{ph1}{ph2}{ph3}{ph4}{ph5}기본 프로세스에 대한 명명된 메시지입니다.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "{ph0}주요 과정{ph1}{ph2}내보내기 처리기{ph3}{ph4}{ph5} 그 채널을 처리하고 CSV 작가{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} 메모의 형식을 지정합니다. {ph1} 글쓰기 {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA치 리터럴 IPC 전화 핸들러를 식별하고 노출된 API 를 사용합니다. 경로는 코드에서 추론됩니다.런타임 캡처는 실행되는 것을 " +"확인할 수 있습니다." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "에 대해 물어 CSV 수출" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "{ph0}에이전트에 연결 REA{ph1} 그리고 그것을 응용 프로그램 디렉토리 또는 제공 ASAR 파일:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "복사" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 이 응용 프로그램에 메모를 내보낼 때 어떻게되는지 찾을 수 있습니다. 어디 CSV " +"생성?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "예 프롬프트. 응용 프로그램 폴더에 대한 절대 경로를 포함하거나 {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA 응용 프로그램 파일을 읽고 엔트리 포인트,모듈 및 프로세스 경계의 맵을 작성합니다. 에이전트가 해당 맵을 사용하여 조사 범위를 " +"내보내기 기능으로 좁힙니다." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "내보내기 코드 추적" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "이 페이지는 작은 파일을 호출합니다." + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "페이지는 메소드 이름을 알고 있습니다. 구현은 사전 로드에 존재하며,이는 렌더러에 노출됩니다." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "REA 기록 {ph0} 그리고 문자 그대로의 채널 {ph1}. 이 호출은 주 프로세스의 단일 일치 핸들러와 쌍을 이룹니다." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"핸들러를 읽으면 원래 질문에 답합니다: {ph0} 메모의 형식을 지정하고 주요 프로세스는 씁니다 {ph1} 사용자의 다운로드 폴더에 " +"넣습니다." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "녹음된 REA 4.1.0 아래 다운로드 가능한 예제에서. 소스 위치는 채널 및 핸들러 검색 결과와 함께 제공됩니다." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "예제를 직접 분석하십시오" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}다운로드 예제 우편 번호{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "여섯 소스 파일을 찾아" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "정적 애플리케이션 분석" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"경로를 압축을 푼 폴더로 바꿉니다. 하나의 채널 및 하나의 일치하는 핸들러를 찾아야합니다. {ph0}. 소스 위치는 {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"자신의 앱의 경우 디렉터리와 동일한 명령을 사용하거나 ASAR 경로. 에이전트는 다음과 같이 리터럴 문자열,이름 또는 채널을 따를 수 " +"있습니다 REA기능 추적 도구입니다." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "검사CSVwriter" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "팔로우 {ph0} 그 담당자에게 어떤 입력들이 CSV 작성자,그리고 파일 작성이 실패하면 어떻게됩니까?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"원본 위치를 사용하여 해당 세부 정보를 검사합니다. 계산된 채널 이름 및 모호한 처리기는 해결되지 않은 상태로 유지될 수 있으며 런타임 " +"관찰을 통해 이를 조사하는 또 다른 방법을 제공합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}팔로우 Notion클립보드 브리지의{ph1} {ph2}패키지된 제품에 동일한 접근 방식을 적용합니다. Electron " +"앱{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "{ph0}브라우저 내보내기 관찰{ph1}{ph2}실제 클릭을 캡처하고 만드는 요청을 참조하십시오.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "{ph0}기본 함수 따르기{ph1}{ph2}기능이 네이티브 코드에 의존 할 때 바이너리로 계속 진행하십시오.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "JavaScript및Electron분석—REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"추적 NotesCSV수출을 통해 렌더러 API,미리 로드하고 IPC 처리기REA. 다운로드 가능한 예제 파일과 검증 된 분석 결과를 " +"포함합니다." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "예제 프롬프트 복사" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "정적 애플리케이션 분석 복사" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "{ph0}홈{ph1} / {ph2}가이드{ph3} /기계 코드 프로그램 분석" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "복구 DX-Ball의{ph0}사운드 팬 계산." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "원래 명령어를 검사하고 입력 및 상수를 식별 한 다음 복구 된 기음을 확인하십시오." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "이 가이드에서" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}예{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}당신의 에이전트를 물어{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}읽기 REA 결과{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}복구 및 확인{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}자신의 바이너리 사용{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "왼쪽/오른쪽 스테레오 사운드 위치 계산" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "그 안에 DX-Ball,벽돌 타격은 수평 화면 위치를 제공합니다. 사운드 코드는 왼쪽/오른쪽 패닝 값으로 바뀝니다." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"시작 기능, {ph0},짧은 디컴파일러 결과가 있습니다. {ph1}. REA 또한 지시 사항과 호출자를 반환합니다.이는 에이전트에게 " +"누락된 계산을 조사하는 방법을 제공합니다." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "이 약관에 새로운?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}지침:{ph1} 프로세서가 실행하는 단계는 다음과 같이 읽을 수 있는 형태로 표시됩니다. {ph2} 또는 {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}디 컴파일러 결과/의사 코드:{ph1} 명령어를 다시 씨와 같은 코드로 바꾸려는 분석 도구의 시도. 이 예제에서와 같이 부품을 " +"놓칠 수 있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "{ph0}호출자:{ph1} 이 함수를 호출하는 함수입니다. 어떤 값이 전달되는지 보여줍니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "{ph0}주소:{ph1} 프로그램에서 16 진수로 작성된 위치 {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "{ph0}상수:{ph1} 프로그램에 저장된 고정 번호는 원시 바이트로 읽고 디코딩." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "세 가지 증거,하나의 계산" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01*지침{ph1}{ph2}정수 입력{ph3}{ph4}스택 읽기는 부동 소수점 명령에 사용되는 값을 제공합니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "{ph0}02*발신자{ph1}{ph2}스크린 좌표{ph3}{ph4}이 함수를 호출하는 브릭 히트 함수는 {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03*데이터 바이트{ph1}{ph2}숫자 상수{ph3}{ph4}참조된 바이트는 {ph5}, {ph6} 그리고 스케일 " +"값.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "REA 명령어,호출 관계 및 바이트를 제공합니다. 에이전트는 그들을 함께 해석합니다." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "행동에 대해 물어보십시오" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"그 후 {ph0}연결 REA 당신의 대리인에게{ph1} 그리고 {ph2}기본 분석 도구 설정{ph3},로컬 실행 파일 및 질문을 " +"제공합니다:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "어떤 분석 도구를 사용해야합니까?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA 기본 프로그램을 읽기 위해 이들 중 하나가 필요합니다:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0}Hopper{ph1} (macOS 또는 Linux): REA설치 프로그램에서 감지하거나 설치하도록 제안합니다. 시작 " +"macOS,오픈 Hopper 한 번 데모 모드를 선택하거나 첫 번째 분석 전에 라이센스를 활성화하십시오." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0}Ghidra{ph1} (macOS 또는 Linux;실험적 Windows):무료,하지만 기존의 필요 Ghidra 12.1.64 " +"비트 또는 그 이상." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "{ph0}IDA{ph1} (Windows):기존의 IDA 설치 MCP 등록." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "보시다시피 {ph0}기계 코드 프로그램 분석 설정{ph1} 단계를 위해." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "복사" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 방법을 찾으려면 DX-Ball 사운드 패닝을 계산합니다. 계산을 설명하고 코드를 " +"보여줍니다.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"예 프롬프트. 너의 대리인에게 너의 지방 주민에 경로를 주십시요 DX-Ball 1.07 실행 파일. REA 포함하지 않습니다 DX-" +"Ball,그래서 당신 신 사,또는 다른 대 문 같 류 Windows 당신이 가진 프로그램." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "파일의 전체 경로를 어떻게 얻을 수 있습니까?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1} 파일 탐색기에서 파일을 마우스 오른쪽 단추로 클릭하고 다음을 선택합니다 {ph2}경로로 복사{ph3}." +" 시작 Windows 10,마우스 오른쪽 버튼을 클릭하는 동안 이동을 누르고 있습니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0}macOS:{ph1} 파인더에서 파일을 마우스 오른쪽 단추로 클릭하고 옵션을 누른 다음 선택합니다 {ph2}경로 " +"이름으로\"...\"복사{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "{ph0}모든 시스템:{ph1} 파일을 터미널 창으로 드래그하면 해당 경로가 나타납니다." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "읽REA결과" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "입력 읽기" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "명령은 정수 인수를 로드하고 부동 소수점 계산으로 변환합니다. 이것은 첫 번째 유사 코드 뷰에서 없는 입력입니다." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "발신자 팔로우" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA 브릭 히트 호출자를 식별합니다. 이전 명령은 타일 좌표에 30 을 곱합니다. {ph0} (20)벽돌의 화면 위치를 제공합니다." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "참조된 상수 읽기" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "산술은 이러한 주소를 참조합니다. 바이트를 읽으면 실제 값이 제공되며,명령 순서는 에이전트에 어떻게 사용되는지 알려줍니다." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "복구 된 기능 작성 및 확인" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"눈금이 1.0 인 경우 화면 위치 0,320 및 640 은 정수 변환 전에 -500,0 및 500 으로 매핑됩니다. 계산은 화면의 중심을" +" 스테레오 필드의 중앙에 놓습니다." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"사용 된 에이전트 REA3,205 개의 입력을 원래의 86 함수와 비교하고 전체 함수의 63 개의 컴파일된 바이트를 모두 재현했습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}전체 조사 및 어셈블리 간 비교를 참조하십시오{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "자신의 바이너리 그것을 시도" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}기계 코드 프로그램 공급자의 분석을 연결{ph1},그런 다음 에이전트에 로컬 실행 파일 또는 라이브러리와 조사 할 기능을 " +"제공하십시오. 유용한 시작 질문에는\"이 파일은 어떻게 분석됩니까?\"또는\"이 메뉴 동작을 처리하는 기능은 무엇입니까?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "함수 이름 또는 주소를 이미 알고 있는 경우 터미널에서 쿼리할 수 있습니다. 구성된 Ghidra 설치:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "기능 분석" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"대상 경로를 대체하고 {ph0} 자신의 함수 이름 또는 주소로. 각 CLI 호출은 바이너리를 가져오고 분석 한 다음 세션을 닫습니다. " +"귀하의 에이전트의 MCP 쿼리는 해당 세션이 열려 있는 동안 가져온 바이너리를 다시 사용합니다." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"지침 및 참조와 함께 의사 코드를 읽으십시오. 결과에서 호출 또는 값이 해결되지 않으면 해당 위치를 다음 질문으로 사용합니다." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "네이티브 바이너리 분석 — REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "기본 계산 복구 REA:지시 사항을 검사하고,발신자를 따르고,상수를 읽고 재구성 된 것을 확인하십시오." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "기계 코드 프로그램 분석" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "예제 프롬프트 복사" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "복사 함수 분석" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "설정REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}설정 REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}다시 무엇입니까?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}REA가 돕는 방법{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}공룡 게임{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}계산기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}시도해봐 REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}더 깊이 알아보기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}도움말 및 피드백{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}커뮤니티{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "코딩 에이전트와 함께 리버스 엔지니어링" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "소프트웨어가{ph0}어떻게 작동하는지 알아보세요." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "REA는 코딩 에이전트가 프로그램을 조사하고 동작을 설명할 수 있도록 분석 도구를 제공합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "이미 다시 알고? {ph0}분석 가이드로 건너뛰기.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "더 깊이 가고 싶습니까? {ph0}블로그 읽기→{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "이 프롬프트를 코딩 에이전트에 붙여 넣으세요:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "복사" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "터미널에서 직접 실행할 수도 있습니다:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "설정 변경 계획을 확인하고 승인한 뒤 에이전트를 다시 시작하세요." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "리버스 엔지니어링이란?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "{ph0}프로그램 자체를 조사해서{ph1} 소프트웨어의 작동 방식을 알아내는 것입니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "목표:충분히 기능을 이해 {ph0}그것을 설명{ph1}, {ph2}변경{ph3} 또는 {ph4}그것을 재건하십시오.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "REA 사용 전 · {ph0}직접{ph1} 조사합니다" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} 분기 디코딩" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} 추적 호출" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} 규칙 복구" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}원본 64*선택한 지침{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01*어떤 지점?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "“{ph0}? -그래?{ph1} 같은 장소에 두 점프. 이들은 어떤 연산자입니까?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "명령 아이디를 조회 한 다음 브랜치에 레이블을 지정하십시오." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "분÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "곱하기×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · 호출된 함수는 무엇을 하나요?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "100 은 분명하다. 전화는 단지 주소 일뿐입니다. {ph0}어느 쪽이 나눌까요? 어떤 값이 들어가나요?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "도우미 함수를 검사하고 저장된 값을 추적합니다." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "나누기" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03*규칙은 무엇입니까?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "\"이 경로는 다른 입력으로 곱합니다. 그래서 {ph0}10%는 200 의 10%를 의미합니다.{ph1} +후”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "피연산자의 이름을 지정하고 두 연산자 경로를 모두 확인하십시오." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "예시 전문가 추론" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "{ph0}당신은 명령을 디코딩 함수 호출을 따라 계산을 재구성.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "REA 사용 시 · {ph0}에이전트{ph1}에게 묻습니다" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "프롬프트 하나면 됩니다." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "에이전트에게 {ph0}일상적인 말로{ph1} 질문하세요." + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}예제 프롬프트*계산기" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "예제 답변·결과에 따라" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "+후,%버튼이 걸립니다 {ph0}첫 번째 숫자의 백분율.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA가 제공하는 정보" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "핸들러의 명령,디 컴파일 된 코드 및 호출." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "에이전트가 설명하는 내용" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "어떤 분기가 적용되는지,무엇을 계산하고 다시 작성하는 방법." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "설치된 계산기에서 선택한 어셈블리. 생각과 대답은 그 결과를 보여줍니다. {ph0}계산기 예제를 계속 진행하십시오.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "{ph0}두 가지 예를 들어 보겠습니다.{ph1} 게임의 속도를 변경 한 다음 계산기로 돌아가서%버튼을 다시 작성하십시오." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "예 01·Chrome's 룡 게임" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "공룡은 왜 점점 빨라질까요?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "목표" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "와 게임을 다시 {ph0}조정 가능한 속도.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "왜 그것을 리버스 엔지니어링합니까?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "가속도를 재현하려면 {ph0}실행중인 게임의 규칙{ph1}:얼마나 빨리 시작,얼마나 증가하고 멈출 때." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "재구성한 게임 플레이" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "시작" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "점프 ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "다시 시작" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "속도" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "복구된 가속 규칙 사용" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "원래 규칙:6 에서 시작한 다음 13 으로 늘립니다." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "자신의 속도를 설정하는 슬라이더를 이동합니다. 공간 또는 점프는 선인장을 지 웁니다." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "사용JavaScript을 재생하는 재건. 위의 코드와 설명은 읽을 수 있습니다." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA가 반환한 결과" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}스크립트는 실제로 페이지에서 실행.{ph1} 에이전트는 업데이트 기능 및 속도 설정을 읽은 다음 새 게임에서 해당 규칙을 " +"사용합니다." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}예제 프롬프트*공룡 게임" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 이 공룡 게임을 검사합니다. 왜 더 빨리 얻을 수 있습니까? 속도 규칙을 표시 한 다음 조정 " +"가능한 속도로 작은 버전을 만듭니다.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "검사 대상: {ph0}와이우의 Chromium-파생 브라우저 에디션{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}시작 6.{ph1} 추가 {ph2}0.001{ph3} 충돌없이 각 업데이트,속도가 아래에있는 동안 {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "스피드 랩을 엽니다." + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "각 부분이 하는 일" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 · REA{ph1}{ph2}실행중인 게임의 스크립트 읽기{ph3}{ph4}실제 코드와 설정을 에이전트에 " +"반환합니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02*귀하의 에이전트{ph1}{ph2}규칙 다시 작성,컨트롤 추가{ph3}{ph4}속도 슬라이더와 작은 게임에서 복구 가속을 " +"사용합니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03*당신{ph1}{ph2}속도 변경 및 재생{ph3}{ph4}원래 가속을 시도한 다음 자신의 페이스를 선택하십시오.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "스크립트,검사 및 분석 시도 방법을 참조하십시오" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA 로컬 디버깅 연결을 통해 브라우저 버전을 검사하고 로드된 버전을 반환했습니다. {ph0},그 원천과 다이제스트를 " +"포함합니다." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"우리는 장애물과 자동 스케줄링이 비활성화 된 제어 된 브라우저 검사에서 원래 게임의 업데이트 기능을 호출했습니다. 4,000 개의 " +"업데이트 후,속도는 10.0 이었고,10,000 개의 업데이트 후,13.0 이 되었고,10 진수로 반올림되었습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"새로운 미니 게임은 그 속도 규칙을 유지합니다. 그리기,점프 및 충돌 코드는 작은 교육 구현입니다. {ph0}실험실 열기{ph1} 새 " +"코드를 확인하고 동일한 속도 검사를 실행합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"대상을 직접 검사하려면 다음을 수행하십시오 {ph0}브라우저 연결 단계{ph1} 사용 {ph2}공룡 페이지{ph3}. 에이전트에 해당 " +"페이지 및 로컬 디버깅 끝점을 지정한 다음 위의 프롬프트를 복사합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "{ph0}검사된 속도 코드{ph1} · {ph2}Chromium 저자*비스 디 라이센스{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "예 02·Windows계산기" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "계산기의 % 버튼을 재현해 봅니다." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "처리하는 작은 계산기를 구축 {ph0}+및 2018 년 11 월 13 일.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"같은 버튼 사용 {ph0}+및 2019 년 이후의 다른 규칙.{ph1} 우리는 비율이 적용되는 번호를 찾기 위해 설치된 응용 프로그램을 " +"검사합니다." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "계산 시도" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "초기화" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10%의 200=20. 그런 다음 200+20=220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "검사된 백분율 규칙의 대화형 그림입니다." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}한 가지가 100 으로 나뉩니다. 다른 하나는 또한 첫 번째 숫자를 곱합니다.{ph1} 에이전트는 둘 다 사용하여%단추를 다시 " +"만듭니다." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "이 예제에서는, {ph0} 그리고 {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}예제 프롬프트*%단추 다시 작성" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 검사 Windows 계산기의%버튼. +와 200 이후의 규칙을 복구 한 다음 둘 다 사용하는 " +"작은 계산기를 만듭니다.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "+와 함께" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}첫 번째 숫자의 10%를 가져 가라.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "와×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}10%를 0.1 로 바꿉니다.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "설치된 앱에서 작동%버튼으로" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 · REA 도서관 읽기{ph1}{ph2}%핸들러의 코드를 반환합니다{ph3}{ph4}이 함수는 연산자를 확인하고 상수를 " +"사용합니다 {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03*당신의 에이전트는 그것을 해석{ph1}{ph2}규칙 설명 및 재현{ph3}{ph4}마이크로 소프트의 소스와 지점을 교차 " +"검사 한 다음 위의+및 200 을 시도하십시오.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "실제 코드 및 답변 확인 방법 보기" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"검사와REA4.1.0:Windows계산기 11.2508.4.0,x64. 읽을 수있는 요약은 복구 된 지점을 설명하기 위해 마이크로 " +"소프트의 공개 소스에서 이름을 사용합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "{ph0}백분율 구현{ph1} · {ph2}마이크로소프트의 테스트 케이스{ph3} · {ph4}기본 설정 가이드{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "첫 번째 조사" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "시도해봐 REA 작은 응용 프로그램에." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "우리의 노트 예제를 다운로드,그 추적 CSV 수출,하나의 변경된 입력을 확인합니다." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "가이드 예제를 사용해보십시오" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "더 깊이 알아보고 싶나요?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"당신이 이해하거나 구축하고 싶은 당신의 에이전트를 말한다. 함께 REA,당신은 아무것도 함께 작업 할 수 있습니다 {ph0}이 웹 사이트" +" 복제{ph1} 에 {ph2}실행 파일에서 게임을 재구성합니다.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}프롬프트 예*웹 사이트" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "예,이 하나." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}예제 프롬프트*게임 재구성" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 이 게임을 실행 파일에서 재구성합니다. 다에서 게임 플레이 로직을 복구하고 원본에 대해 " +"테스트합니다.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}보 DX-Ball 사례 연구→{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "설정 및 분석 단계에서 대상을 선택합니다:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "기계 코드 프로그램" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "실행 파일 및 라이브러리에서 함수,문자열,참조 및 함수 호출 관계를 검사합니다." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "기계 코드 프로그램 분석 가이드" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "응용 프로그램 폴더에서 모듈,경로 및 기본 종속성을 매핑하거나 ASAR 아카이브" + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "애플리케이션 워크플로" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "브라우저 및 런타임 활동" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "선택한 브라우저 또는 프로세스 활동을 캡처 한 다음 여러 실행에서 결과를 비교합니다." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "브라우저 관찰 가이드" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "궁금한 점이 있나요?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}자주 묻는 질문 읽기{ph1}, {ph2}에 우리와 함께 채팅 Discord{ph3},또는 {ph4}오픈 GitHub " +"문제{ph5} 버그 및 기능 요청." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "커뮤니티 참여" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "조사를 공유하고 다른 사람의 도움을 받으십시오 REA 사용자 Discord. 팔로우 REA 프로젝트 업데이트에 대한 엑스." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA -코딩 에이전트를 위한 리버스 엔지니어링" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"코딩 에이전트를 사용하여 앱,바이너리 및 브라우저 동작을 리버스 엔지니어링합니다. 명확한 가이드를 따라 대화 형 예제를 사용해보십시오 " +"REA." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "복사REA설치 프롬프트" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "설치 명령 복사" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "수동 계산기 분석을 따르십시오" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "복사 계산기 백분율 질문" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "공룡 미니 게임. 게임이 집중되는 동안 점프 버튼을 누르거나 공간을 사용합니다." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "복사 공룡 분석 프롬프트" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "계산 선택" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "복사 계산기 분석 프롬프트" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "웹 사이트 프로젝트 프롬프트 복사" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "복사 게임 재건 프롬프트" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}홈{ph1} / {ph2}쇼케이스{ph3} /안드로이드" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "사례 연구·Aegis인증" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "인증자는 어떻게{ph0}로그인 코드를 생성 하시겠습니까?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"6 자리 코드는 30 초마다 변경됩니다. 사용 REA 안드로이드에서 계산을 찾으려면 APK,그리고 당신이 제어할 수 있는 시계로 다시 " +"만들죠." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis3.4.3·안드로이드·공식 출시APK·6.9MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "보기 Aegis 시작 GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "에서APK코드를 재현할 수 있습니다" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01*기능 찾기{ph1}{ph2}3,077 개의 클래스 생성 메소드 3,077 개의 클래스 생성 메소드{ph3}{ph4}REA " +"패키지를 검색하고 표시 및 복사 작업에 사용되는 코드를 추적합니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02*계산 읽기{ph1}{ph2}시간+계정 키 6 자리 숫자{ph3}{ph4}REA 메서드 및 기본값을 반환합니다. 에이전트는 " +"그들이 어떻게 어울리는지 설명합니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03*재 구축 및 확인{ph1}{ph2}시계를 변경하십시오. 코드를 보세요.{ph3}{ph4}새로운 브라우저 데모는 규칙을 " +"재현하고 공개 참조 사례에 대해 확인합니다.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "이 사례 연구에서" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}당신의 에이전트를 물어{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}코드 생성기 사용해보기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}코드 찾기 REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}계산 읽기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}재건 확인{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}검사 APK 너 자신{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "당신의 에이전트를 물어" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"응용 프로그램은 변화하는 로그인 코드를 보여줍니다. 우리는 찾고 싶어 {ph0}무엇이 그것을 변화 시키는가{ph1} 그리고 그 행동을 " +"재현하십시오." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "복사" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"다운로드 한 사용자에 대한 예제 프롬프트 APK,함께 REA안드로이드 분석이 구성되어 있습니다. {ph0}를 얻을 APK 고 분석 " +"설정↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "코드 생성기 사용해보기" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"앱 그룹 시간에 {ph0}30 초 블록.{ph1} 블록 번호와 계정 키를 결합하여 코드를 생성합니다. 동일한 키와 블록은 동일한 코드를 " +"생성합니다." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "60 초에 걸쳐 시계를 이동" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "시간" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "초" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "우리의 조정 가능한 예제 시계" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30 초 블록" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "블록" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 초{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "생성된 코드" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "계정 키+블록 6 자리 숫자" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "예제 시간(초)" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 초" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 초" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"59 초: {ph0}287082.{ph1} 60 초: {ph2}359152.{ph3} 한 블록 내에서 이동하면 코드가 변경되지 않습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "키는 고정,공개 {ph0}6238 테스트 데이터{ph1}. 데모에서 복구 된 계산을 구현 APK." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "다이어그램은 59 초에 결과를 보여줍니다. 활성화 JavaScript 시계를 바꾸기 위해서." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "코드를 찾으로REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "좁은 APK 세 가지 클래스" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} 계산 후보입니다.다른 두 개는 진행률 표시줄과 가져온 계정에 관한 것입니다. TOTP 시간 기반 일회성 암호를 의미합니다." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "생성기를 앱의 디스플레이에 연결" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA 타임스탬프 오버로드를 식별하고 기본 메서드의 호출자를 찾습니다. 검사 {ph0} 그런 다음 디스플레이 호출을 보여줍니다 " +"{ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "요청은 단축된 입력 경로를 표시합니다. 결과 클래스 이름은 공통 클래스를 생략합니다. {ph0} 사전" + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "계산 읽기" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA 반환 {ph0}시계 변환,기본 설정 및 생성 방법.{ph1} 생성자는 30 초 간격과 6 자리 숫자를 설정합니다.타임 스탬프 " +"방법은 초를 블록 번호로 바꿉니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} 시간 차단" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} 키+블록" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} 여섯 자리" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}시간은 블록을 선택합니다.{ph1} 초 30 부터 59 까지 모두 블록 1 을 제공합니다. 60 초 후에 블록은 2 가 됩니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}핵심 문제도 마찬가지입니다.{ph1} 생성기는 계정 키와 블록을 결합합니다. 키가 다른 계정은 동시에 다른 코드를 표시할 수 " +"있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}6 자리 숫자를 유지하십시오.{ph1} 1,000,000 으로 나눈 후의 나머지 부분은 필요할 때 0 으로 채워져 " +"있습니다.그래서 코드는 0 으로 시작할 수 있습니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"여러 검사 방법에서 발췌,디스플레이 라인 포장. 오른쪽 패널은 설명 요약입니다. {ph0}Aegis 코드는 다음과 같습니다.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "발전기 내부" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"석방 된 사람 들 APK 풋 {ph0} 그 안에 {ph1}. REA 에서 전화를 다음과 {ph2} 그리고 이 몸을 반환합니다.원래의 " +"소스는 도우미를 호출합니다. {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"마지막 해시 바이트는 위치를 선택합니다. 그 위치 에 있는 4 바이트 는 31 비트 의 양수 를 제공 합니다.포맷 을 지정 하면 요청 된" +" 자릿수 로 줄일 수 있습니다. 생성자의 마지막 인수는 컴파일에 의해 도입된 코드 서식 분기를 선택합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}일치하는 릴리스 소스와 비교{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "재건 확인" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"우리는 선택한 것을 조립했습니다 REA-작은 테스트 프로그램에서 자바 메소드를 반환했습니다. 그들의 출력은 독립적인 재구성과 " +"일치했습니다. {ph0}133 테스트 케이스{ph1} 시간 블록 경계와 0 으로 시작하는 코드를 포함합니다." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "예제 시간" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "6 자리 코드" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 초" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 초" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"발전기는 또한 6 개의 발표된 것과 일치합니다. SHA-1 참조 사례 {ph0}6238{ph1}. 그들에 대한 브라우저 구현을 " +"확인하십시오:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "참조 검사 실행" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "데모 계산 읽기" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "참조 케이스는 8 자리 숫자를 사용합니다. 이 검사는 또한 6 자리 결과를 확인합니다." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "검증은 추출 된 자바 메소드와 새로운 데모를 실행합니다. 안드로이드APK검열되었으로 합니다." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "검사 APK 너 자신" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}설정 REA{ph1} 시작 macOS 또는 Linux 그런 다음 이 두 파일을 동일한 폴더에 다운로드합니다. 시작 " +"Windows,사용 Linux 같은 환경." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "안드로이드 분석은 전체 17 이상 필요합니다. 함께 선택 {ph0} 또는 {ph1}. 이 사건은 21 번을 사용했습니다." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "포인트 REA 공급자 파일에서 검사 APK:" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"에이전트를 통해 계속할 수 있습니다 REA의 CLI 위의 프롬프트를 사용하여. 에 대한 MCP,추가 {ph0} 에 REA 서버의 환경을 " +"다시 연결합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "다음 질문: {ph0}계정이 8 자리 또는 다른 시간 간격을 사용할 때 어떤 일이 발생합니까?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "출처" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "{ph0}공식 Aegis 3.4.3 릴리스{ph1} · {ph2}일치하는 소스 커밋{ph3} · {ph4}라이센스{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}6238 참조 사례{ph1} · {ph2}데모 테스트 데이터{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"로 검열하는 REA 6.1.0 2026 년 10 월 9 일 분해된 부분들은 Aegis;다이어그램,읽을 수 있는 요약 및 브라우저 재구성은" +" 새로운 교육 자료입니다." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK 역공학 로그인 코드—REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "검사Aegis안드로이드APK와REA,복 그 자리에 로그인 코드 계산 하고 재건을 가진 조정가능한 시계입니다." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "AegisAPK사례 연구" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "복사 Aegis 프롬프트 예" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "로그인 코드 계산을 따르십시오" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "복사APK명령 검사" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}홈{ph1} / {ph2}쇼케이스{ph3} /" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "사례 연구*2023 년" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "깃발 찾기{ph0}바이너리." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "사용 REA 작은 플래그 검사기를 검사하려면 규칙을 방정식으로 바꾸고 원래 프로그램을 인쇄하는 입력을 찾으십시오 {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "크 사각형 국기 검사기·조명·Linuxx86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "원래 도전 보기" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "바이너리에서 체크된 답으로" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01*수표 찾기{ph1}{ph2}문자열에 대한 자세한 내용은 문자열에 대한 정보를 참조하십시오.{ph3}{ph4}REA " +"프롬프트,해당 참조 및 입력을 수락하거나 거부하는 코드를 찾습니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02*규칙 추출{ph1}{ph2}36 자*26 합계{ph3}{ph4}REA 각 검사 뒤에 있는 지침과 데이터를 반환합니다. " +"에이전트는 그것들을 방정식으로 바꿉니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03*해결 및 실행{ph1}{ph2}복구 된 플래그가 올바른지 확인하십시오!{ph3}{ph4}파이썬 스크립트는 방정식을 " +"해결합니다. REA 결과를 받아들이는 원래 프로그램을 캡처합니다.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "이 도전은 조셉의 작품으로,다운더크의 공식 저장소에 출판되었습니다." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "이 사례 연구에서" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}검사 코드 찾기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}하나의 마스크 읽기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}읽을 수있는 코드로 어셈블리{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}방정식 풀기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}답변 확인{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}그것을 자신을 시도{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "검사 코드 찾기" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"유인물은 15 킬로바이트 실행 파일입니다. 그것은 깃발을 요구 한 다음 인쇄합니다 {ph0} 또는 {ph1}. 에이전트에 대한 간단한 " +"요청으로 시작하십시오." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "복사" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 그리고 플래그를 찾을 수 있습니다. 검사가 어떻게 작동하는지 설명 한 다음 원래 프로그램으로 " +"답을 확인하십시오.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "다운로드 한 도전을 로컬에서 사용할 수 있고 기계 코드 프로그램 분석 제공자가 연결된 예제 프롬프트." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "입력 프롬프트를 따라 해당 기능을 수행합니다" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "이 참조는 실행 파일의 원래 함수 이름이 제거되었음에도 불구하고 에이전트에게 조사할 장소를 제공합니다." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "검사기 및 두 도우미 읽기" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"첫 번째 루프는 36 자 코드를 복사합니다. 검사 루프는 마스크를 해독하고 선택한 코드를 합산하고 결과를 저장된 번호와 비교합니다. " +"그것의 {ph0}-바이트 단계 {ph1} 바이트는 26 개의 마스크를 제공합니다." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"이들은 신선한 결과에서 선택된 결과입니다. REA 분석. 로컬 대상 경로는 표시를 위해 단축됩니다.주소는 다음을 참조합니다. REA가져온" +" 이미지입니다." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "한 번 확인하면 한 명의 캐릭터가 나타납니다." + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"검사기는 6 개의 6 개의 격자로 입력을 배열합니다. 마스크는 어떤 세포가 합에 기여하는지 선택합니다. 그 콤팩트한 인코딩은 음수를 " +"사용하여 셀을 건너뛰고 양수를 사용하여 선택합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "일곱 번째 검사는 하나의 위치를 선택합니다. {ph0}열린 그림{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "바이너리에서 마스크 및 대상 읽기" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"지시 {ph0} 마스크 바이트를 부호있는 값으로 읽습니다. 이것이 바로 {ph1} -21 을 의미합니다. 목표는 작은 엔디안 정수입니다." +" 이 바이트는 에이전트에게 {ph2},그래서 그 캐릭터는 {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "지시 사항부터 읽을 수 있는 검사까지" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "합산 도우미와 해당 호출 함수를 동일한 규칙에 연결하는 단계를 선택합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} 시작" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} 선택" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} 추가" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} 사전" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} 비교" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA·선택한 원래의 지침" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "읽기 쉬운 씨*원 체크 요약" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01*0 에서 시작합니다.{ph1} {ph2} 실행 금액을 보유합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "{ph0}02*마스크 셀을 확인합니다.{ph1} 0 값은 문자를 건너뛰고 0 이 아닌 값은 문자를 포함합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "{ph0}03*문자 코드를 추가합니다.{ph1} 같은 오프셋에 있는 입력의 정수가 합에 더해집니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04*다음 셀로 이동합니다.{ph1} 원래 루프는 정수당 4 바이트를 앞당기고 6 개의 셀의 6 개의 행을 방문합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "{ph0}05*저장된 대상과 비교.{ph1} 호출 함수는 {ph2}. 불일치가 {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "지침은 합산 도우미 및 호출 함수에서 제공됩니다. 다 설명 요약 설명 이름과 평평한 36 셀 루프." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "26 방정식 풀기" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"대부분의 마스크는 여러 셀을 선택합니다. 예를 들어,첫 번째 검사는 16 개의 문자 코드를 추가하고 총 1441 개가 필요합니다. 겹치는" +" 선택은 작은 파이썬 스크립트가 함께 풀 수 있는 방정식을 제공합니다." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "파이썬*솔버 발췌" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"지 3 이 방정식을 만족시키는 값을 찾는 솔버입니다. 이 발췌문은 추출 된 검사를 사용하고 다음을 가정합니다 {ph0} 문자,숫자,밑줄 " +"및 중괄호가있는 플래그. 전체 다운로드에는 26 개의 마스크와 타겟이 모두 포함되어 있습니다." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "전체 해결사 다운로드" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "원래 프로그램으로 답을 확인" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REA'프로세스 캡처'는 해결된 플래그를 받아들이는 원래 실행 파일을 기록합니다. 에서 선택한 문자 하나를 변경 {ph0} 에 {ph1}" +" 첫 번째 합계를 만든다 1440 대신 1441,프로그램은 그것을 거부." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "입력" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "관찰된 산출" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "종료 코드" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "솔버의 깃발" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "한 문자 변경" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "복구된 플래그 및 캡처된 출력 표시" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA·원래 출력 프로그램" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "플래그 복사" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "복구된 값은 또한 조직자의 게시된 챌린지 메타데이터의 플래그와 일치하며,바이너리를 해결한 후 확인됩니다." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "출처,대상 신원 및 분석 세부 정보" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"신선한 분석 및 두 개의 프로세스를 캡처에서 8 월 2026 를 사용하여,REA4.1.0 와Ghidra12.1.4 에Linuxx64. " +"바이너리는 86-64 엘프,15,248 바이트입니다." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "문자열 참조,함수 및 상수는 조직자의 소스 또는 솔루션을 읽기 전에 검사되었습니다. 파이썬 솔버와 다이어그램은 REA 결과." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}주최자의 출처와 비교{ph1} · {ph2}챌린지 메타데이터 및 플래그{ph3} · {ph4}REA 증거 노트{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "그것을 자신을 시도" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"하나의 폴더에 원래의 도전과 솔버를 다운로드합니다. 위의 프롬프트를 사용하여 에이전트와 함께 조사하거나 포함된 스크립트를 실행합니다." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "터미널*해결 및 실행" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"이 스크립트는 후보 플래그를 인쇄;프로그램의 프롬프트에 붙여 넣습니다. 해결은 파이썬과 {ph0}. 원래 실행 파일 실행 필요 Linux" +" 86-64 번" + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "설정 REA 코딩 에이전트와 함께" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "리버스 엔지니어링:다운 언더 코드 플래그 검사기 — REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"사용REA를 해결하 DownUnderCTF 마스크의 사각형 국기 검사기입니다. 검사 기능을 찾아 마스크를 추출하고 복구 된 플래그를 원래" +" 프로그램과 비교하십시오." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "플래그 검사기 사례 연구" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "예제 프롬프트 복사" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "작은 화면에서 가로로 스크롤" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"일곱 번째 마스크는 21 개의 셀을 건너 뛰고 위치 21 을 선택한 다음 14 를 건너 뜁니다. 그 셀만이 합에 기여합니다. 필요한 문자" +" 코드는 55 입니다.즉,문자는 7 입니다." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "클릭률 확인을 따르십시오" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "어셈블리 복사" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "읽을 수 있는 클릭률 확인 복사" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "복사 클릭률 솔버 발췌" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "복구 된 플래그 복사" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "명령 복사" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}홈{ph1} / {ph2}쇼케이스{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "사례 연구·DX-Ball1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "재건 DX-Ball{ph0}실행 파일에서." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"목표는 1996 의 유지 가능한 다 버전입니다 Windows 게임. REA 에이전트가 원본,한 번에 하나의 기능을 검사하는 데 " +"도움이됩니다." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windowsi386·C·REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"하나의 기능,실행 파일에서 확인 된 기음. REA 지침,호출자 및 데이터 읽기를 제공하고 재구성 프로젝트는 결과를 구현하고 테스트합니다." +" {ph0}열린 그림{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "이 사례 연구에서" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}프로젝트{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}사운드 팬{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}결과 확인{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}작업을 계속{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "유지 된 기능" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "원본 코드와 비교" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "컴파일된 바이트가 일치하는 함수" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "프로젝트 체크 포인트:2026 년 10 월 7 일. {ph0}진행 원장{ph1} · {ph2}테스트 범위{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "지금까지의 프로젝트" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"복구 된 코드는 보드 및 리소스 처리,벽돌 히트,애니메이션,입자 및 보너스 생산을 포함합니다. 현재 빌드는 검사 유틸리티와 분석 " +"라이브러리를 제공합니다. 재생 가능한 게임에 대한 작업은 공 및 패들 물리학,파워 업 처리 및 Windows 통합." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "왼쪽/오른쪽 사운드 위치 계산 찾기" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"벽돌이 부딪히면 수평 위치가 사운드 코드로 전달됩니다. 이 조사는 화면 좌표가 왼쪽/오른쪽 패닝 값이 되는 방법을 복구하는 데 " +"필요했습니다." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "복사" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 방법을 찾으려면 DX-Ball 사운드 패닝을 계산합니다. 계산을 설명하고 코드를 " +"보여줍니다.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "로컬 실행 파일을 사용할 수 있는 코딩 에이전트에 대한 예제 프롬프트입니다. 아래의 조사는 REA 답변 뒤에 쿼리 및 증거." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"사용 된 에이전트 REA 함수를 검사하려면 브릭 히트 호출자를 따라 실행 파일에서 상수를 읽습니다. 그 결과는 아래의 기음 함수를 " +"작성하는 데 필요한 입력 및 산술을 제공했습니다." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"에 대한 함수의 첫 번째 분석 결과 {ph0} 포함 된 의사 코드 선언 {ph1} 그리고 전화 {ph2}. 명령어 뷰는 스택 입력과 부동" +" 소수점 연산을 보여주었습니다. 그 불일치로 인해 에이전트는 계속 조사해야 할 구체적인 이유를 얻었습니다." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "첫 번째 디 컴파일러 뷰" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "출력은 전환 호출을 보여줍니다. 아래의 지침을 읽는 것은 입력 및 통화 공급 계산을 알 수있다." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "세 가지 질문에 대한 답변 REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "누락된 입력 복구" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"함수 결과에는 의사 코드 및 호출 함수와 함께 명령어가 포함됩니다. 여기, {ph0} 디컴파일러 보기에서 누락된 정수 입력을 노출합니다." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "발신자를 따라 입력 내용을 파악합니다" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA 첫 번째 결과에서 이 호출자를 식별했습니다. 이전 명령어 스케일 {ph0} 30 으로;20 을 더하면 벽돌의 화면 좌표가 " +"나옵니다, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "메모리 주소 뒤에 있는 값 읽기" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "반환된 바이트는 두 개의 산술 상수와 초기 팬 스케일을 설정합니다. 이제 에이전트에 필요한 값이 있습니다." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "에서REA's 결과 C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "아래의 다섯 단계를 따르십시오. 각 선택 항목은 원래 지침과 그들이 알려준 다 라인을 강조 표시합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} 입력" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} 곱하기" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} 빼기" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} 규모" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} 반환" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "원본 86*발췌" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "재구성된" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01*입력을 읽습니다.{ph1} 명령어 뷰 REA함수 결과는 {ph2} 그리고 용도 {ph3} 정수를 로드합니다. 호출자를 따라" +" REA 화면 좌표 의미 설정 다 매개 변수 {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02*1.5625 를 곱합니다.{ph1} {ph2} 더블을 읽습니다. {ph3}. 에 의해 반환 된 바이트 REA의 {ph4} " +"로 디코딩 {ph5};씨 같은 상수를 사용합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03*500.0 을 뺍니다.{ph1} {ph2} 더블을 읽습니다. {ph3}. REA의 바이트 결과는 {ph4},계산의 중심을 " +"화면 좌표로 이동 {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04*저장된 스케일을 적용합니다.{ph1} 두 번째 {ph2} 읽는다 {ph3}. 그 글로벌은 {ph4} 유지된 소스에서 " +"REA의 두 번째 바이트 읽기는 초기 값을 설정합니다 {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05*정수를 반환합니다.{ph1} 전화 {ph2} 도달 {ph3},확인된 REA수신자 결과입니다. 결과는 다음과 같습니다 " +"{ph4};원본-86 비교 반환 된 값을 확인합니다." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"어셈블리 발췌는 입력,산술 및 반환 지침을 선택합니다. 아래의 전체 목록에는 중간 저장소와 기능 설정 및 정리가 포함되어 있습니다." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "전체 조립 및 지원 증거" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA결과·0x406400–0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "발신자가 제공하는 것" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "브릭 히트 함수 {ph0} 타일 좌표의 크기를 30 으로 조정하고 20 을 추가 한 다음 호출 전에 푸시합니다:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "데이터 읽기 설정" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA바이트를 읽고,디코딩으로 little-endian 복식" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "주소" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "값" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "를 위해 사용하는" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "첫 번째 곱셈" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "빼기" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} 처음에는" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "저장된 팬 스케일" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "녹음된 REA 4.1.0 해시 고정 DX-Ball 1.07 목표. 관련 조사 메모에는 증거 신분증이 남아 있습니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "{ph0}유지 소스{ph1} · {ph2}조사 노트 및 증거 참조{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "복구 된 기능 확인" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "복구된 함수는 두 가지 검사를 통과합니다.반환 값은 원본과 일치하고 컴파일된 바이트는 실행 파일과 일치합니다." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3,205 행동 사례" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "0,0.5,1,20 및 -1:그들은 다섯 팬 스케일에서 0 에서 640 까지의 모든 정수 위치를 커버합니다." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 일치하는 바이트" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"이 함수는 고정 된 툴체인을 사용하여 컴파일됩니다. 컴파일러 재생은 검토된 재배치를 적용하고 참조된 상수를 확인한 후 전체 함수와 " +"일치합니다." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"1 의 척도에서 복구된 계산은 왼쪽 가장자리에서-500,중앙에서 0,오른쪽 가장자리에서 500 을 반환합니다. 오디오 작업의 다음 부분은" +" 그 값을 게임의 사운드 백엔드와 통합하는 것입니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}컴파일러 재생 세부 정보 읽기{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "조사 계속" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"입자 업데이트,폭발 대기열 및 보너스 생성에도 동일한 접근법이 사용되고 있습니다.관련 기능을 검사하고,상태와 의존성을 복구한 다음,구현을" +" 원본과 비교합니다." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"사운드 팬 기능을 직접 검사하려면 다음을 수행하십시오 DX-Ball 프로젝트의 설치 지침 및 일치하는 원래 대상을 제공합니다. 그런 다음" +" 실행:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "에DX-Ball체크아웃" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "{ph0}DX-Ball 저장소{ph1}{ph2}현재 소스,진행 및 로컬 설정.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0}REA 분석 워크플로우{ph1}{ph2}계산을 수행 한 다음 자신의 바이너리와 동일한 접근 방식을 사용하십시오.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "{ph0}입자 및 보너스 생산{ph1}{ph2}상태,큐 및 픽셀 쓰기에 대한 더 큰 조사.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball리버스 엔지니어링:음 패닝—REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "따라 DX-Ball 재건에서 바이너리 분석을 통해 REA 을 유지되 C,원래-86 테스트와 일치하는 컴파일된 기능이다." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "DX-Ball 사운드 팬 조사;작은 화면에서 수평으로 스크롤" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"딕스볼EXE 기능 0x00406400 검사와REA. 명령어 로드 엑스,1.5625 곱하기,500.0 빼기,팬 스케일을 적용하고 정수를 " +"반환합니다. 3,205 개의 경우에서 63 바이트와 일치하는 4.0 컴파일러 재생에 의해 원본 86 에 대해 독립적으로 검사됩니다." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball재건축 사례 연구" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "예제 프롬프트 복사" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "왼쪽/오른쪽 사운드 위치의 계산을 따르십시오" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "원본 어셈블리 발췌문 복사" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "복사 사운드 팬 기능" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "복사 전체 사운드 팬 어셈블리" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "복사DX-Ball분석 명령" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}홈{ph1} /쇼케이스" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA 사례 연구." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "안드로이드,게임,Electron및 CTF 도전으로,코드,그림 및 검사 결과입니다." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "안드로이드·APK분석" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "인증자가 로그인 코드를 생성하는 방법" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"찾기 Aegis6 자리 코드 계산은 APK. 생성 방법을 추적 REA,다음 코드가 30 초마다 변경 이유를 확인하기 위해 데모 시계를 " +"이동합니다." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "안드로이드 사례 연구 읽기" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "기계 코드 프로그램 분석" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "플래그 검사기 해결" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"쉬운 다운 언더크트 도전을 검사합니다. REA. 그 검사 기능을 찾아 방정식으로 마스크와 합계를 설정 한 다음 원래 프로그램으로 해결 " +"플래그를 확인합니다." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "공정거래위원회 사례 연구 읽기" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "기본*재건" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball's 운 팬 계산" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"1996 년 사운드 팬 계산 복구 Windows 게임. REA명령어,호출자 참조,숫자 상수는 작은 함수로 이어집니다.원래의 동작과 63 " +"개의 컴파일된 바이트에 대해 확인됩니다." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "읽DX-Ball사례 연구" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron·기능 추적" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "어떻게 Notion 텍스트 복사" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"추적 페이지의 API 를 통해Notion's 패키지JavaScript. 시스템 클립 보드에 래퍼를 따라 다음 작은 마커가 복사본에 연결된" +" 풍부한 블록 데이터를 유지하는 방법을 참조하십시오." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "읽Notion사례 연구" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98DOS·재건" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "어떻게 TH04 총알의 반지를 목표로" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"원래 16 비트 각도 도우미를 검사하십시오. REA. 그 곱하기,나누기 및 좌표 연산을 읽을 수있는 기음++에 일치시킨 다음 플레이어를 " +"겨냥한 링을 어떻게 생성하는지 확인하십시오." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "읽TH04사례 연구" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "단계별 가이드" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "가이드는 기본 계산을 통해 Electron 내보내기 및 브라우저 요청. 각 프롬프트와 구체적인 대상으로 시작합니다." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "가이드 읽기" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "리버스 엔지니어링 사례 연구—REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"팔로우 REA 코드,그림 및 데모를 통한 조사:안드로이드 인증 자, DX-Ball, Notion, TH04 그리고 하향식 플래그 검사기." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}홈{ph1} / {ph2}쇼케이스{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "사례 연구·Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "어떻게 Notion 사본{ph0}텍스트." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "클립보드 호출 추적 Notion사전 로드 및 주요 프로세스를 통해 Electron클립보드 작가입니다." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion데스크탑 7.6.1·JavaScript·REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "다리 내부에Notion's 패키지 데스크톱" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01*페이지 대면{ph1} {ph2}{ph3}{ph4} {ph5}사전 로드는 호출 가능한 메서드를 노출합니다.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "{ph0}02*예압 래퍼{ph1} {ph2}{ph3}{ph4} {ph5}래퍼는 채널 및 인수를 보냅니다.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03*메인 프로세스 핸들러{ph1} {ph2}{ph3}{ph4} {ph5}수신자는 어떤 페이지를 보냈는지 확인합니다.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04*시스템 클립 보드{ph1} {ph2}{ph3}{ph4} {ph5}Electron 제공된 텍스트를 씁니다.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "한 채널이 양쪽을 연결합니다: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"패키지 코드는 사전 로드 및 기본 프로세스에서 동일한 채널을 사용합니다. 래퍼를 해결하면 Electron 그 이름 뒤에 전화." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "이 사례 연구에서" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}클립보드 브리지 따르기{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}블록 구조 유지{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}더 많은 예와 출처{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "복사 작업은 어디로 갑니까?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"이 페이지에는 다음과 같은 메서드가 표시됩니다 {ph0}. 사전 로드에서의 구현은 래퍼입니다. 유용한 질문은 그 래퍼가 무엇을 보내고 " +"어떤 코드가 그것을 받는지입니다." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "복사" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 추적 방법 Notion 시스템 클립보드에 텍스트를 복사합니다. 각 단계에서 코드를 " +"표시합니다.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "다음과 같은 예제 프롬프트 Notion코딩 에이전트가 사용할 수있는 로컬 응용 프로그램 패키지입니다." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA 읽기 시작 위치 찾기" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"탭 사전 로드 분석 REA 페이지 및 요청을 보내는 호출을 찾습니다. 두 결과 모두 축소 된 번들의 소스 범위와 함께 제공됩니다:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA 연구 결과→두 가지 장소를 오픈" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"새 필드에서 선택한 필드 {ph0} 에 결과 Notion의 탭 사전 로드, REA 4.1.0. 위치는 원래 번들의 선과 0 기반 열을 " +"사용합니다." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"에이전트는 이러한 위치를 열고 어셈블리에서 클립보드 멤버를 찾아 읽습니다 {ph0}. 그것의 외침 위치 공급 {ph1}. 그 이름은 " +"에이전트에게 주요 번들에서 찾을 수 있는 정확한 것을 제공합니다. 아래 네 부분 은 그 길 이 연결 되는 길 을 보여 준다." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "네 개의 짧은 코드 조각" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "패키지에서 단순화 JavaScript,읽을 수 있는 변수 이름. 관련 없는 멤버는 생략됩니다." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "페이지에 노출된" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "이 멤버는 채널 이름을 제공합니다. 의 구현 {ph0} 요청이 페이지의 프로세스를 종료하는 방법을 알려줍니다." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "사전 로드의 래퍼 해결" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "반환된 함수는 인수를 Electron요청 및 응답 우리는 지금 찾을 수 있습니다 {ph0} 메인 프로세스 측면에서." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "수신기가 등록되는 방법 확인" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "주요 프로세스는 다른 래퍼를 사용합니다. 그것의 {ph0} 메소드는 {ph1} 해당 채널의 수신기." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "쓰기 및 보낸 사람 확인 찾기" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"이 목적지입니다. 보낸 사람을 확인한 후 처리기는 제공된 데이터를 Electron클립보드입니다. 채널과 두 개의 해결된 래퍼는 노출된 " +"메서드를 이 호출에 연결합니다." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "복사 된 블록은 어떻게 구조를 유지합니까?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Notion의 웹 편집기는 텍스트를 전송합니다. {ph0}. 그것은 로컬 블록 데이터를 유지하고 그들을 연결하기 위해 복사 한에 아이디를" +" 넣습니다." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "저장된 블록 데이터에 대한 링크" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "읽기" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "동일한 로컬 아이디 찾기" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "복원Notion블록 데이터" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "설명 텍스트 및 아이디. 기록 된 모듈 테스트는 식별자가 일치 할 때 블록 데이터를 복원합니다." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "붙여넣기, Notion 저장한 사본에 대하여 검사한다. 일치하는 신분증은 블록 데이터를 복원합니다." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "2026 년 7 월 13 일에 캐시된 웹 자산에서 기록된 클립보드 형식." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "더 많은 예와 출처" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "또 다른 예:마크 다운 테이블" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion 마크다운을 블록 데이터로 구문 분석합니다. 이 예제에서는 테이블이 머리글 및 데이터 행이 되는 방법을 보여 줍니다." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "테이블을 통해Notion's Markdown parser" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "추출 된 마크 다운 파서에서 기록 된 출력. 테이블은 행과 셀이 됩니다." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "다른 경로:오프라인 스카이라이트 연결" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Notion렌더러 요청 {ph0} 2018 년 11 월 기본 프로세스는 메시지 채널을 생성하고 한 포트를 렌더러에 제공하고 다른 포트를 " +"렌더러 유틸리티 프로세스에 제공합니다. 후속 문 배치 및 결과는 해당 포트를 통해 이동합니다." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "이 핸드오프에 따라 데이터베이스 작업이 실행되는 위치와 초기 요청만 추적하면 나중에 대화가 누락되는 이유를 설명합니다." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "출처 및 발췌문 읽기 방법" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"클립보드 브리지는 Notion 데스크톱 7.6.1 의 {ph0}:탭 사전로드 및 {ph1}. 발췌는 축소 된 변수 이름을 확장하고 " +"관련이없는 코드를 생략;발신자 검사 도우미는 기본과 함께 표시됩니다 {ph2} 전화." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"가상 클립보드 및 마크다운 예는 모듈을 포함하여 2026 년 7 월 13 일에 캐시된 웹 자산에서 가져온 것입니다 {ph0}, " +"{ph1}, {ph2} 그리고 {ph3}. 이러한 자산에는 자체 버전이 있습니다. 저장된 프로브는 추출된 모듈과 작은 하네스를 " +"실행했습니다." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"그 REA 여기에 표시된 결과는 저장된 탭 사전로드에 대한 집중 분석이며 게시된 탭과 함께 기록됩니다. REA 4.1.0 패키지. 이 " +"작업을 수행하려면 다음을 수행하십시오. 클립보드 멤버와 일치하는 수신기는 패키지에서 래퍼 구현을 읽음으로써 연결됩니다." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"마크다운 예제는 파서 모듈을 사용합니다 {ph0}. 저장된 모듈 테스트는 페이지 필터와 채팅 필터 모두 이 테이블을 유지한다는 것을 " +"보여줍니다. 붙여넣기/가져오기,구조화된 마크다운 및 인공지능/채팅 파서는 별도의 진입점과 중간 형식을 가지고 있습니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "{ph0}JavaScript 신청 가이드{ph1}{ph2}작은 따라 Electron 응용 프로그램의 내보내기 기능.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "{ph0}DX-Ball 재건{ph1}{ph2}기본 지침에 따라 체크 된 기음 기능.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "NotionElectron리버스 엔지니어링:클립보드—REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "팔로우 Notion클립보드를 통해 Electron짧은 코드 발췌와 풍부한 클립보드 형식을 살펴볼 수 있습니다." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "NotionElectron사례 연구" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "복사 Notion 분석 프롬프트" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "복사Notion미리 발췌문" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "복사Notioninvoke wrapper 발췌문" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "복사Notion처리기 wrapper 발췌문" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "복사Notion클립보드 receiver 발췌문" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "붙여 넣기에 풍부한 클립 보드 데이터 복원" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "개인정보보호정책" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}홈{ph1} / {ph2}쇼케이스{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "사례 연구*동방 4:로터스 랜드 스토리" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "재구성 TH04의{ph0}총알 패턴." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "총알의 고리는 짧은 각도 계산으로 시작됩니다. 사용 REA 원래 도스 함수를 검사하려면 해당 지침을 따라 읽을 수 있습니다." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 ·16 비트 도스*기음++및 어셈블리" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "보TH04재건" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "원본 지침에서 확인 된 소스까지" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01*오리지널 게임{ph1}{ph2}메인엑스{ph3}{ph4}그 PC-98 실행 파일 및 총알 각도 도우미.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02*검사 REA{ph1}{ph2}지침+참조{ph3}{ph4}로드된 도스 코드를 확인하고 실행 파일에서 각도 계산을 " +"읽습니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "{ph0}03*읽기 기음++{ph1}{ph2}공간→목표→회전{ph3}{ph4}유지 재건에 각 작업을 연결합니다.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04*소스 확인{ph1}{ph2}2,139 일치하는 바이트{ph3}{ph4}기록된 컴파일러 검사는 이 도우미가 포함된 글머리 " +"기호 생성 코드를 다룹니다.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "REA 원본 코드와 해당 분석 증거를 반환합니다. 그 TH04 프로젝트는 유지되는 소스 및 컴파일러 검사를 제공합니다." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "이 사례 연구에서" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}총알 반지{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}무엇 REA 반환{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}어셈블리{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}소스 확인{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}전체 프로젝트{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "반지가 플레이어를 겨냥하는 방법" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"엘리의 공격은 16 개의 초기 카운트를 가진 목표 링을 요구합니다. 하나의 도우미는 각 총알의 방향을 계산합니다. 같은 반지는 고정된 " +"방향으로 향하거나 플레이어를 향해 돌 수 있습니다." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}코딩 에이전트" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "복사" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 방법을 찾으려면 TH04 총알 반지를 만들어 플레이어를 겨냥합니다. 계산을 설명하고 코드를 " +"보여줍니다.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "로컬에서 사용할 수 있는 원래 실행 파일 및 재구성 체크아웃이 있는 예제 프롬프트입니다." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 256 각도 단위로 전체 시계 방향 회전을 저장합니다. 16 개의 총알에 대해 각 인덱스는 16 개의 단위를 추가합니다: " +"{ph0}. 플레이어의 방향을 더하면 그 위치들이 함께 회전됩니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "카운트에 대한 복구 각도 수학의 그림 16,플레이어 방향 40 템플릿 회전 0. {ph0}열린 그림{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "복구된 소스의 발사 템플릿" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "엘리의 반지 공격*출처 발췌" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "이 선은 난이도와 성능 조정 전에 패턴을 선택합니다. {ph0}공격 소스 읽기{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "WhatREA환" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"우리는 검사 {ph0} 각 총알의 속도와 각도를 설정하는 함수입니다. REA 명령어,의사 코드 및 참조를 반환합니다. 그 결과의 세 " +"부분이 패턴을 설명합니다." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "코드를 읽기 전에 도스 이미지를 확인하십시오" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "이 검사는 로드된 코드와 재배치 레코드를 제공된 실행 파일에 연결합니다. 위의 경로는 표시를 위해 단축됩니다." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "링의 곱하기 및 나누기 읽기" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} 총알 인덱스를 보유하고 있습니다. 이 이동은 256 으로 곱하고,그 다음에는 이 분할에서 읽은 수를 사용합니다. {ph1}. " +"유지 관리되는 소스 이름은 해당 필드입니다 {ph2}. 전체 순서는 아래에 나타납니다." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "패턴이 플레이어 쪽으로 향하는 위치 찾기" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"명령 피연산자는 두 개의 좌표 차이와 방향 도우미를 노출합니다. 그것의 반환 값은 상대 링 각도에 추가됩니다. 소스 이름을 사용하면 해당" +" 주소를 읽을 수 있습니다; REA 에이전트가 그 뒤에 있는 원래 작업을 확인할 수 있습니다." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "어셈블리에서 읽을 수있는 키++" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"원래 지침과 각도 계산을 일치시킬 단계를 선택합니다. 이 요약은 목표 링 경로를 따릅니다.전체 소스는 스프레드,스택 및 무작위 패턴을 " +"처리합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} 지수" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} 공간" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} 목표" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} 회전" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} 제품 정보" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA·기존 16 비트 지침" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "*조준 링 요약" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01*글머리 기호 인덱스를 읽습니다.{ph1} 스택 인수는 {ph2}. 16 개의 총알 반지에서는 이 멤버 인덱스가 0 에서 " +"15 까지입니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02*공간 전체 회전 주위에 방향.{ph1} {ph2} 256 을 곱합니다. 카운트는 0 으로 확장되어 단어로, {ph3} 곱을" +" 그 수로 나눕니다. 카운트 16 의 경우 각 인덱스는 16 개의 각도 단위를 앞당깁니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03*플레이어 방향을 추가합니다.{ph1} 두 빼기는 플레이어-마이너스-원점 좌표를 형성합니다. 방향 도우미는 각도를 " +"반환합니다. {ph2};그것을 추가하면 전체 링이 플레이어에게 향합니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04*패턴의 회전을 추가합니다.{ph1} {ph2} 템플릿 각도를 추가합니다. 엘리의 초기 템플릿은 0 으로 설정;다른 패턴은 " +"회전과 같은 도우미를 사용할 수 있습니다." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05*최종 각도를 1 바이트로 유지하십시오.{ph1} 가게가 쓴 글 {ph2} 스폰 각도 필드에. 값은 부호없는 바이트 캐스트와" +" 마찬가지로 255 이후에 래핑됩니다. 주변 소스는 또한 이 각과 속도를 속도로 변환합니다." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"어셈블리는 조준 링 분기,조준 계산 및 최종 저장소를 선택합니다. 위의 기음++는 읽을 수있는 요약입니다. 아래의 컴파일러 검사는 연결된" +" 프로젝트의 유지되는 소스에 적용됩니다." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "유지 링 및 조준 소스 읽기" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "{ph0}링 매크로{ph1} · {ph2}조준 및 속도 소스{ph3} · {ph4}각도 표현{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "유지 관리 소스 확인" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "그 TH04 프로젝트의 기록된 검사는 이 도우미를 포함한 총알 생성 코드를 컴파일합니다." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 일치하는 바이트" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "컴파일된 총알 생성 코드는 원래 실행 파일의 2,139 바이트 섹션과 일치합니다." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "두 개의 깨끗한 빌드" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "두 개의 별도 빌드는 동일한 일치하는 바이트를 생성합니다. 기록된 입력 해시는 여기에 표시된 유지되는 소스와 일치합니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "2026 년 10 월 3 일에 기록된 {ph0}컴파일러 검사 읽기{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "대상 신원 및 분석 범위" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "원래 목표" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0},156,258 바이트" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "도우미 항목" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} 그 안에 REA로드 된 이미지" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "원본 파일 오프셋" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0},반환 {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "기록 된 코드 검사" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0·2026 년 10 월 7 일" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"컴파일러 검사는 이 도우미를 포함하여 전체 글머리 기호 추가 코드 섹션을 다룹니다. 그들은 또한 지도의 기여와 중복되는 재배치를 " +"비교합니다." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA 로드 세그먼트에서 정적 도스 로드 이미지 확인 {ph0}. 그 주소는 분석 이미지를 설명합니다. 함수 결과는 517 바이트 범위에" +" 걸쳐 두 범위에서 503 개의 본문 바이트를 보고합니다.위의 선택된 명령은 보고된 범위에 있습니다." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"소스 이름과 컴파일러 검사는 TH04 체크포인트 {ph0}. 이전 재구성 관측은 프로젝트의 자체 분석 스크립트를 사용했습니다.이 페이지는" +" 신선한 REA 동일한 원래 대상의 검사. 제공된 게임의 신원은 저장소 매니페스트에 의해 고정되어 있으며 독립적인 원시 덤프 출처가 " +"여전히 열려 있습니다." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"이 그림은 각도 계산을 보여줍니다. 전체 게임 컨트롤,타이밍 및 PC-98 하드웨어 동작에는 재구성 프로젝트에서 별도의 런타임 검사가 " +"있습니다." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "전체TH04재건" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"이 프로젝트는 유지 관리 된 기음++및 어셈블리에서 게임의 네 가지 도스 제품을 빌드합니다. 총알 생성 외에도 소스는 " +"스테이지,보스,렌더링,입력,메뉴,엔딩 및 점수 처리를 다룹니다." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}탐색 TH04 저장소{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "{ph0}총알 생성 소스{ph1}{ph2}전체 도우미,다른 패턴 유형 및 템플릿 튜닝.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}도스 빌드 및 실행 가이드{ph1}{ph2}소스를 빌드하고 프로젝트에서 테스트 PC-98 에뮬레이터 워크 플로우.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "{ph0}현재 프로젝트 상태{ph1}{ph2}도스 검증 및 별도의 기본 64 포트.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04리버스 엔지니어링:DOS 탄 패턴—REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "검사 TH04의 원래 16 비트 도스 코드 REA. 이 게임의 목표는 가능한 한 많은 적을 파괴하는 것입니다." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "이 페이지에" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04탄 패턴은 사례 연구" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "복사 TH04 프롬프트 예" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "TH04 고정 및 목표 총알 반지;작은 화면에서 수평으로 스크롤" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"16 총알 링의 두 다이어그램. 고정 링은 각도 0 에서 시작합니다. 40 의 플레이어 방향을 추가하면 모든 방향이 같은 양으로 " +"회전합니다.강조된 첫 번째 총알은 플레이어를 가리킵니다. 둘 다 16 각 단위 또는 22.5 도의 간격을 유지합니다." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "복사TH04발사 템플릿" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "따라TH04을 목표로 링 계산" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "복사TH04어셈블리는 발췌문" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "읽을 수있는 목표 링 계산 복사" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "맨 위로" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "복사" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "복사" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "선택된" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "코드는 클립 보드에 복사." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "코드 선택. 그것을 복사 키보드를 사용합니다." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA에GitHub({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "거리 {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "선인장을 치십시오. 다른 속도를 시도하십시오." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "공동↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "다시 재생" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "시작" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "일시 중지" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "재생을 누른 다음 선인장을 뛰어 넘습니다." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "선인장을 치십시오. 재생을 다시 누르거나 속도를 변경하고 다시 시작하십시오." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "실행. 공간 또는 점프는 선인장을 지 웁니다." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "일시 중지되었습니다. 계속하려면 재생을 누릅니다." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "조정 속도: {speed}. 공간 또는 점프는 선인장을 지 웁니다." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "조정 속도: {speed}. 그것을 시도 재생을 누릅니다." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "복구 된 규칙:6 에서 시작한 다음 13 으로 늘립니다." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "조정 속도: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "복구된 규칙을 다시 재생했습니다. 4 개의 값 모두 3 개의 소수로 둥글게 하면 제어된 원래 게임 체크와 일치합니다." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "재생은 녹음된 오리지널 게임 값과 다릅니다. 위의 속도 규칙 및 설정을 비교하십시오." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} 초" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} 초,시간 블록 {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "이 브라우저에서는 대화형 계산을 사용할 수 없습니다. 이 예제에서는 코드를 59 초로 표시합니다." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "확인…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "{passed} / {total} 통과 된 검사(6 개의 참조 사례,6 자리 및 8 자리)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "참조 검사를 실행할 수 없습니다. 다시 시도하십시오." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "컴퓨터에서 생각 하는 분석가" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "한 번 확인하면 한 명의 캐릭터가 나타납니다." + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"일곱 번째 마스크는 6 대 6 입력 그리드에서 위치 21 만 선택합니다. 문자 코드는 55 이어야 합니다.그래서 문자는 7 입니다. 다른" +" 마스크는 다른 위치를 선택하고 추가 방정식을 제공합니다." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "일곱 번째 체크. 셀 레이블은 0 에서 시작하는 입력 위치입니다." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "인코딩 마스크:-21,+1,-14,0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "21 개의 셀을 건너 뜁니다. 1 을 선택합니다. 건너 뛰기 14. 0 에서 중지합니다." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "이 합에 기여하는 셀은 하나만 있습니다." + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "깃발의 위치 21 에는 7 이 포함되어야 합니다." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "선택:하나의 셀" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 개의 마스크는 26 개의 방정식을 제공합니다." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "깃발을 찾기 위해 함께 해결." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball사운드 팬 조사" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA제공하는 지시,발신자 및 바이트 읽기에 대한 증거 하나DX-Ball기능입니다. 스택 입력에 1.5625 를 곱하고,500 을 " +"오프셋하고,크기를 조정하고,정수로 변환합니다. 3,205 개의 원본 86 케이스와 별도의 63 바이트 컴파일러 재생에서 확인됩니다." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "스택" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "입력 x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "정수" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "반환" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "복원한 함수" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "유지 가능한 C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "벽돌 충돌 호출부" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "원본 코드" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "비교" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3,205개 사례" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "VC4.0 빌드" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63바이트 일치" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA흐름을 조사" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"지역 목표에 대해 질문하십시오. REA 로컬 분석 어댑터를 통해 검사 및 추적하고,증거를 반환하고,에이전트가 설명,구현 및 테스트 할 때" +" 후속 질문을 지원합니다." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. 질문" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "에이전트 + 로컬 대상" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "앱 / 바이너리 / 브라우저" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. 분석과 추적" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. 근거 확인" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "코드 / 참조 /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "미확인 사항" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. 결과 활용" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "에이전트" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "설명 / 구현 / 테스트" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "분석 도구" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "로컬 분석 어댑터" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "추가 질문" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04:간격을 두고를 목표로 반지의 총알" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"전체 시계 방향 회전에는 256 개의 각도 단위가 있습니다. 16 개의 총알은 240 을 통해 0,16,32 각도에서 시작합니다. 40 " +"의 예제 플레이어 방향을 추가하면 16 개의 방향이 모두 합쳐집니다.첫 번째 총알은 플레이어를 가리키고 있습니다. 템플릿 회전은 0 " +"입니다." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "고정 링" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "첫 번째 총알:각도 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "조준 링" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "첫 번째 총알:플레이어 방향" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "원점" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "플레이어" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "같은 간격:256÷16=16 각도 단위=22.5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "사례" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "블로그" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "시작하기" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "가이드" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "소스 코드" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "MIT 라이선스" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "커뮤니티 참여" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "X에서 팔로우" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA *선택한 스크립트 소스" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "소스 코드" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "예상 포맷터 출력" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "지침" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "호출자" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "상수" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "기음 기능" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "버튼" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "사전 로드" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "2015 년" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSV 파일" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "클릭" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "캡처된 요청" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "스크립트 내보내기" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA결과·요약입니다.발췌" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA명령 발췌·0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA자 발췌·0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "REA바이트로 결합하는 것으로 해석 little-endian 복식" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "복구 된 기음*발췌" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "REA 사용 방식 보기 ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "설정 가이드" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "전시→" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "검사된 스크립트에서 선택한 설정" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "%처리기의 읽을 수 있는 요약" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA·선택한 원래의 지침" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "운영자의 신분증*마이크로 소프트의 소스" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "쨩챌쨔챈쨀" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "에이전트→REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA→에이전트·선택한 결과" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA→에이전트·방법과 발신자" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA·선택한 디컴파일된 Java" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "읽을 수있는 요약*에이전트의 해석" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA·generateOTP,완전한 신체" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "다운로드AegisAPK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "안드로이드 분석 공급자 다운로드" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "에이전트→REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA→에이전트·선택한 결과" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA→에이전트·선택 지침" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "에이전트→REA·read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA→agent·일곱 번째 항목" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "원 실행·SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "원래 도전 다운로드" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "다운로드 솔버" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA결과·의사 발췌문" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "에이전트→ REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA→에이전트·사용법 발췌문" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA→agent·발신자 발췌문" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "에이전트→ REA *두 {ph0} 요청" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REA결과의 바이트·디코딩으로 복식" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "너의 자신의 표적에 시작" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "코드 생성" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "복구 된 규칙" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "조정 가능한 시계" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "이진" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "코드 확인" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "방정식" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "맞아요!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "실행 가능" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA결과" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "복구 된" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "유효성 검사" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "패키지 앱" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "노출" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "래퍼" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "클립보드" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "원래 도스 코드" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA지침" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "각도 계산" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "총알 반지" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "노출된 페이지" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "렌더러 호출" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "시스템 클립보드로 전송됨" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "로컬로 저장해Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "마크다운 입력" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "구조화된 파서 출력*발췌" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "자신의 앱 분석" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "에이전트→REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA→에이전트·선택된 분야" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "에이전트→ REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA→에이전트·사용법 발췌문" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "동일한 기능 결과*목표 발췌" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "해당 유지 관리 기음++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "매크로 반지·TH04점,발췌" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "각도와 속도*소스 발췌" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "%를 눌러 10 에 무슨 일이 일어나는지 확인합니다." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "200 의 10%는 20 입니다. 를 눌러=를 추가 할 수 있습니다." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "곱셈의 경우 10 은 0.1 이 됩니다. =를 눌러 곱합니다." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "번역이 업데이트되고 있습니다. 지금 이 페이지를 영어로 읽어보세요." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 분석 {ph3} 그리고 데이터를 내보내는 방법을 설명하십시오. 관련 코드 및 소스 위치를 " +"표시합니다.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3}을 사용해 REA를 설치하고 이 코딩 에이전트에 연결해 줘. 먼저 설정 변경 계획을 보여 주고 내 " +"승인을 받은 뒤 실행해 줘. 마지막으로 설치를 확인해 줘.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}다운로드 {ph3} 새 예제 폴더에 넣고 압축을 풉니 다. 사용 REA 노트 내보내기를 클릭하면 어떤 일이 " +"발생하는지 찾을 수 있습니다. 어디에 표시 {ph4} 어떤 필드가 포함되어 있는지,그리고 관련 파일과 줄들이 쓰여져 " +"있습니다.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3}을 사용해 REA를 설치하고 이 코딩 에이전트에 연결해 줘. 먼저 설정 변경 계획을 보여 주고 내 " +"승인을 받은 뒤 실행해 줘. 마지막으로 설치를 확인해 줘.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3}을 사용해 REA를 설치하고 이 코딩 에이전트에 연결해 줘. 먼저 설정 변경 계획을 보여 주고 내 " +"승인을 받은 뒤 실행해 줘. 마지막으로 설치를 확인해 줘.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "{ph0}›{ph1}{ph2}사용 REA 검사 {ph3}. 나를 위해이 웹 사이트를 복제.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "재건 · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "함께 {ph0} 그리고 npm 사용 가능,설치 실행,코딩 에이전트를 선택하고 제안 된 변경 사항을 검토하십시오." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "제공된 예·{ph0}및npm·코딩의 에이전트" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"다음과 같은 코딩 에이전트 사용 Claude Code, Codex 또는 Cursor. 당신이 필요합니다 {ph0} 그리고 npm; " +"{ph1}설치 가이드 목록 지원되는 버전{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "{ph0}페이지 · {ph1}{ph2}{ph3}노트 내보내기{ph4}{ph5}통화 {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "{ph0}다리 · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}주 프로세스에 명명된 메시지를 보냅니다.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}관리자 · {ph1}{ph2}{ph3}쓰기 {ph4}{ph5}{ph6}포맷터를 호출합니다 {ph7} 그리고 파일을 " +"씁니다.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} *라인 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}예측 CSV 아이디 1 과 제목이 있는 메모 {ph3}. 그런 다음 예제를 실행하십시오 {ph4} 포맷터 " +"{ph5} 그것을 확인합니다. 예측 및 실제 출력을 표시합니다.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "제목은 하나의 인용 필드에 남아 있으며 각 인용 부호는 두 배로 표시됩니다. 이것은 포맷터를 직접 확인합니다. {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0}·CSV포맷터" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "당신이 필요합니다 {ph0} 22 (22.19+), 24 (24.11+) 또는 26+. npm 함께 제공 {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "이 없{ph0},또는 확신할 수 없으십니까?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"만약 {ph0} 이 응용 프로그램을 설치하려면 다음을 수행하십시오. 이전 버전 또는\"인식되지 않음\"/\"명령을 찾을 수 없음\"을 " +"인쇄하는 경우 다음을 설치하십시오 {ph1} 24 리터:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} *예제 소스 발췌" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "{ph0}예제 열기{ph1} · {ph2}다운로드 {ph3}{ph4} · {ph5}다운로드 {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} *예제 소스" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"예제를 다운로드하고 압축을 풉니 다. 아카이브에는 전체 {ph0} 폴더 그것을 분석 {ph1} 그리고 npm; Electron 이 " +"예제에는 필요하지 않습니다." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "처음 또는 누락 {ph0} 아니면 코딩 에이전트? {ph1}단계별 설치 가이드를 따르십시오.{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "예를 들어: {ph0}계산기에서 {ph1}가 왜 220이 될까요?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "{ph0}›{ph1}{ph2}사용 REA 검사 Windows 계산기 왜 {ph3} 220 줘?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA *로드 {ph0} *선택한 라인" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"우리는 이유를 보았다 {ph0}{ph1} 220 을 줍니다.{ph2} 이제+와 200 에 대한 규칙을 복구하고 시도해 보겠습니다." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA 읽는다 {ph1}{ph2}{ph3}그것은 계산기 응용 프로그램을 시작합니다{ph4}{ph5}코드가 열립니다 " +"{ph6}. 그런 다음 에이전트는 설치된 앱의 라이브러리를 선택합니다.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}사용 REA 이지스-3.4 를 검사합니다.{ph3}. 이 6 자리 로그인 코드를 생성하는 방법을 찾아 30 " +"초마다 변경 이유를 설명하고 시간을 변경할 수있는 작은 데모를 다시 작성하십시오.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "탭 _브라우저 _보기/{ph0} ·회원" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "탭 _브라우저 _보기/{ph0} ·아이피 도우미" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "주요/{ph0} *핸들러 도우미" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "주요/{ph0} *클립 보드 수신기" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "재건*디노-속도.제이에스" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "함께 Node.js 그리고 npm 사용 가능,설치 실행,코딩 에이전트를 선택하고 제안 된 변경 사항을 검토하십시오." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "제공된 예·Node.js및npm·코딩의 에이전트" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "다음과 같은 코딩 에이전트 사용 Claude Code, Codex 또는 Cursor. 당신이 필요합니다 Node.js 그리고 npm; " +#~ "{ph0}설치 가이드 목록 지원되는 버전{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "{ph0}페이지*렌더러.제이에스{ph1}{ph2}노트 내보내기{ph3}{ph4}통화 {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "{ph0}브리지*예압.제이에스{ph1}{ph2}{ph3}{ph4}{ph5}주 프로세스에 명명된 메시지를 보냅니다.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}핸들러*메인.제이에스{ph1}{ph2}메모를 작성하십시오.2015 년{ph3}{ph4}포맷터를 호출합니다 {ph5} 그리고 " +#~ "파일을 씁니다.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}예측 CSV 아이디 1 과 제목이 있는 메모를 위해 안녕하세요,\"REA\". 그런 다음 예제를 " +#~ "실행하십시오. Node.js 그것을 확인합니다. 예측 및 실제 출력을 표시합니다.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "제목은 하나의 인용 필드에 남아 있으며 각 인용 부호는 두 배로 표시됩니다. 이것은 포맷터를 직접 확인합니다. Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js·CSV포맷터" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "당신이 필요합니다Node.js 22 (22.19+), 24 (24.11+) 또는 26+. npm와 함께 제공Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "이 없Node.js,또는 확신할 수 없으십니까?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "만약 {ph0} 이 응용 프로그램을 설치하려면 다음을 수행하십시오. 이전 버전 또는\"인식되지 않음\"/\"명령을 찾을 수 없음\"을 " +#~ "인쇄하는 경우 다음을 설치하십시오 Node.js 24 리터:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "{ph0}예제 열기{ph1} · {ph2}다운로드 내보내기.제이에스{ph3} · {ph4}다운로드 노트.제이슨은{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "예제를 다운로드하고 압축을 풉니 다. 아카이브에는 전체 {ph0} 폴더 그것을 분석 Node.js 그리고 npm; Electron 이 " +#~ "예제에는 필요하지 않습니다." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "처음 또는 누락 Node.js 아니면 코딩 에이전트? {ph0}단계별 설치 가이드를 따르십시오.{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "예를 들어: {ph0}계산기에서 200 + 10%가 왜 220이 될까요?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}사용 REA 검사 Windows 계산기 왜 200+10%는 220 을 제공합니까?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "우리는 이유를 보았다 {ph0}200+10%제공 220.{ph1} 이제+와 200 에 대한 규칙을 복구하고 시도해 보겠습니다." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA 석회질을 읽습니다.엑스{ph1}{ph2}그것은 계산기 응용 프로그램을 시작합니다{ph3}{ph4}코드가 열립니다" +#~ " {ph5}. 그런 다음 에이전트는 설치된 앱의 라이브러리를 선택합니다.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}사용 REA 이지스-3.4.3 을 검사합니다.-아뇨 이 6 자리 로그인 코드를 생성하는 방법을 찾아 30 " +#~ "초마다 변경 이유를 설명하고 시간을 변경할 수있는 작은 데모를 다시 작성하십시오.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "탭 _브라우저 _뷰/프리로드.회원가입" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "탭 _브라우저 _뷰/프리로드.쨩챌쨔챈쨀" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "주/색인.쨩챌쨔챈쨀" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "주/색인.클립보드 수신기" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "메인8-12 호선" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "수출.*예 출처 발췌" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "렌더러예시 소스" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "사전 로드예시 소스" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "메인예시 소스" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA·드 인덱스입니다.선택 라인" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}사용 REA 앱/절대/경로/를 분석하고 데이터를 내보내는 방법을 설명합니다. 관련 코드 및 소스 위치를 " +#~ "표시합니다.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}설치 REA 그리고 그것을 사용하여 이 코딩 에이전트에 연결하십시오 npx 정말이야-에이전트@최신 설정. " +#~ "승인을 위해 설치 계획을 표시한 다음 설치를 확인합니다.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}다운로드 https://rea.tools/examples/notes-example.zip 새 예제 폴더에 " +#~ "넣고 압축을 풉니 다. 사용 REA 노트 내보내기를 클릭하면 어떤 일이 발생하는지 찾을 수 있습니다. 어디 메모를 표시합니다.그리고 관련" +#~ " 파일과 라인.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}설치 REA 그리고 그것을 사용하여 이 코딩 에이전트에 연결하십시오 npx 정말이야-에이전트@최신 설정. " +#~ "승인을 위해 설치 계획을 표시한 다음 설치를 확인합니다.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}설치 REA 그리고 그것을 사용하여 이 코딩 에이전트에 연결하십시오 npx 정말이야-에이전트@최신 설정. " +#~ "승인을 위해 설치 계획을 표시한 다음 설치를 확인합니다.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "00000000000" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "00000000000" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0*64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}사용 REA 검사 https://rea.tools/. 나를 위해이 웹 사이트를 " +#~ "복제.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "코드[21]=55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr " 이 경우 다음 단계를 수행 할 수 있습니다." + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}리버스 엔지니어링 아무것도{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/languages.json b/website/locales/languages.json new file mode 100644 index 000000000..49e004304 --- /dev/null +++ b/website/locales/languages.json @@ -0,0 +1,51 @@ +[ + { "code": "en", "name": "English", "readme": "README.md", "dir": "ltr" }, + { + "code": "zh-CN", + "name": "简体中文", + "readme": "README_zh.md", + "dir": "ltr" + }, + { + "code": "zh-TW", + "name": "繁體中文", + "readme": "README_zh-TW.md", + "dir": "ltr" + }, + { "code": "ja", "name": "日本語", "readme": "README_ja.md", "dir": "ltr" }, + { "code": "ko", "name": "한국어", "readme": "README_ko.md", "dir": "ltr" }, + { "code": "tr", "name": "Türkçe", "readme": "README_tr.md", "dir": "ltr" }, + { "code": "ru", "name": "Русский", "readme": "README_ru.md", "dir": "ltr" }, + { + "code": "vi", + "name": "Tiếng Việt", + "readme": "README_vi.md", + "dir": "ltr" + }, + { "code": "th", "name": "ไทย", "readme": "README_th.md", "dir": "ltr" }, + { "code": "de", "name": "Deutsch", "readme": "README_de.md", "dir": "ltr" }, + { "code": "es", "name": "Español", "readme": "README_es.md", "dir": "ltr" }, + { "code": "fr", "name": "Français", "readme": "README_fr.md", "dir": "ltr" }, + { + "code": "uk", + "name": "Українська", + "readme": "README_uk.md", + "dir": "ltr" + }, + { "code": "pl", "name": "Polski", "readme": "README_pl.md", "dir": "ltr" }, + { + "code": "pt-BR", + "name": "Português (Brasil)", + "readme": "README_pt-BR.md", + "dir": "ltr" + }, + { "code": "ar", "name": "العربية", "readme": "README_ar.md", "dir": "rtl" }, + { "code": "fa", "name": "فارسی", "readme": "README_fa.md", "dir": "rtl" }, + { + "code": "id", + "name": "Bahasa Indonesia", + "readme": "README_id.md", + "dir": "ltr" + }, + { "code": "it", "name": "Italiano", "readme": "README_it.md", "dir": "ltr" } +] diff --git a/website/locales/messages.pot b/website/locales/messages.pot new file mode 100644 index 000000000..9864aa28a --- /dev/null +++ b/website/locales/messages.pot @@ -0,0 +1,10962 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "" + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "" + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about agents, " +"verification and knowledge that compounds across projects." +msgstr "" + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA and AI " +"agents." +msgstr "" + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 website/public/faq/index.html:75 +#: website/public/faq/index.html:88 website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 website/public/guides/index.html:75 +#: website/public/guides/index.html:88 website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 website/public/guides/native/index.html:88 +#: website/public/index.html:75 website/public/index.html:88 +#: website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 website/public/showcase/index.html:75 +#: website/public/showcase/index.html:88 website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "REA — Find out how software works. Reverse engineering with your coding agent." +msgstr "" + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and acceptance" +" criteria, then let the agent decide what to try next." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning with the " +"code. Git checkpoints let the next session continue after the conversation ends." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still needs " +"testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a bug, revisit" +" the earlier results that depended on it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The methods are " +"still taking shape. There is plenty left to explore." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes fixing the " +"checks when we discover a gap." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would inspect a " +"function until I had an explanation, then test that explanation against the program. " +"Getting further meant spending more of my own time on the next function. It also meant" +" keeping an increasingly large picture in my head." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be understood" +" and eventually carried into a port or a mod. That is the experience behind this " +"article. The method can be useful elsewhere, but each field needs to establish what it" +" can check against a reliable reference." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to see how far" +" an agent could get with access to the program and ordinary development tools. Touhou " +"reconstruction gave me a substantial project in which to find out." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without me " +"choosing every individual step. A failed comparison might send the agent to another " +"caller. It could write a small diagnostic and use the result to decide what to try " +"next. Giving it that freedom made a difference: I could spend more attention on the " +"project's direction and on whether its checks were trustworthy." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive beyond the " +"current project. Would the next game benefit from everything we had just learned?" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of {ph2}GensokyoClub's " +"reconstruction{ph3}. Their public source gave me a substantial foundation. It came " +"with knowledge of the build and a history of contributions that I preserved in the " +"continuation." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent " +"continuation began on 13 August. By 19 August, the ledger recorded source for all " +"1,107 identified game functions." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly eleven days " +"after the continuation began. A Web edition followed. The native Linux 64-bit release " +"arrived on 30 August." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. Getting there" +" required following problems beyond an individual function. Even when two functions " +"looked correct in isolation, they could accidentally use separate copies of state that" +" should have been shared." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them {ph0}oracles{ph1}. A code " +"comparison can tell us whether a reconstructed function reproduces the original " +"instructions. A runtime check can tell us whether an exercised route reaches the " +"expected state. The agent proposes an explanation and tests it; a mismatch gives it " +"something specific to investigate." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how much can " +"depend on that software." +msgstr "" + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item auto-" +"collection. The reconstructed source checked player power against {ph0}. The original " +"used {ph1}, the maximum-power threshold." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was effectively always " +"satisfied. Above the collection line, the game could attract items without requiring " +"maximum power. The other exceptions in the condition were correct. This one constant " +"changed the behavior." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool accounted for" +" that by adjusting addresses in the compiled instructions before comparing them with " +"the original. But it never checked the floating-point value stored at the referenced " +"address." +msgstr "" + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction at the " +"original's {ph0} while the source still said {ph1}. The instruction bytes matched. The" +" source meant something different." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison check the " +"referenced constant's actual bytes. A {ph2}wider audit{ph3} then examined 1,548 " +"floating-literal references. It found another twelve incorrect references across five " +"accepted functions." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include deliberately " +"wrong values to make sure they are rejected. We also had to revisit results that had " +"passed the weaker check." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of repairing the" +" game." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I cannot " +"personally inspect every line they produce, so much of my confidence rests on their " +"checks. A shared oracle's blind spot can affect many investigations before I notice " +"it. I have to understand what the checker actually verifies and test it against cases " +"that ought to fail." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did the reasons " +"for source changes and notes that let a later session pick up where an earlier one " +"stopped. {ph0}The repository was becoming the project's working memory.{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment for the " +"next batch.{ph1}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind of work " +"explicit. The notice announces that further development will happen privately until " +"completion. One passage reads:" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from our work " +"paints a bad image for future decompilation efforts…" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They have put " +"their free time into difficult work, and that work helped make my continuation " +"possible. I respect the effort behind it. The disagreement I want to discuss is about " +"how reconstruction should proceed and how a contribution should be judged." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and " +"reconstructing it usually fell to the same person. A project relied heavily on that " +"person's expertise. Trust in the contributor mattered because so much of the reasoning" +" happened while they worked." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build tools. What " +"changed for me was that an agent could use that knowledge to pursue the next " +"investigation on its own." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a result. " +"The agent has broad freedom to investigate. Its proposed reconstruction then has to " +"survive the relevant checks. I want another person to be able to examine why we chose " +"an implementation, even if an agent did most of the work." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the foundation " +"for a continuation that moves much faster. That raises real questions about credit. It" +" also changes what maintainers need to know before accepting a contribution." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the process " +"depends on the skill of the person carrying it out. Machinery changes where that skill" +" is needed. Someone still has to design the process and recognize when its output is " +"wrong. Different communities can choose how much of that change they want to take on." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its history " +"preserved. I want the new work to be reviewable. That gives us a way to ask how far " +"this approach can go and to learn from what goes wrong along the way." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, and its " +"{ph2}contribution policy{ph3}. The quotation is a shortened excerpt. TH08's " +"{ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much easier to " +"see. Its repository began on 29 August with zero confirmed game functions in the " +"ledger. We still had to learn the game. But we already knew much more about how to " +"begin a reconstruction and how to keep it moving." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 September, 696 had " +"been accepted as exact comparisons. The whole program linked on 9 September. The " +"Windows i386 reconstruction was marked playable on 10 September, about twelve days " +"after initialization." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target could " +"benefit from work done on another game. The experience was already present in the " +"tools and in the way the project was organized." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program early. If " +"several recovered functions depend on the same state, their isolated comparisons leave" +" an important question open. We need to see them working together. That lesson helped " +"shape how we approached TH095's whole-program build." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a check " +"that another session can run, it can keep helping after I have moved on. The next " +"agent can use the result without repeating the investigation that led to it." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why checking a " +"reference also requires checking the data behind it. Keeping that correction with the " +"code helps later projects avoid inheriting the old check's blind spot." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next game.{ph1} We can " +"spend more of the next project's effort on what is actually new about its target." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a decision and" +" rerun its check before continuing the work. They do not have to reconstruct the " +"entire project's history to find out why the source looks the way it does." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The target " +"was now a 16-bit environment with four cooperating programs. Understanding its " +"hardware behavior required different evidence from the Windows games. Existing " +"{ph2}ReC98 work{ph3} gave us valuable knowledge and source material here too." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played complete Normal " +"routes through their endings and checked saves. The current work is a native 64-bit " +"port. Establishing a working DOS version first gives that port a reference." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the compiler " +"and runtime against which we checked our work. But the agent could still follow a " +"question through to a result and let that result guide the next experiment." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what state carries" +" across that boundary and which program is responsible for it. That is something we " +"can investigate against the DOS product. Once the evidence and checks are available, " +"an agent can work through the question much as it did on a Windows title." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did not force " +"us to start over with a new way of working. The architecture defined the problem; the " +"workflow still gave us a way to solve it." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against behavior " +"already recovered on DOS. The knowledge from reconstruction gives the port something " +"to build on." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual testing{ph1} ·" +" {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Once a reconstruction works, I want someone else to be able to understand it." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is a " +"slightly unusual definition of “readable.” Most people would prefer to follow the " +"game's logic without keeping the executable's memory layout in their head." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field may still " +"be known mainly by its offset. We follow how the game uses it until we can explain its" +" role. Then we can give it a meaningful name and a type that fits the evidence. We " +"keep the reasoning with the source so the next person can see where that " +"interpretation came from." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me where " +"something lived in the old executable. It gives a 64-bit implementation little help in" +" deciding which object should own that state. To move the behavior safely, we need to " +"recover the relationship behind the old memory access." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with the " +"historical compiler. Compare the relevant code and data with the original executable. " +"Record unresolved differences so the next phase has a clear starting point." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into the real " +"program using the original architecture and compiler. Exercise important gameplay " +"paths. This is where we can find problems with shared state or initialization that an " +"isolated function comparison missed." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one coherent part of" +" the game at a time and establish what its recovered source means. Improve its " +"representation while preserving the exact comparisons and the playable historical " +"build." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-platform game " +"remains a reference for comparing how the port behaves." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} during the " +"third. The first oracle checks whether our changed source still reproduces the " +"relevant original code and data. The second checks that the reconstructed program " +"still builds and behaves correctly along the paths we exercise." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated instructions. An " +"ownership change can leave two parts of the game using different copies of state. " +"Keeping both checks available gives the agent a concrete failure to investigate before" +" carrying a refactor further." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether a field " +"really means “invulnerability time.” We have to establish that from how the game " +"writes and uses it. If the meaning remains uncertain, a neutral name is more helpful " +"to the next reader than a confident guess." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports before " +"some of its later historical-platform audits. That made certain defects harder to see." +" The {ph0}Factory's current workflow{ph1} puts the original-platform build first, so " +"semantic work can use it as a reference before porting begins." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction makes the " +"recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry much of an " +"investigation forward, improving their working environment became one of the most " +"useful things I could do. A better tool could help with every later function that " +"needed it." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a failed " +"experiment. An agent needs enough freedom to follow that result somewhere unexpected. " +"If it has to wait for me to prescribe each step, much of the work remains tied to my " +"attention." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can test them " +"and learn from the result. A failed check should help it understand the mistake well " +"enough to try again. I still have to decide whether the accumulated evidence supports " +"a project milestone." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's caller can" +" lead straight into inspecting that caller. The reconstruction project supplies the " +"compiler and its own reference checks. The agent can use those to test the source it " +"proposes and see where its explanation holds up." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their own. When " +"the same comparison is used across hundreds of functions, a gap in it can spread much " +"further than a mistake in one implementation. Testing the checker improves the " +"feedback available to all that later work." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and Watt " +"introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust engine valves. A " +"recording version traced pressure through the piston stroke. It made the engine's " +"internal behavior available for inspection. Our comparison tools serve a similar " +"purpose: they let us examine what the machinery is doing while we improve it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks were designed" +" to support, so the process has to develop alongside them. When we find a defect in a " +"shared tool, we have to repair it and revisit the results it affected. The next " +"project can then inherit a stronger tool." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before a large " +"reconstruction is finished. The repository has to make it possible for another session" +" to continue without losing the reason for the last decision." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives projects a" +" shared way to carry their checks and lessons forward. Work on one game can improve " +"the starting conditions for another." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience starts becoming" +" part of tools that others can use. Improving those tools changes how much the next " +"person—or the next agent—can get done." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be fascinating" +" to reverse engineer and still demand more of my own attention than I could " +"realistically give it. Many projects would stay ideas." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated investigations. " +"Getting a working reconstruction makes a port more practical. Recovering readable " +"semantics makes it easier for someone else to explore a mod. The effort put into " +"understanding the game can keep paying off after the first version runs." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone. Each one " +"can improve the way we approach the next. I want to keep exploring how far that can " +"take us." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public GitHub history" +" on 10 October 2026. Elapsed time is calendar time between commits. Source presence, " +"exact comparisons, a build and a runtime result each name a different milestone." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source ledger{ph5}, " +"{ph6}24 August Linux port{ph7}, {ph8}26 August Web edition{ph9}, and {ph10}30 August " +"64-bit Linux release{ph11}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source " +"ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September linkage{ph9}, and " +"{ph10}10 September playable-build record{ph11}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS reconstruction, " +"the maintainer's complete Normal-route testing and the current 64-bit phase." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection bug{ph3}, {ph4}the" +" source and comparison fix{ph5}, and {ph6}the full floating-literal audit{ph7}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and {ph4}the " +"Factory's phase order and two validation paths{ph5}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine indicator " +"record{ph3} describes the 1796 introduction and the pressure-recording mechanism." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game " +"knowledge{ph5} documents retain the working principles and lessons." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with AI agents," +" and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its speed. " +"{ph0}REA returned the running script;{ph1} we used its rule to build this mini-game " +"with {ph2}adjustable speed.{ph3}" +msgstr "" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower or faster" +" game; it switches to a fixed speed. Select the recovered rule to start at 6 and " +"gradually accelerate again." +msgstr "" + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "" + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above remain " +"readable." +msgstr "" + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It returned " +"the loaded {ph2}, including this branch in the game’s update function:" +msgstr "" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an update " +"without a collision." +msgstr "" + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the slider " +"supplies a fixed speed instead. Drawing, jump physics and rectangle collision checks " +"are new code for this teaching game; its simulation advances at 60 updates per second." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic scheduling " +"disabled. Compare those recorded speeds with a replay of the recovered rule." +msgstr "" + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the final " +"increment can take speed just above 13." +msgstr "" + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this prompt." +msgstr "" + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get faster? Show " +"the speed rule, then build a small version with an adjustable speed.{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height control to " +"the new version.”{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and BSD " +"license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome 150." +msgstr "" + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the speed and " +"play." +msgstr "" + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is focused." +msgstr "" + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "" + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "" + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review the " +"proposed changes." +msgstr "" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation skill. " +"Restart your agent when it finishes, then give it a target path and a question. " +"{ph0}Follow the setup guide{ph1} for prerequisites and your first analysis." +msgstr "" + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, Claude Desktop," +" Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot " +"CLI, Command Code, Grok Build, OMP, and VS Code. Grok Bot's connector is added from " +"its chat." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "" + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "REA releases frequently, including bug fixes. If you installed the CLI with npm:" +msgstr "" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your agent " +"through {ph0}, run:" +msgstr "" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "" + +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package version, " +"so refreshing setup makes it use the new release. For one-off CLI commands, use {ph0} " +"followed by the command." +msgstr "" + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA setup{ph1} to " +"connect the MCP server and install the matching skill, then restart your agent so it " +"can call the tools." +msgstr "" + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode and " +"references." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source locations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and packaged " +"resources. {ph0}See the case studies{ph1} for worked investigations." +msgstr "" + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection work with" +" the supplied files and do not need a native analysis engine." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper and " +"propose an installation. Your host and target determine which provider can be used. " +"{ph0}Set up native analysis{ph1}." +msgstr "" + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or Electron app:" +msgstr "" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use the " +"CLI{ph1} for installation options." +msgstr "" + +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "" + +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and relevant " +"constants. JavaScript analysis returns modules, their relationships and source " +"locations." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag checker{ph3} show " +"how that process works." +msgstr "" + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or Electron " +"app:" +msgstr "" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. Show the " +"relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for native, " +"Electron and browser examples." +msgstr "" + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with {ph0}; " +"for Codex:" +msgstr "" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report shows a " +"missing or stale registration, run setup for that client:" +msgstr "" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools remain " +"absent, check the client's MCP connection error. {ph0}More setup diagnostics{ph1}." +msgstr "" + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-run choice " +"of demo mode or license activation before unattended analysis. {ph0}See native " +"provider setup{ph1}." +msgstr "" + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent release may" +" already fix the problem." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating system, " +"target type, steps to reproduce and error output. Include the provider name when the " +"problem involves native analysis." +msgstr "" + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and its model " +"provider's data policy applies to those results." +msgstr "" + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your question, the " +"findings and how you checked them in an {ph0}issue{ph1} or {ph2}pull request{ph3}. " +"Short code excerpts and figures help others follow the investigation." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are welcome too. " +"You can also discuss an example in the {ph0}community{ph1}." +msgstr "" + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, coding agents," +" troubleshooting and sharing examples." +msgstr "" + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "" + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one detail " +"yourself." +msgstr "" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "" + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} and npm; " +"the {ph1}setup guide lists supported versions{ph2}." +msgstr "" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me " +"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already connected? " +"Continue below." +msgstr "" + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} button. Your " +"agent can inspect its code without installing or launching Electron." +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes-example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use REA to " +"find what happens when I click Export notes. Show where {ph4} is written, which fields" +" it contains, and the relevant files and lines.{ph5}{ph6}{ph7}" +msgstr "" + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for inspection." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the path to " +"the {ph0} folder and the same export question." +msgstr "" + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV and writes" +" {ph1} in the user’s Downloads folder. The columns are {ph2} and {ph3}." +msgstr "" + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "" + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the main " +"process.{ph7}" +msgstr "" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in {ph7} and " +"writes the file.{ph8}" +msgstr "" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is read from" +" code." +msgstr "" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "" + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask your agent " +"to show these lines if its answer leaves them out." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself contains a comma " +"or quotation marks?" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then run the " +"example’s {ph4} formatter with {ph5} to check it. Show the prediction and actual " +"output.{ph6}{ph7}{ph8}" +msgstr "" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This checks the " +"formatter directly with {ph0}." +msgstr "" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. Your agent " +"can run the same JavaScript in your platform’s shell." +msgstr "" + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "What happens if the file can’t be written? Follow the error back to the page." +msgstr "" + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or behavior." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in a packaged" +" Electron app.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original instructions and " +"the reconstruction’s checks.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the connection if " +"you get stuck.{ph3}" +msgstr "" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes go, and " +"check the CSV formatter with a sample title." +msgstr "" + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "" + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "" + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "" + +#: website/public/get-started/index.html:198 website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "" + +#: website/public/get-started/index.html:199 website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an older version " +"or \"not recognized\" / \"command not found\", install {ph1} 24 LTS:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "" + +#: website/public/get-started/index.html:219 website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then run {ph0}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this system\"{ph1} when" +" you run {ph2}, run this once and try again:" +msgstr "" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the terminal, " +"open it again, then:" +msgstr "" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check {ph1} if you" +" use it instead." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Prefer a regular installer? Download the LTS version from {ph0}nodejs.org{ph1}." +msgstr "" + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude Code, " +"Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported MCP clients. Grok" +" Bot's connector is added from its chat." +msgstr "" + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in a browser " +"tab. It can read files and run commands, and it asks before making changes. REA gives " +"it reverse-engineering tools." +msgstr "" + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of your choice." +msgstr "" + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup and shows " +"you the plan before changing anything." +msgstr "" + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me " +"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press Enter." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4} {ph5} " +"{ph6}), then press Enter." +msgstr "" + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection and the " +"matching investigation skill, keeping a backup of existing configuration. It asks " +"before applying the changes." +msgstr "" + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "" + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the app " +"completely, then open it again. Closing the window isn't enough. On macOS press {ph2} " +"{ph3}; on Windows, also quit from the tray icon if there is one." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session and start" +" it again." +msgstr "" + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or Electron " +"app, you might start with:" +msgstr "" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and " +"dependencies involved, with the source locations for your findings." +msgstr "" + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "" + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose {ph2}Copy as " +"path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose {ph2}Copy " +"\"…\" as Pathname{ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path appears." +msgstr "" + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without running " +"the app:" +msgstr "" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On Windows, a path " +"such as {ph1} works here." +msgstr "" + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives their " +"source locations. Connections REA cannot resolve are marked in the result." +msgstr "" + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, then give " +"REA your executable or library." +msgstr "" + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on Linux or " +"macOS, on x64 or arm64. Your Ghidra installation needs a native decompiler for your " +"host architecture. Set the paths before running setup:" +msgstr "" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and records " +"valid settings for your selected client. On Linux arm64, you may need to build " +"Ghidra's native decompiler separately." +msgstr "" + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE applications" +" and DLLs on fixed local NTFS drives. Use an existing Ghidra 12.1.x installation and a" +" 64-bit JDK 21 or newer:" +msgstr "" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "Replace the two paths with your installations, then review setup's plan." +msgstr "" + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an existing " +"installation or offers an installation plan for your approval." +msgstr "" + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license activation before" +" an unattended analysis." +msgstr "" + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for an attached" +" GUI or a headless database. Linux and macOS headless analysis remains unverified." +msgstr "" + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON file. An " +"existing {ph3} object with an {ph4} entry is also accepted. Point REA at that file " +"before setup:" +msgstr "" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original binary already" +" open in IDA. The headless profile uses the upstream database-supervisor API and a " +"registration with {ph0}; real verification covers an IDA 9.3 Windows x64 supervisor. " +"Doctor checks the registration without starting IDA." +msgstr "" + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an agent, " +"include {ph1} in the REA registration's environment and select IDA when opening the " +"binary." +msgstr "" + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "" + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. Your " +"agent's MCP queries reuse the imported binary while that session is open." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result leads to a " +"recovered calculation." +msgstr "" + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with {ph0}; for " +"Codex:" +msgstr "" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an Electron " +"app and a browser.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and diagnostics.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}REA community{ph1}{ph2}Questions, investigations and work in progress.{ph3}" +msgstr "" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron app from " +"the terminal. Setup, first questions and native provider guides." +msgstr "" + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "" + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the JavaScript " +"that builds a download." +msgstr "" + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. Clicking it " +"loads {ph4}, formats the two notes as CSV, and starts a download." +msgstr "" + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in your browser " +"while the capture is running.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, response " +"status and JSON structure from the selected page.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the observed " +"request to {ph5} in {ph6}.{ph7}" +msgstr "" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "" + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local debugging " +"port. On Linux:" +msgstr "" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can replace the " +"page URL with another page you want to inspect." +msgstr "" + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform the " +"action, and close the browser when finished." +msgstr "" + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. What request " +"does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page URL. Let " +"it start the capture before you click." +msgstr "" + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and reads the " +"resulting evidence. It can then inspect the script behind the export." +msgstr "" + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its ID, then " +"run:" +msgstr "" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1} in that " +"browser. The result arrives after the observation window ends." +msgstr "" + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that window, " +"and the shape of the JSON response. Earlier requests are outside this capture." +msgstr "" + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its initiator. Read " +"the captured script source to see how the data is used:" +msgstr "" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV formatting " +"step comes from the script; the network capture establishes that this click requested " +"{ph0}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download {ph6}{ph7}" +msgstr "" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing commas or " +"quotation marks?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the {ph0}application " +"workflow{ph1} to follow files and process boundaries." +msgstr "" + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, inspect the " +"request and follow the export script." +msgstr "" + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "" + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each guide " +"includes a prompt, code and results." +msgstr "" + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "" + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller, read " +"numeric constants and check the recovered C." +msgstr "" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "" + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main process. " +"Use REA to connect the API, IPC channel and file writer." +msgstr "" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "" + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code that turns " +"its response into a download." +msgstr "" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "" + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron CSV export " +"and a browser request." +msgstr "" + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "" + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV file writer." +msgstr "" + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls an API in " +"the page, crosses into the main process, and writes a CSV. The behavior is spread " +"across several files." +msgstr "" + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed by " +"{ph7}.{ph8}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC channel: a " +"named message to the main process.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that channel and " +"calls the CSV writer.{ph6}" +msgstr "" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "" + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed API. The " +"path is inferred from code; a runtime capture can check what executes." +msgstr "" + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR file:" +msgstr "" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this app. Where is" +" the CSV created?{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Example prompt. Include the absolute path to the application folder or {ph0}." +msgstr "" + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and process " +"boundaries. Your agent uses that map to narrow the investigation to the export " +"feature." +msgstr "" + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, which exposes" +" it to the renderer." +msgstr "" + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation with the " +"single matching handler in the main process." +msgstr "" + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, and the " +"main process writes {ph1} into the user's Downloads folder." +msgstr "" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "" + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations accompany " +"the API, channel and handler findings." +msgstr "" + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} folder. " +"Analyze it with {ph1} and npm; Electron is not needed for this example." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC channel and one" +" matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An agent can " +"follow a literal string, API name or IPC channel with REA's feature tracing tools." +msgstr "" + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what happens if " +"writing the file fails?" +msgstr "" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names and " +"ambiguous handlers can remain unresolved; runtime observations give you another way to" +" investigate them." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a packaged " +"Electron app.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which request it " +"makes.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature depends " +"on native code.{ph3}" +msgstr "" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler with REA. " +"Includes downloadable example files and a verified analysis result." +msgstr "" + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "" + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then check the " +"recovered C." +msgstr "" + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound code turns it" +" into a left/right panning value." +msgstr "" + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to {ph1}. REA also" +" returns its instructions and callers, which give the agent a way to investigate the " +"missing arithmetic." +msgstr "" + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form such as " +"{ph2} or {ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn " +"instructions back into C-like code. It can miss parts, as in this example." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are passed in." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such as {ph2}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes and " +"decoded." +msgstr "" + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read supplies the " +"value used by the floating-point instructions.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller passes " +"{ph5}.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced bytes decode " +"to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent interprets them " +"together." +msgstr "" + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native analysis " +"tool{ph3}, provide the local executable and a question:" +msgstr "" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to install it. On " +"macOS, open Hopper once and choose demo mode or activate a license before your first " +"analysis." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs an " +"existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. Explain the " +"calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 executable. REA " +"doesn't include DX-Ball, so use your own copy, or ask the same kind of question about " +"another small Windows program you have." +msgstr "" + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose {ph2}Copy as " +"path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose {ph2}Copy " +"\"…\" as Pathname{ph3}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Any system:{ph1} drag the file into a terminal window and its path appears." +msgstr "" + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the tile " +"coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the actual " +"values; the instruction order tells the agent how they are used." +msgstr "" + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 before " +"integer conversion. The calculation puts the center of the screen at the center of the" +" stereo field." +msgstr "" + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205 inputs " +"against the original x86 function and reproduced all 63 compiled bytes of the complete" +" function." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local executable " +"or library and a feature to investigate. Useful starting questions include “How is " +"this file parsed?” or “Which function handles this menu action?”" +msgstr "" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the terminal. " +"For a configured Ghidra installation:" +msgstr "" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. Each CLI " +"invocation imports and analyzes the binary, then closes its session. Your agent's MCP " +"queries reuse the imported binary while that session is open." +msgstr "" + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result leaves a call" +" or value unresolved, use that location as the next question." +msgstr "" + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a caller, read " +"constants and check reconstructed C." +msgstr "" + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "" + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "REA gives your agent the tools to inspect a program and explain what it does." +msgstr "" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me " +"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step setup " +"guide →{ph2}" +msgstr "" + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, {ph2}change " +"it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are these?”" +msgstr "" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "" + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which value goes " +"in?{ph1}”" +msgstr "" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "" + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} after +.”" +msgstr "" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "" + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "" + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply illustrate" +" the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to Calculator and" +" rebuild its % button." +msgstr "" + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running game{ph1}: how " +"fast it starts, how much it increases and when it stops." +msgstr "" + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "" + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above remain " +"readable." +msgstr "" + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its update function" +" and speed settings, then uses that rule in a new game." +msgstr "" + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get faster? Show " +"the speed rule, then build a small version with an adjustable speed.{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, while speed" +" is below {ph4}13{ph5}." +msgstr "" + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its actual code " +"and settings to the agent.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use the " +"recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection and " +"returned the loaded {ph0}, including its source and digest." +msgstr "" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "" + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check, with " +"obstacles and automatic scheduling disabled. After 4,000 updates, speed was 10.0; " +"after 10,000, it was 13.0, rounded to one decimal." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision code are a" +" small teaching implementation. {ph0}Open the lab{ph1} to see the new code and run the" +" same speed check." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection steps{ph1} using " +"{ph2}the dinosaur page{ph3}. Give your agent that page URL and your local debugging " +"endpoint, then copy the prompt above." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both + and ×, " +"and try them." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the installed" +" app to find which number the percentage is applied to." +msgstr "" + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "" + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first number.{ph1} " +"The agent uses both to recreate the % button." +msgstr "" + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "" + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % button" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover the rules " +"after + and ×, then build a small calculator that uses both.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "" + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator app{ph4}{ph5}The code " +"opens {ph6}. The agent then selects the installed app’s library.{ph7}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s code{ph3}{ph4}The " +"function checks the operator and uses the constant {ph5}.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and × " +"above.{ph5}" +msgstr "" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable summary " +"uses names from Microsoft’s public source to explain the recovered branch." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · {ph4}Native " +"setup guide{ph5}" +msgstr "" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "" + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "Download our Notes example, trace its CSV export, and check one changed input." +msgstr "" + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work together " +"on anything from {ph0}cloning this website{ph1} to {ph2}reconstructing a game from its" +" executable.{ph3}" +msgstr "" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for me.{ph4}{ph5}{ph6}" +msgstr "" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "" + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. Recover the " +"gameplay logic in C and test it against the original.{ph3}{ph4}{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables and " +"libraries." +msgstr "" + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder or ASAR " +"archive." +msgstr "" + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results across runs." +msgstr "" + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a GitHub " +"issue{ph5} for bugs and feature requests." +msgstr "" + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow REA on X for" +" project updates." +msgstr "" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "" + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent. Follow " +"clear guides and try interactive examples with REA." +msgstr "" + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is focused." +msgstr "" + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation in an " +"Android APK, then rebuild it with a clock you can control." +msgstr "" + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating methods{ph3}{ph4}REA " +"searches the package and traces the code used by the display and copy actions.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six digits{ph3}{ph4}REA " +"returns the methods and defaults. The agent explains how they fit together.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the code.{ph3}{ph4}A new " +"browser demo reproduces the rule and checks it against public reference cases.{ph5}" +msgstr "" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it change{ph1} " +"and reproduce that behavior." +msgstr "" + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates the six-" +"digit login code, explain why it changes every 30 seconds, and rebuild a small demo " +"where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis configured. " +"{ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block number with" +" the account key to generate a code. The same key and block produce the same code." +msgstr "" + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving within one " +"block leaves the code unchanged." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements the " +"calculation recovered from the APK." +msgstr "" + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the clock." +msgstr "" + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar and " +"imported accounts. TOTP means a time-based one-time password." +msgstr "" + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. Inspecting " +"{ph0} then shows the display calling {ph1}." +msgstr "" + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common {ph0} prefix." +msgstr "" + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating methods.{ph1} " +"The constructors set a 30-second interval and six digits; the timestamp method turns " +"seconds into a block number." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At 60 " +"seconds, the block becomes 2." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with the block. " +"An account with a different key can show a different code at the same time." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is padded with " +"zeroes when needed, so a code can begin with 0." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The right " +"panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and returns this" +" body; the original source calls the helper {ph3}." +msgstr "" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "" + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a positive " +"31-bit number; formatting reduces it to the requested number of digits. The " +"constructor's last argument selects the code-formatting branch introduced by " +"compilation." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "" + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program. Their " +"output matched an independent reconstruction on {ph0}133 test cases{ph1}, including " +"time-block boundaries and codes beginning with zero." +msgstr "" + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in {ph0}RFC " +"6238{ph1}. Check the browser implementation against them:" +msgstr "" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-digit results." +msgstr "" + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK was " +"inspected statically." +msgstr "" + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into the same " +"folder. On Windows, use a Linux environment such as WSL." +msgstr "" + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or {ph1}. This " +"case used JDK 21." +msgstr "" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "" + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, add {ph0} " +"to the REA server's environment and reconnect it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a different " +"time interval?{ph1}" +msgstr "" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited to Aegis;" +" the diagram, readable summary and browser reconstruction are new teaching material." +msgstr "" + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code calculation " +"and try a reconstruction with an adjustable clock." +msgstr "" + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "" + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and find an " +"input that makes the original program print {ph0}." +msgstr "" + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA finds the " +"prompt, its references and the code that accepts or rejects an input.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA returns the " +"instructions and data behind each check. The agent turns them into equations.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python script " +"solves the equations. REA captures the original program accepting the result.{ph5}" +msgstr "" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or {ph1}. " +"Start with a simple request to your agent." +msgstr "" + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/ctf/index.html:262 website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. Explain how the " +"checks work, then verify the answer with the original program.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a native " +"analysis provider connected." +msgstr "" + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "" + +#: website/public/showcase/ctf/index.html:289 website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the executable's " +"original function names have been removed." +msgstr "" + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, sums the " +"selected codes and compares the result with a stored number. Its {ph0}-byte steps " +"across {ph1} bytes give 26 masks." +msgstr "" + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path is " +"shortened for display; addresses refer to REA's imported image." +msgstr "" + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells contribute to" +" a sum. Its compact encoding uses negative numbers to skip cells and positive numbers " +"to select them." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} means −21. " +"The target is a little-endian integer. Together, these bytes tell the agent that " +"{ph2}, so that character is {ph3}." +msgstr "" + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule in C." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a nonzero value " +"includes it." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset is added " +"to the sum." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes per " +"integer and visits six rows of six cells." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum in {ph2}. A" +" mismatch jumps to {ph3}." +msgstr "" + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an explanatory " +"summary with descriptive names and a flattened 36-cell loop." +msgstr "" + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 character codes " +"and requires a total of 1441. The overlapping selections give equations that a small " +"Python script can solve together." +msgstr "" + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt uses the " +"extracted checks and assumes a {ph0} flag with letters, digits, underscores and " +"braces. The complete download includes all 26 masks and targets." +msgstr "" + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved flag. " +"Changing one selected character from {ph0} to {ph1} makes the first sum 1440 instead " +"of 1441, and the program rejects it." +msgstr "" + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published challenge " +"metadata, checked after solving the binary." +msgstr "" + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 with Ghidra" +" 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248 bytes." +msgstr "" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "" + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading the " +"organizers' source or solution. The Python solver and the diagram were built from " +"those REA results." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and flag{ph3} " +"· {ph4}REA evidence notes{ph5}" +msgstr "" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the prompt above " +"to investigate with your agent, or run the included script." +msgstr "" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "" + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. Solving needs " +"Python and {ph0}. Running the original executable needs Linux x86-64." +msgstr "" + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the checking " +"functions, extract the masks and compare a recovered flag with the original program." +msgstr "" + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only that cell " +"contributes to the sum. Its required character code is 55, which means the character " +"is 7." +msgstr "" + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the agent " +"inspect the original, one function at a time." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, callers and" +" data reads; the reconstruction project implements and tests the result. {ph0}Open " +"figure{ph1}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, animations, " +"particles and bonus production. Current builds provide inspection utilities and an " +"analysis library. Work on the playable game continues with ball and paddle physics, " +"power-up handling and Windows integration." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. The " +"investigation needed to recover how that screen coordinate becomes a left/right " +"panning value." +msgstr "" + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. Explain the " +"calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable available. The " +"investigation below shows the REA queries and evidence behind the answer." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and read the " +"constants from the executable. Those results supplied the input and arithmetic needed " +"to write the C function below." +msgstr "" + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and calling " +"{ph2}. Its instruction view showed a stack input and floating-point operations. That " +"discrepancy gave the agent a concrete reason to keep investigating." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals the input " +"and the calculation feeding that call." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. Here, " +"{ph0} exposes the integer input missing from the decompiler view." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions scale {ph0}" +" by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan scale. The " +"agent now has the values needed for the C expression." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original instructions and " +"the C lines they informed." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result reads " +"{ph2} and uses {ph3} to load the integer. Following its caller through REA establishes" +" the screen-coordinate meaning of the C parameter {ph4}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The bytes returned" +" by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte result " +"decodes to {ph4}, shifting the calculation's center to screen coordinate {ph5}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That global is " +"named {ph4} in the maintained source. REA's second byte read establishes its initial " +"value of {ph5}." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, identified in REA's" +" callee results. The C casts the result to {ph4}; original-x86 comparisons check the " +"returned value." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. The full " +"listing below also includes the intervening stores and function setup and cleanup." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, then pushes" +" it before the call:" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence references{ph3}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the original, and " +"its compiled bytes match the executable." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value with the " +"maintained C. They cover every integer position from 0 to 640 at five pan scales: 0, " +"0.5, 1, 20 and −1." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay matches " +"the complete function after applying the reviewed relocations and checking the " +"referenced constants." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 at the " +"center and 500 at the right edge. The next part of the audio work is integrating that " +"value with the game's sound backend." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and bonus " +"generation: inspect the relevant functions, recover their state and dependencies, then" +" compare the implementation with the original." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's setup " +"instructions and supply its matching original target. Then run:" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local setup.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the same approach" +" with your own binary.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into state, queues" +" and pixel writes.{ph3}" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to maintained C, " +"original-x86 tests and matching compiled function bytes." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller supplies 20 " +"plus 30 times tile_x. Instructions load x, multiply by 1.5625, subtract 500.0, apply " +"pan_scale and return an integer. The maintained C is checked independently against the" +" original x86 in 3,205 cases and by VC4.0 compiler replay matching 63 bytes." +msgstr "" + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "" + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked results." +msgstr "" + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the generating " +"methods with REA, then move a demo clock to see why the code changes every 30 seconds." +msgstr "" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "" + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking functions, turn " +"masks and sums into equations, then verify the solved flag with the original program." +msgstr "" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "" + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's instructions, caller " +"references and numeric constants lead to a small C function, checked against the " +"original behavior and all 63 compiled bytes." +msgstr "" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "" + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC wrappers " +"to the system clipboard, then see how a small HTML marker keeps rich block data " +"connected to a copy." +msgstr "" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "" + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, divide and " +"coordinate operations to readable C++, then see how they produce a ring aimed at the " +"player." +msgstr "" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "" + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a browser " +"request. Each starts with a prompt and a concrete target." +msgstr "" + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android authenticator, " +"DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "" + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main process, " +"to Electron's clipboard writer." +msgstr "" + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a callable " +"method.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the channel and " +"arguments.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks which " +"page sent it.{ph6}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the supplied text" +" and HTML.{ph6}" +msgstr "" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. Resolving the" +" wrappers reveals the Electron calls behind those names." +msgstr "" + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a wrapper. " +"The useful question is what that wrapper sends, and which code receives it." +msgstr "" + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the system " +"clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your coding " +"agent." +msgstr "" + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and the call " +"that sends an IPC request. Both findings come with source ranges in the minified " +"bundle:" +msgstr "" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded with REA " +"4.1.0. Positions use the original bundle's line and zero-based column." +msgstr "" + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled API, and " +"reads {ph0}. Its call site supplies {ph1}. That name gives the agent something precise" +" to look for in the main bundle. The four excerpts below show the route it connects." +msgstr "" + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. Unrelated " +"members are omitted." +msgstr "" + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us how the " +"request leaves the page's process." +msgstr "" + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-response " +"IPC. We can now look for {ph0} on the main-process side." +msgstr "" + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} receiver " +"for that channel." +msgstr "" + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the supplied " +"data to Electron's clipboard API. The channel and the two resolved wrappers connect " +"the exposed method to this call." +msgstr "" + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block data locally" +" and puts an ID in the copied HTML to connect them." +msgstr "" + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data when IDs " +"match; a stale entry returns only text and HTML." +msgstr "" + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy. Matching " +"IDs restore the block data." +msgstr "" + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table becomes header " +"and data rows." +msgstr "" + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows and cells." +msgstr "" + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a message " +"channel and gives one port to the renderer and the other to a SQLite utility process. " +"Subsequent statement batches and results travel over that port." +msgstr "" + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why tracing only the" +" initial IPC request misses the later conversation." +msgstr "" + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab preload and " +"{ph1}. The excerpts expand minified variable names and omit unrelated code; the " +"sender-check helper is shown with its underlying {ph2} call." +msgstr "" + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on July 13, " +"2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets have their own " +"version. Saved probes executed extracted modules and small harnesses; their outputs " +"describe those probes rather than a captured desktop UI session." +msgstr "" + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, recorded " +"with the published REA 4.1.0 package. It locates the API and invoke operation. The " +"clipboard member and matching receiver are connected by reading their wrapper " +"implementations in the package." +msgstr "" + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that both page " +"and chat filters preserve this table. The paste/import, structured Markdown and " +"AI/chat parsers have separate entry points and intermediate formats." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron application's " +"export feature.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked C " +"function.{ph3}" +msgstr "" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and main " +"process, with short code excerpts and a look at its rich clipboard format." +msgstr "" + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "" + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect the " +"original DOS function, then follow its instructions into readable C++." +msgstr "" + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and its " +"bullet-angle helper.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + references{ph3}{ph4}Verify the " +"loaded DOS code and read the angle calculation from the executable.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each operation " +"to the maintained reconstruction.{ph5}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded compiler " +"checks cover the bullet-generation code that contains this helper.{ph5}" +msgstr "" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project supplies the" +" maintained source and compiler checks." +msgstr "" + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper " +"calculates the direction of each bullet. The same ring can face a fixed direction or " +"turn toward the player." +msgstr "" + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims it at the " +"player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout available " +"locally." +msgstr "" + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each index adds " +"16 units: {ph0}. Adding the player's direction rotates those positions together." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction 40 and " +"template rotation 0. {ph0}Open figure{ph1}" +msgstr "" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. {ph0}Read the" +" attack's source{ph1}." +msgstr "" + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. REA returns" +" its instructions, pseudocode and references. Three parts of that result explain the " +"pattern." +msgstr "" + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied executable. The " +"path above is shortened for display." +msgstr "" + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the division uses " +"the count read from {ph1}. The maintained source names that field {ph2}. The complete " +"sequence appears below." +msgstr "" + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction helper. Its" +" return value is added to the relative ring angle. Source names make those addresses " +"readable; REA lets the agent check the original operations behind them." +msgstr "" + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation. This " +"summary follows the aimed-ring path; the full source also handles spreads, stacks and " +"random patterns." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into {ph2}. In a " +"16-bullet ring, this member index runs from 0 through 15." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by 256. The " +"count is zero-extended into a word, then {ph3} divides the product by that count. For " +"count 16, each index advances 16 angle units." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-minus-origin" +" coordinates. The direction helper returns an angle in {ph2}; adding it turns the " +"whole ring toward the player." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. Elly's " +"initial template sets it to zero; other patterns can use the same helper with a " +"rotation." +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to the spawn-" +"angle field. Values wrap after 255, just as the unsigned-byte cast does. The " +"surrounding source also converts this angle and speed into velocity." +msgstr "" + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store. The C++ " +"above is a readable summary. Compiler checks below apply to the maintained source in " +"the linked project." +msgstr "" + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, including this " +"helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the original " +"executable." +msgstr "" + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input hashes match " +"the maintained source shown here." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this helper. " +"They also compare its MAP contribution and overlapping relocation." +msgstr "" + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses describe " +"that analysis image. The function result reports 503 body bytes in two ranges across a" +" 517-byte span; the selected instructions above lie in those reported ranges." +msgstr "" + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. Earlier " +"reconstruction observations used the project's own analysis scripts; this page adds a " +"fresh REA inspection of the same original target. The supplied game's identity is " +"pinned by its repository manifest, with independent pristine-dump provenance still " +"open." +msgstr "" + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and PC-98 " +"hardware behavior have separate runtime checks in the reconstruction project." +msgstr "" + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and assembly. " +"Beyond bullet generation, the source covers stages, bosses, rendering, input, menus, " +"endings and score handling." +msgstr "" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern types and " +"template tuning.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the project's " +"PC-98 emulator workflow.{ph3}" +msgstr "" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native x64 " +"port.{ph3}" +msgstr "" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and recovered " +"C++ to see how a ring of bullets is spaced and aimed at the player." +msgstr "" + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. Adding a player" +" direction of 40 rotates every direction by the same amount; the highlighted first " +"bullet points toward the player. Both keep a spacing of 16 angle units, or 22.5 " +"degrees." +msgstr "" + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "" + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows the code at " +"59 seconds." +msgstr "" + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "{passed} / {total} checks passed (six reference cases, at six and eight digits)." +msgstr "" + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "" + +#: website/public/assets/dino-demo.js:91 website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "" + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "" + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "" + +#: website/public/assets/dino-demo.js:177 website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "" + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "" + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "" + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "" + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "" + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-game check " +"when rounded to three decimals." +msgstr "" + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed rule and " +"settings above." +msgstr "" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "" + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "" + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "" + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "" + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "" + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its character " +"code must equal 55, so the character is 7. The other masks select different positions " +"and give further equations." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "" + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball function. " +"A stack input is multiplied by 1.5625, offset by 500, scaled, and converted to an " +"integer. Maintained C is checked in 3,205 original-x86 cases and a separate 63-byte " +"compiler replay." +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local analysis " +"adapters, returns evidence, and supports follow-up questions as your agent explains, " +"implements and tests." +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "" + +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles zero, " +"sixteen, thirty-two, through 240. Adding an example player direction of forty turns " +"all sixteen directions together; the first bullet points at the player. Template " +"rotation is zero." +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "" diff --git a/website/locales/pl/messages.po b/website/locales/pl/messages.po new file mode 100644 index 000000000..c236a4307 --- /dev/null +++ b/website/locales/pl/messages.po @@ -0,0 +1,13371 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Spis treści{ph1} / Blog" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blog." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Myśli o inżynierii odwrotnej." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Rekonstrukcja gry{ph0}Esej" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "Rewolucja przemysłowa w inżynierii odwrotnej" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"Co Instrukcja RE i rekonstrukcji TH08, TH095 i TH04 nauczył mnie O agentów, " +"weryfikacja i wiedza, że związki całej projektów." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Przeczytaj artykuł" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Przez N0zoM1z0 * 10 października 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Top" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA Blog-przemyślenia na temat inżynierii odwrotnej" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Przemyślenia na temat inżynierii odwrotnej, czerpiąc z praktycznego " +"doświadczenia z agentami REA i AI." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-dowiedz się, jak działa oprogramowanie. Inżynieria odwrotna z twoim " +"agentem kodującym." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Strona główna REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Główna nawigacja" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA na GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Dołącz do REA na Discordzie" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Obserwuj REA na X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Spis treści{ph1} / {ph2}Blog{ph3} / Rekonstrukcja Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Esej * rekonstrukcja Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "Rewolucja przemysłowa w inżynierii odwrotnej." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Przez N0zoM1z0 * 10 października 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Najważniejsze" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Daj agentom autonomię w śledztwie.{ph1} Ustal jasny cel i kryteria " +"akceptacji, a następnie pozwól agentowi zdecydować, co spróbować dalej." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Użyj repozytorium i Git jako pamięci roboczej.{ph1} Zachowaj " +"rozumowanie z kodem. Punkty kontrolne Git pozwalają kontynuować następną " +"sesję po zakończeniu rozmowy." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Niech dowody decydują o tym, co twierdzisz.{ph1} Pewne wyjaśnienie " +"nadal wymaga testowania. \"Nieznany\" to prawidłowa odpowiedź, gdy dowody są" +" niekompletne." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Przetestuj również odniesienie do weryfikacji (oracle).{ph1} Wypróbuj " +"przypadki, które powinien odrzucić. Jeśli pominie błąd, wróć do " +"wcześniejszych wyników, które od niego zależały." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Jesteśmy w pierwszych dniach rewolucji przemysłowej RE.{ph1} Metody " +"wciąż nabierają kształtu. Pozostało wiele do odkrycia." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Jak doświadczyć związków" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Human direction{ph1} * Kryteria celu i akceptacji" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Samodzielność" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Agent" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Wybierz eksperyment.{ph0}Zaproponuj hipotezę." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Weryfikacja" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Wzorzec weryfikacji" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Test przeciwko{ph0}konkretne odniesienie." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Repozytorium" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Pamięć robocza" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Kod, dowód,{ph0}czeki i lekcje." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Niedopasowanie{ph0}{ph1}Zrewiduj hipotezę{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "A better{ph0}{ph1}punkt wyjścia{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Ponowne wykorzystanie" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Przełęcz{ph1} * Zachowaj wynik i jego dowody" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Każdy projekt pozostawia następny z lepszym punktem wyjścia. Obejmuje to " +"ustalenie czeków, gdy odkryjemy lukę." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "W tym artykule" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Sierpień 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08: kontynuacja{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Dwa podejścia{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095: składanie{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: w różnych architekturach{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}Od dokładnego do czytelnego{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Zmiana przemysłowa{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Co staje się możliwe{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Co się zmieniło w sierpniu 2026 roku" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Przed tą pracą wykonałem wiele ręcznej inżynierii odwrotnej. Sprawdzałem " +"funkcję, dopóki nie miałem wyjaśnienia, a następnie testowałem to " +"Wyjaśnienie przeciwko programowi. Pójście dalej oznaczało spędzenie większej" +" ilości czasu na następnej funkcji. Oznaczało to również utrzymanie coraz " +"większego obrazu w mojej głowie." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"Większość moich prac re jest na grach. Rekonstruuję je, aby ich zachowanie " +"można było zrozumieć i ostatecznie przenieść do portu oprogramowania lub " +"modu. To jest doświadczenie stojące za tym artykułem. Metoda może być " +"przydatna gdzie indziej, ale każde pole musi ustalić, co może sprawdzić z " +"wiarygodnym odniesieniem." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"W sierpniu 2026 roku zacząłem poważnie eksplorować re napędzane agentami. " +"Chciałem zobaczyć, jak daleko agent może się dostać z dostępem do programu i" +" zwykłych narzędzi programistycznych. Rekonstrukcja Touhou dała mi znaczący " +"projekt, w którym mogę się dowiedzieć." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Wczesny postęp był zaskakujący. Śledztwo może trwać bez mojego wyboru " +"każdego indywidualnego kroku. Nieudane porównanie może wysłać Agenta do " +"innego dzwoniącego. Może napisać małą diagnostykę i wykorzystać wynik, aby " +"zdecydować, co spróbować dalej. Przyznanie tej wolności miało znaczenie: " +"mogłem poświęcić więcej uwagi kierunkowi projektu i temu, czy jego kontrole " +"są godne zaufania." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"Tempo najpierw zwróciło moją uwagę. Potem zacząłem się zastanawiać, co " +"przetrwa poza obecnym projektem. Czy następna gra skorzysta na wszystkim, " +"czego się właśnie nauczyliśmy?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: budowanie na ludzkiej pracy" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08 {ph1}, Niezniszczalna noc, rozpoczęła się jako kontynuacja {ph2} " +"Rekonstrukcja GensokyoClub{ph3}. Ich publiczne źródło dało mi solidne " +"podstawy. Przyszedł ze znajomością budowy i historią wkładów, które " +"zachowałem w kontynuacji." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"Importowana historia kończy się w publicznym punkcie kontrolnym 10 sierpnia." +" Moja niezależna kontynuacja rozpoczęła się 13 sierpnia. Do 19 sierpnia " +"Księga rejestrowała źródło wszystkich 1107 zidentyfikowanych funkcji gry." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Grywalny Port rekonstrukcji Linux został popełniony 24 sierpnia, mniej " +"więcej jedenaście dni po rozpoczęciu kontynuacji. Nastąpiło wydanie " +"internetowe. Natywna 64-bitowa wersja Linux pojawiła się 30 sierpnia." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Uderzyło mnie to, że praca dotarła do programu, który ludzie mogli " +"uruchomić. Dotarcie tam wymagało następujących problemów wykraczających poza" +" indywidualną funkcję. Nawet jeśli dwie funkcje wyglądały poprawnie w " +"izolacji, mogły przypadkowo użyć oddzielnych kopii stanu, które powinny były" +" zostać udostępnione." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"To sprawiło, że kontrole referencyjne były kluczowe dla pracy. Nazywam je " +"{ph0}referencje weryfikacyjne (wyrocznie){ph1}. Porównanie kodu może nam " +"powiedzieć, czy zrekonstruowana funkcja odtwarza oryginalne instrukcje. " +"Kontrola czasu wykonywania może nam powiedzieć, czy ćwiczona trasa osiąga " +"oczekiwany stan. Agent proponuje wyjaśnienie i testuje je; niedopasowanie " +"daje mu coś konkretnego do zbadania." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Dokładne dopasowanie z niewłaściwą stałą" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Referencja weryfikacyjna (oracle) to oprogramowanie, które ktoś napisał. " +"TH08 dał mi wyraźne przypomnienie, ile może zależeć od tego oprogramowania." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"We wrześniu błąd zgłoszony przez port przełącznika w dół doprowadził do " +"automatycznego zbierania przedmiotów. Zrekonstruowane źródło sprawdziło moc " +"gracza przeciwko {ph0}. Oryginalny używany {ph1}, maksymalny próg mocy." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"Normalna moc jest nieujemna, więc zrekonstruowana kontrola mocy była " +"skutecznie zawsze spełniona. Powyżej linii kolekcji gra może przyciągać " +"przedmioty bez konieczności maksymalnej mocy. Pozostałe wyjątki w tym stanie" +" były poprawne. Ta jedna stała zmieniła zachowanie." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}Jednak funkcja przeszła już dokładne porównanie.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Odbudowa może umieścić stałą pod innym adresem. Narzędzie porównujące " +"uwzględniło to, dostosowując adresy w skompilowanych instrukcjach przed " +"porównaniem ich z oryginałem. Ale nigdy nie sprawdzał wartości " +"zmiennoprzecinkowej przechowywanej pod adresem, do którego się odwołuje." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"To zostawiło dziurę w czeku. Może wskazywać zrekonstruowaną instrukcję na " +"oryginał {ph0} podczas gdy źródło wciąż mówi {ph1}. Bajty instrukcji " +"dopasowane. Źródło oznaczało coś innego." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"The {ph0}2 września poprawka{ph1} Poprawiono źródło i porównano rzeczywiste " +"bajty przywoływanej stałej. A {ph2}szerszy audyt{ph3} następnie zbadano 1548" +" stałych zmiennoprzecinkowych odniesień. Znalazł kolejne dwanaście błędnych " +"odniesień w pięciu akceptowanych funkcjach." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"Porównanie sprawdza teraz każdą taką stałą zmiennoprzecinkową. Jego testy " +"zawierają celowo błędne wartości, aby upewnić się, że zostały odrzucone. " +"Musieliśmy również ponownie sprawdzić wyniki, które przeszły słabszą " +"kontrolę." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}Referencja weryfikacyjna (oracle) również wymagała rekonstrukcji.{ph1} " +"Naprawa była częścią naprawy gry." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Ma to znaczenie, gdy zespół składa się głównie z jednej osoby pracującej z " +"agentami. Nie mogę osobiście sprawdzić każdej linii, którą produkują, więc " +"duża część mojego zaufania spoczywa na ich czekach. Blind spot shared " +"verification reference (oracle) może wpłynąć na wiele dochodzeń, zanim to " +"zauważę. Muszę zrozumieć, co faktycznie weryfikuje kontroler i przetestować " +"go pod kątem przypadków, które powinny się nie udać." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"W miarę kontynuowania prac kontrole te stały się częścią repozytorium. " +"Podobnie jak przyczyny zmian źródłowych i notatek, które pozwalają na " +"późniejszą sesję w miejscu, w którym zatrzymała się wcześniejsza. " +"{ph0}Repozytorium kodu źródłowego stawało się pamięcią roboczą " +"projektu.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Udana partia dała nam zarówno odzyskany Kod, jak i lepsze środowisko " +"dla następnej partii.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Dwie różne koncepcje rekonstrukcji" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub {ph0}publiczny README{ph1} wyraźnie wyraża sprzeciw wobec tego " +"rodzaju pracy. W zawiadomieniu zapowiada się, że dalszy rozwój nastąpi " +"prywatnie do czasu zakończenia. Jeden fragment brzmi:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"Powstanie grifterów (dekompilacje AI i porty) w tej przestrzeni biorąc z " +"naszej pracy maluje zły obraz dla przyszłych wysiłków dekompilacyjnych…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"Zawiadomienie opisuje również psychologiczne żniwo dla opiekunów. Ich " +"polityka wkładu wyklucza pull requesty wytwarzane głównie za pomocą " +"sztucznej inteligencji. Poświęcili swój wolny czas na trudną pracę,a ta " +"praca pomogła mi kontynuować. Szanuję wysiłek, który za tym stoi. Spór, " +"który chcę omówić, dotyczy tego, jak powinna przebiegać odbudowa i jak " +"należy oceniać wkład." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"W ręcznym przepływie pracy, który znałem, rozwijanie zrozumienia funkcji i " +"jej rekonstrukcja Zwykle przypadało tej samej osobie. Projekt w dużej mierze" +" opierał się na wiedzy tej osoby. Zaufanie do współpracownika miało " +"znaczenie, ponieważ tak wiele rozumowania wydarzyło się, gdy pracowali." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Istniejące projekty już zachowują wiedzę w swoim źródle i budują narzędzia. " +"Zmieniło się dla mnie to, że agent mógł wykorzystać tę wiedzę do " +"samodzielnego prowadzenia następnego śledztwa." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"W mojej kontynuacji decyduję o celu i standardzie akceptacji wyniku. Agent " +"ma szeroką swobodę prowadzenia dochodzeń. Proponowana rekonstrukcja musi " +"następnie przetrwać odpowiednie kontrole. Chcę, aby inna osoba mogła zbadać," +" dlaczego wybraliśmy implementację, nawet jeśli agent wykonał większość " +"pracy." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"To może być trudne przejście. Lata starannej pracy mogą stać się podstawą " +"kontynuacji, która porusza się znacznie szybciej. To rodzi prawdziwe pytania" +" dotyczące kredytu. Zmienia również to, co opiekunowie muszą wiedzieć przed " +"przyjęciem wkładu." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"Analogia przemysłowa pomaga mi o tym myśleć. W rzemiośle znaczna część " +"procesu zależy od umiejętności osoby, która go wykonuje. Maszyny zmieniają " +"się tam, gdzie ta umiejętność jest potrzebna. Ktoś nadal musi zaprojektować " +"proces i rozpoznać, kiedy jego wynik jest nieprawidłowy. Różne społeczności " +"mogą wybrać, ile z tej zmiany chcą podjąć." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Moim wyborem jest otwarcie kontynuować, z przypisaną odziedziczoną pracą i " +"zachowaną jej historią. Chcę, aby nowa praca była możliwa do przejrzenia. To" +" daje nam sposób, aby zapytać, jak daleko może zajść to podejście i " +"wyciągnąć wnioski z tego, co dzieje się nie tak po drodze." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Źródło: GensokyoClub {ph0}README zawiadomienie{ph1}, sprawdzone 10 " +"października 2026 r. i jego {ph2}Polityka składek{ph3}. Cytat jest skróconym" +" fragmentem. TH08 {ph4}kredyty i pochodzenie{ph5} Zapisz granicę " +"kontynuacji." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: doświadczenie zaczyna się mieszać" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095 {ph1}, Shoot the Bullet, sprawił, że wartość tego doświadczenia " +"była znacznie łatwiejsza do zobaczenia. Jego repozytorium rozpoczęło się 29 " +"sierpnia z zerowymi potwierdzonymi funkcjami gry w Księdze. Nadal musieliśmy" +" nauczyć się gry. Ale wiedzieliśmy już znacznie więcej o tym, jak rozpocząć " +"rekonstrukcję i jak ją utrzymać." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"Do 7 września wszystkie 697 zidentyfikowanych funkcji gry miało źródło. Do 8" +" września 696 zostało zaakceptowanych jako dokładne porównania. Cały program" +" połączył się 9 września. Rekonstrukcja Windows i386 została oznaczona jako " +"grywalna 10 września, około dwanaście dni po inicjalizacji." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Uważam to za bardziej ekscytujące niż szybkość pierwszego projektu. Nowy cel" +" mógłby skorzystać z pracy wykonanej nad inną grą. Doświadczenie było już " +"obecne w narzędziach i sposobie organizacji projektu." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Na przykład TH08 nauczył nas wcześnie zwracać uwagę na zmontowany program. " +"Jeśli kilka odzyskanych funkcji zależy od tego samego stanu, ich pojedyncze " +"porównania pozostawiają ważne pytanie otwarte. Musimy zobaczyć, jak pracują " +"razem. Ta lekcja pomogła ukształtować sposób, w jaki zbliżyliśmy się do " +"kompilacji całego programu TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Lekcja, która pozostaje w mojej głowie, jest przydatna, gdy tam jestem. Gdy " +"stanie się to sprawdzeniem, czy może uruchomić się kolejna sesja, może pomóc" +" po przejściu dalej. Następny agent może wykorzystać wynik bez powtarzania " +"dochodzenia, które do niego doprowadziło." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Zmiennoprzecinkowy błąd stałej również należy do tej pamięci. Wyjaśnia, " +"dlaczego sprawdzenie odwołania wymaga również sprawdzenia danych za nim " +"stojących. Utrzymanie tej korekty za pomocą kodu pomaga późniejszym " +"projektom uniknąć dziedziczenia martwego pola starego czeku." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}Metoda staje się częścią materiału wyjściowego do następnej gry.{ph1} " +"Możemy poświęcić więcej wysiłku następnego projektu na to, co jest naprawdę " +"nowe w jego celu." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Ta sama korzyść jest dostępna dla osób dołączających później. Mogą sprawdzić" +" decyzję i ponownie uruchomić kontrolę przed kontynuowaniem pracy. Nie muszą" +" rekonstruować całej historii projektu, aby dowiedzieć się, dlaczego źródło " +"wygląda tak, jak wygląda." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: przepływ pracy przetrwa inną architekturę" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04 {ph1}, Lotus Land Story, wziął tę pracę do ery PC-98 DOS. Celem " +"było teraz środowisko 16-bitowe z czterema współpracującymi programami. " +"Zrozumienie jego zachowania sprzętowego wymagało różnych dowodów od gier " +"Windows. Istniejące {ph2}ReC98 praca{ph3} dał nam również cenną wiedzę i " +"materiały źródłowe." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"Rekonstrukcja DOS już działa. W moich testach ręcznych grałem w pełne " +"normalne trasy przez ich zakończenia i sprawdzałem zapisy. Obecna praca to " +"natywny port 64-bitowy. Ustanowienie działającej wersji DOS najpierw daje " +"temu portowi odniesienie." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"Architektura zmieniła to, co musieliśmy zbadać. Zmienił również kompilator i" +" Środowisko wykonawcze, w którym sprawdzaliśmy naszą pracę. Ale agent może " +"nadal podążać za pytaniem aż do wyniku i pozwolić temu wynikowi kierować " +"następnym eksperymentem." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Rozważ przejście od rozgrywki do zakończenia. Musimy wiedzieć, jaki stan " +"przenosi tę granicę i który program jest za to odpowiedzialny. To jest coś, " +"co możemy zbadać przeciwko produktowi DOS. Gdy dowody i kontrole są " +"dostępne, agent może przepracować pytanie tak samo, jak w przypadku tytułu " +"Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"Dlatego TH04 ma znaczenie dla argumentu. Istotna zmiana platformy nie " +"zmusiła nas do rozpoczęcia od nowa z nowym sposobem pracy. Architektura " +"zdefiniowała problem; przepływ pracy nadal dał nam sposób na jego " +"rozwiązanie." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"W przypadku portu 64-bitowego możemy teraz zbadać nową implementację pod " +"kątem zachowania już odzyskanego w DOS. Wiedza z rekonstrukcji daje portowi " +"coś do zbudowania." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Stan projektu na 10 października 2026 r: {ph0}Rekonstrukcja DOS i testy " +"ręczne{ph1} · {ph2}Port 64-bitowy{ph3}. Port pozostaje w fazie rozwoju." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Od dokładnego kodu do czytelnego kodu" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "Gdy rekonstrukcja zadziała, chcę, aby ktoś inny mógł to zrozumieć." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Dla mnie montaż i surowe przesunięcia mogą czuć się jak starzy przyjaciele. " +"Zdaję sobie sprawę, że jest to nieco nietypowa definicja " +"\"czytelnego\".\"Większość ludzi wolałaby podążać za logiką gry bez " +"trzymania w głowie układu pamięci pliku wykonywalnego." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"Właśnie tam {ph0}rekonstrukcja semantyczna{ph1} wchodzi. Odzyskane pole może" +" być nadal znane głównie z jego przesunięcia. Śledzimy, jak gra go używa, " +"dopóki nie wyjaśnimy jej roli. Następnie możemy nadać mu znaczącą nazwę i " +"typ, który pasuje do dowodów. Trzymamy rozumowanie ze źródłem, aby następna " +"osoba mogła zobaczyć, skąd pochodzi ta interpretacja." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Staje się to szczególnie ważne w przypadku portu oprogramowania. Adres " +"bezwzględny mówi mi, gdzie coś żyło w starym pliku wykonywalnym. Daje " +"64-bitową implementację niewielką pomoc w podjęciu decyzji, który obiekt " +"powinien posiadać ten stan. Aby bezpiecznie przenieść zachowanie, musimy " +"odzyskać związek stojący za starym dostępem do pamięci." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "Kolejność, której teraz używam, to:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Odzyskaj dokładną linię bazową.{ph1} Skompiluj zrekonstruowane elementy" +" za pomocą kompilatora historycznego. Porównaj odpowiedni kod i dane z " +"oryginalnym plikiem wykonywalnym. Zapisz nierozwiązane różnice, aby następna" +" faza miała wyraźny punkt wyjścia." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Zbuduj i zagraj na oryginalnej platformie.{ph1} Połącz te elementy z " +"prawdziwym programem za pomocą oryginalnej architektury i kompilatora. Ćwicz" +" ważne ścieżki rozgrywki. W tym miejscu możemy znaleźć problemy ze stanem " +"współdzielonym lub inicjalizacją, które przeoczyło izolowane Porównanie " +"funkcji." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Zrekonstruuj semantykę na podstawie obu odniesień.{ph1} Weź jedną " +"spójną część gry na raz i ustal, co oznacza jej odzyskane źródło. Popraw " +"jego reprezentację, zachowując dokładne porównania i grywalną historyczną " +"kompilację." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Stwórz nowoczesny port.{ph1} Przenieś ustalone zachowanie do nowego " +"środowiska, takiego jak natywna kompilacja 64-bitowa. Zrekonstruowana " +"oryginalna gra platformowa pozostaje punktem odniesienia do porównania " +"zachowania portu." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"Grywalna kompilacja z drugiego etapu staje się {ph0}drugie odniesienie do " +"weryfikacji (oracle){ph1} podczas trzeciego. Pierwsze odniesienie " +"weryfikacyjne (oracle) sprawdza, czy zmienione źródło nadal odtwarza " +"odpowiedni oryginalny kod i dane. Drugi sprawdza, czy zrekonstruowany " +"program nadal buduje i zachowuje się poprawnie wzdłuż ścieżek, które " +"ćwiczymy." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Łapią różne błędy. Zmiana typu może zmienić wygenerowane instrukcje. Zmiana " +"własności może pozostawić dwie części gry przy użyciu różnych kopii stanu. " +"Utrzymywanie obu dostępnych kontroli daje agentowi konkretny brak zbadania " +"przed dalszym przenoszeniem refaktora." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Imię potrzebuje własnego dowodu. Dokładne porównanie nie może nam " +"powiedzieć, czy pole naprawdę oznacza \"czas niewrażliwości\".\"Musimy to " +"ustalić na podstawie tego, jak gra ją pisze i używa. Jeśli znaczenie " +"pozostaje niepewne, neutralna nazwa jest bardziej pomocna dla następnego " +"czytelnika niż pewne przypuszczenie." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Nauczyliśmy się tego zamówienia poprzez projekty. TH08 miał już grywalne " +"porty przed niektórymi późniejszymi audytami platform historycznych. To " +"sprawiło, że niektóre wady były trudniejsze do zauważenia. The {ph0}Obecny " +"przepływ pracy fabryki{ph1} stawia na pierwszym miejscu kompilację " +"oryginalnej platformy, aby praca semantyczna mogła używać jej jako " +"odniesienia przed rozpoczęciem przenoszenia." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}Dokładna rekonstrukcja daje nam odniesienie. Rekonstrukcja semantyczna " +"sprawia, że odzyskana wiedza jest użyteczna.{ph1} Port może następnie " +"budować na obu." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Co sprawia, że jest to zmiana przemysłowa" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Te projekty zmieniły się tam, gdzie spędziłem moją uwagę. Kiedy agenci mogli" +" przeprowadzić wiele śledztwa, poprawa ich środowiska pracy stała się jedną " +"z najbardziej przydatnych rzeczy, jakie mogłem zrobić. Lepsze narzędzie może" +" pomóc w każdej późniejszej funkcji, która tego potrzebowała." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"Autonomia ma tu znaczenie. Przydatny następny krok często staje się jasny " +"dopiero po nieudanym eksperymencie. Agent potrzebuje wystarczającej swobody," +" aby śledzić ten wynik w nieoczekiwanym miejscu. Jeśli musi czekać, aż " +"przepiszę każdy krok, znaczna część pracy pozostaje związana z moją uwagą." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Oczekuję, że agent postawi błędne hipotezy. Liczy się to, czy możemy je " +"przetestować i wyciągnąć wnioski z wyniku. Nieudana kontrola powinna pomóc " +"zrozumieć błąd na tyle dobrze, aby spróbować ponownie. Nadal muszę " +"zdecydować, czy zgromadzone dowody potwierdzają kamień milowy projektu." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA daje agentowi dostęp do narzędzi analitycznych. Pytanie dotyczące " +"dzwoniącego funkcji może prowadzić bezpośrednio do sprawdzenia tego " +"dzwoniącego. Projekt rekonstrukcji dostarcza kompilator i własne kontrole " +"referencyjne. Agent może ich użyć do przetestowania proponowanego źródła i " +"sprawdzenia, gdzie znajduje się jego wyjaśnienie." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"Błąd TH08 pokazuje, dlaczego te kontrole zasługują na własną uwagę " +"inżynierską. Gdy to samo porównanie jest używane w setkach funkcji, luka w " +"nim może rozprzestrzenić się znacznie dalej niż błąd w jednej implementacji." +" Testowanie sprawdzania poprawia informacje zwrotne dostępne dla wszystkich " +"późniejszych prac." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"Analogia przemysłowa ma tutaj przydatny przykład historyczny. Boulton i Watt" +" przedstawili {ph0}wskaźnik parowozu w 1796 roku{ph1} aby pomóc w regulacji " +"zaworów silnika. Wersja rejestrująca prześledziła ciśnienie przez skok " +"tłoka. Dzięki temu wewnętrzne zachowanie silnika było dostępne do kontroli. " +"Nasze narzędzia porównawcze służą podobnemu celowi: pozwalają nam zbadać, co" +" robi maszyna, podczas gdy my ją ulepszamy." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Jesteśmy na wczesnym etapie tej zmiany przemysłowej.{ph1} Znaczna część" +" infrastruktury jest nadal niedojrzała. Agenci mogą poruszać się szybciej " +"niż nasze czeki zostały zaprojektowane do obsługi, więc proces musi się " +"rozwijać wraz z nimi. Kiedy znajdziemy usterkę we wspólnym narzędziu, musimy" +" ją naprawić i Ponownie sprawdzić wyniki, na które wpłynęło. Następny " +"projekt może następnie odziedziczyć silniejsze narzędzie." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Istnieje również praktyczny limit każdej jednej rozmowy. Zakończy się przed " +"zakończeniem dużej rekonstrukcji. Repozytorium kodu źródłowego musi " +"umożliwić kontynuowanie kolejnej sesji bez utraty przyczyny ostatniej " +"decyzji." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"The {ph0}Fabryka Odbudowy Touhou{ph1} wyrosła z tej potrzeby. Daje projektom" +" wspólny sposób na kontynuowanie kontroli i lekcji. Praca nad jedną grą może" +" poprawić warunki początkowe dla innej." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"To właśnie sprawia, że analogia przemysłowa ma dla mnie znaczenie. " +"Doświadczenie staje się częścią narzędzi, z których mogą korzystać inni. " +"Ulepszenie tych narzędzi zmienia, ile może zrobić następna osoba—lub " +"następny agent." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Projekty, które możemy teraz rozważyć" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Tempo ma znaczenie, ponieważ zmienia decyzję o rozpoczęciu. Gra może być " +"fascynująca w inżynierii wstecznej i nadal wymagać więcej mojej uwagi, niż " +"realistycznie mógłbym jej poświęcić. Wiele projektów pozostanie pomysłami." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Teraz widzę sposób na utrzymanie takiego projektu poprzez powtarzające się " +"dochodzenia. Uzyskanie działającej rekonstrukcji sprawia, że port " +"oprogramowania jest bardziej praktyczny. Odzyskiwanie czytelnej semantyki " +"ułatwia komuś innemu eksplorację Moda. Wysiłek włożony w zrozumienie gry " +"może się opłacić po uruchomieniu pierwszej wersji." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Patrzę teraz na Nieznany program i pytam: {ph0}jaki dostęp, informacje " +"zwrotne i zgromadzona wiedza pozwoliłyby agentowi pracować nad tym " +"niezawodnie?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"To pytanie skłania mnie do rozważenia projektów, które wcześniej zostawiłbym" +" sam. Każdy z nich może poprawić sposób, w jaki podchodzimy do następnego. " +"Chcę dalej badać, jak daleko to może nas zaprowadzić." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Kamienie milowe i źródła projektu" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Daty opisują zarejestrowane punkty kontrolne projektu, sprawdzone z " +"publiczną historią GitHub w dniu 10 października 2026 r. Czas, który " +"upłynął, to czas kalendarzowy między zatwierdzeniami. Obecność źródła, " +"dokładne porównania, kompilacja i Środowisko wykonawcze powodują, że każda " +"nazwa jest innym kamieniem milowym." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08 :{ph1} {ph2}13 sierpnia kontynuacja{ph3}, {ph4}19 sierpnia źródło" +" ledger{ph5}, {ph6}24 sierpnia Linux port{ph7}, {ph8}26 sierpnia Web " +"edition{ph9}, oraz {ph10}30 sierpnia 64-bitowe wydanie Linux{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} {ph2}29 sierpnia Księga początkowa{ph3}, {ph4}7 września " +"Księga źródłowa{ph5}, {ph6}8 września{ph7}, {ph8}9 września{ph9}, oraz " +"{ph10}10 września-rekord budowy{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}10 października handoff{ph3} rejestruje roboczą " +"rekonstrukcję DOS, pełne testowanie normalnej trasy opiekuna i bieżącą fazę " +"64-bitową." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} Korekta odniesienia weryfikacji TH08 (oracle) :{ph1} {ph2}zgłoszony " +"błąd auto-collection{ph3}, {ph4}poprawka źródła i porównania{ph5}, oraz " +"{ph6}pełny stały audyt zmiennoprzecinkowy{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Rekonstrukcja semantyczna:{ph1} {ph2} TH08 czytelność playbook{ph3} " +"oraz {ph4}zamówienie fazy fabrycznej i dwie ścieżki walidacji{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Historia przemysłu:{ph1} {ph2}rekord wskaźnika silnika parowego grupy " +"Muzeum Nauki{ph3} opisuje wprowadzenie z 1796 roku i mechanizm rejestracji " +"ciśnienia." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Metoda:{ph1} Fabryka {ph2}Autonomia agenta{ph3} oraz {ph4}wiedza między" +" grami{ph5} dokumenty zachowują zasady pracy i lekcje." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}Więcej artykułów{ph1} · {ph2}Poznaj badanie TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Rewolucja przemysłowa inżynierii odwrotnej-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 odzwierciedla ręczną inżynierię odwrotną, rekonstrukcję Touhou za " +"pomocą agentów AI oraz sposób, w jaki wiedza łączy się z TH08 , TH095 i " +"PC-98 TH04 ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Doświadczenie prowadzone między projektami" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Esej rekonstrukcyjny Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Spis treści{ph1}{ph2}/{ph3}Dinosaur speed lab" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Sprawdź → Odbuduj → Zmień" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Odbuduj zasadę prędkości dinozaura." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Aby odtworzyć przyspieszenie gry, najpierw znajdź regułę kontrolującą jej " +"prędkość. {ph0} REA zwrócił uruchomiony skrypt;{ph1} użyliśmy jego reguły, " +"aby zbudować tę mini-grę z {ph2}regulowana prędkość.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Graj i zmieniaj prędkość{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Przeczytaj odzyskaną regułę{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Sprawdź rekonstrukcję{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Wypróbuj analizę{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Graj i zmieniaj prędkość" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Naciśnij przycisk Play, a następnie przeskoczyć kaktusa. Przesuń suwak " +"prędkości, aby wypróbować wolniejszą lub szybszą grę; przełącza się na stałą" +" prędkość. Wybierz odzyskaną regułę, aby rozpocząć od 6 i stopniowo ponownie" +" przyspieszać." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Zagraj w odtworzoną wersję" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Graj" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Skok ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Zacznij od nowa" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Prędkość" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Użyj reguły odzyskiwania przyspieszenia" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Pierwotna zasada: zacznij od 6, a następnie zwiększ do 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Przesuń suwak, aby ustawić własną prędkość. Przestrzeń lub skok usuwa " +"kaktusa." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Włącz JavaScript, aby odtworzyć rekonstrukcję. Powyższy kod i Wyjaśnienie " +"pozostają czytelne." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Przeczytaj skrypt REA zwrócony" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Sprawdziliśmy {ph0}wayou ' s Chromium-wersja przeglądarki pochodnej{ph1} z " +"REA . Zwrócił załadowany {ph2}, włączenie tej gałęzi do funkcji aktualizacji" +" gry:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Ustawienia to {ph0}, {ph1} oraz {ph2}. Gra uruchamia tę gałąź na " +"aktualizacji bez kolizji." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Użyj tej samej zasady w nowej grze" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Mini-gra wykorzystuje tę funkcję do automatycznego przyspieszania. " +"Przesuwanie suwaka zapewnia zamiast tego stałą prędkość. Rysowanie, fizyka " +"skoku i sprawdzanie kolizji prostokątów to nowy kod dla tej gry " +"dydaktycznej; jego symulacja rozwija się z prędkością 60 aktualizacji na " +"sekundę." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}Pobierz regułę prędkości{ph1} · {ph2}Przeczytaj kod gry{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Sprawdź rekonstrukcję" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Nazwaliśmy funkcję aktualizacji oryginalnej gry z przeszkodami i wyłączonym " +"automatycznym planowaniem. Porównaj te zarejestrowane prędkości z powtórką " +"odzyskanej reguły." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Aktualizacje" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Oryginalna gra" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Zrekonstruowana reguła" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Uruchom kontrolę prędkości" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Wartości zaokrąglone do trzech miejsc po przecinku. Oddział sprawdza przed " +"dodaniem, więc ostateczny przyrost może przybrać prędkość nieco powyżej 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Wypróbuj analizę samodzielnie" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Skonfiguruj REA {ph1} z twoim agentem kodującym." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Śledź {ph0}kroki połączenia przeglądarki{ph1}, za pomocą {ph2} jako adres " +"URL strony." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Podaj agentowi adres URL strony i lokalny punkt końcowy debugowania, a " +"następnie skopiuj ten monit." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby sprawdzić tę grę dinozaurów. Dlaczego robi się" +" szybciej? Pokaż regułę prędkości, a następnie zbuduj małą wersję z " +"regulowaną prędkością.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Zapytaj o kontynuację: {ph0}\"Gdzie obliczana jest wysokość skoku? Dodaj " +"kontrolę wysokości skoku do nowej wersji.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Źródło: {ph0}sprawdzony kod prędkości{ph1}, Chromium {ph2}Prawa autorskie i " +"licencja BSD{ph3}. REA 4.1.0 sprawdził uruchomioną wersję HTTP w Chrome " +"150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Gra dinozaurów Chrome: Odbuduj regułę prędkości-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Przeczytaj zasadę prędkości gry dinozaurów za pomocą REA, Odbuduj ją, a " +"następnie zmień prędkość i graj." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Rekonstrukcja prędkości dinozaurów" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Dinozaur mini-gry. Użyj przycisku skoku lub naciśnij spację, gdy gra jest " +"skupiona." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Skopiuj zrekonstruowaną regułę prędkości" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Skopiuj monit o analizę dinozaurów" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Spis treści{ph1} / FAQ" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA FAQ." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Konfiguracja, aktualizacje, analiza i rozwiązywanie problemów." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Tematy" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Konfiguracja i aktualizacje{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Analiza{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Rozwiązywanie problemów{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Dane i udostępnianie{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Konfiguracja i aktualizacje" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Jak zainstalować REA ?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Terminal * konfiguracja agenta" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Kopiuj" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"Konfiguracja rejestruje połączenie MCP z REA i instaluje odpowiedni skill " +"analizy. Po zakończeniu uruchom agenta ponownie i podaj mu ścieżkę do pliku " +"oraz pytanie. Wymagania i pierwszą analizę opisuje {ph0}instrukcja " +"konfiguracji{ph1}." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Które środki kodujące mogą używać REA ?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Każdy agent obsługujący lokalne serwery MCP. Konfiguracja obejmuje Claude " +"Code , Claude pulpit, Codex , Cursor , Gemini CLI , Windsurf , Devin , " +"OpenCode , Antigravity , GitHub Copilot CLI , Command Code , Grok Build , " +"OMP i VS Code . Złącze Grok Bot jest dodawane z czatu." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Podłącz swojego agenta kodującego{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Jak zaktualizować REA ?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA wydaje często, w tym poprawki błędów. Jeśli zainstalowałeś CLI z npm :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Terminal * zainstalowany CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Postępuj zgodnie z poleceniem odświeżania konfiguracji wydrukowanym przez " +"aktualizację. Jeśli ustawisz swojego agenta przez {ph0}, biegnij:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Terminal * konfiguracja agenta odświeżania" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Sprawdź zmiany i uruchom agenta ponownie. Połączenie z REA używa konkretnej " +"wersji pakietu. Powtórz konfigurację, aby agent korzystał z nowej wersji. " +"Przy jednorazowym wywołaniu CLI dodaj polecenie po {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Instaluje umiejętność z skills.sh wystarczy?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"Umiejętność daje instrukcje dochodzenia agenta. Biegnij {ph0} Konfiguracja " +"REA{ph1} aby połączyć serwer MCP i zainstalować umiejętność dopasowywania, " +"uruchom ponownie agenta, aby mógł wywołać narzędzia." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Analiza" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "Co mogę analizować za pomocą REA ?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Zacznij od rodzaju posiadanego oprogramowania:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Natywne pliki wykonywalne i biblioteki{ph1}: funkcje, montaż, pseudokod" +" i odniesienia." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Aplikacje JavaScript i Electron{ph1}: Moduły, import, IPC i " +"lokalizacje źródłowe." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Strony przeglądarki{ph1}: Skrypty, żądania i obserwacje w czasie " +"wykonywania." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA ma również przepływy pracy dla zarządzanych zespołów, plików APK systemu" +" Android, oprogramowania układowego i pakietów zasobów. {ph0}Zobacz studia " +"przypadków{ph1} do prowadzonych dochodzeń." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Czy potrzebuję Hopper, Ghidra lub IDA ?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"Głęboka analiza programów kodu maszynowego wykorzystuje jeden z nich. " +"Statyczne JavaScript i. NET praca Inspekcyjna z dostarczonych plików i nie " +"wymagają analizy silnika programów kodu maszynowego." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Podłącz istniejącą instalację Ghidra lub IDA lub pozwól instalatorowi wykryć" +" Hopper i zaproponować instalację. Twój host i cel określają, który dostawca" +" może być używany. {ph0}Skonfiguruj analizę programów kodu maszynowego{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Czy Mogę używać REA bez agenta kodującego?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Tak. CLI wykorzystuje te same przepływy pracy analizy. Dla lokalnej " +"aplikacji JavaScript lub Electron:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Terminal * statyczna analiza aplikacji" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Zastąp ścieżkę wyodrębnionym folderem aplikacji lub plikiem ASAR. {ph0}Użyj " +"CLI {ph1} dla opcji instalacji." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "Jaki kod zwraca REA?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"Analiza programów natywnych zwraca asembler i pseudokod wraz z wywołaniami " +"funkcji, odwołaniami i istotnymi stałymi. Analiza JavaScript zwraca moduły, " +"powiązania między nimi i lokalizacje w kodzie źródłowym." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Twój agent wykorzystuje te ustalenia, aby wyjaśnić zachowanie lub napisać i " +"przetestować implementację. The {ph0} Obliczanie DX-Ball{ph1} oraz {ph2}CTF " +"flag checker{ph3} pokaż, jak działa ten proces." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "O co zapytać agenta?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Daj mu lokalny cel i jedno zachowanie do zbadania. Dla aplikacji JavaScript " +"lub Electron:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Zastąp ścieżkę swoim celem. The {ph0}Przewodniki{ph1} podaj monity o " +"przykłady natywne, Electron i przeglądarki." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Rozwiązywanie problemów" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Dlaczego mój agent nie widzi narzędzi REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Uruchom ponownie lub podłącz ponownie agenta po konfiguracji. Sprawdź swoją " +"rejestrację REA z {ph0}; dla Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Terminal * sprawdź jednego klienta" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Wymienić {ph0} z identyfikatorem klienta, takim jak {ph1} lub {ph2}. Jeśli " +"raport pokazuje brakującą lub nieaktualną rejestrację, Uruchom setup dla " +"tego klienta:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Terminal * naprawa konfiguracji jednego klienta" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Przejrzyj jego plan i uruchom ponownie klienta. Jeśli rejestracja jest " +"zdrowa, ale narzędzia pozostają nieobecne, sprawdź błąd połączenia MCP " +"klienta. {ph0}Więcej diagnostyki konfiguracji{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Czy muszę najpierw uruchomić Hopper?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA uruchamia Hopper, gdy operacja tego potrzebuje. W macOS dokonaj " +"pierwszego wyboru trybu demonstracyjnego lub aktywacji licencji przed " +"analizą nienadzorowaną. {ph0}Zobacz native provider setup{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Co zrobić, gdy znajdę błąd?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Aktualizacja REA {ph1}, uruchom ponownie agenta i spróbuj ponownie to " +"samo zadanie. Ostatnie wydanie może już rozwiązać problem." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Jeśli się utrzymuje, {ph0}otwórz problem{ph1} z wersją REA, systemem " +"operacyjnym, typem docelowym, krokami odtwarzania i wyjściem błędu. " +"Uwzględnij nazwę dostawcy, gdy problem obejmuje analizę programów kodu " +"maszynowego." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Dane i udostępnianie" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "Czy REA przesyła moją aplikację?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA analizuje cele na twoim komputerze. Twój agent otrzymuje wyniki, a " +"zasady dotyczące danych dostawcy modelu mają zastosowanie do tych wyników." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Jak mogę podzielić się przykładem lub wnieść swój wkład?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Masz przydatny przykład REA? Chcielibyśmy to zobaczyć. Udostępnij cel, swoje" +" pytanie, ustalenia i sposób, w jaki je sprawdziłeś {ph0}problem{ph1} lub " +"{ph2}pull request{ph3}. Krótkie fragmenty kodu i liczby pomagają innym " +"śledzić śledztwo." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Raporty o błędach, prośby o funkcje, dokumentacja i ulepszenia kodu są " +"również mile widziane. Możesz również omówić przykład w " +"{ph0}społeczność{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA FAQ: Konfiguracja, aktualizacje i rozwiązywanie problemów" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Odpowiedzi na typowe pytania REA: instalacja, aktualizacje, narzędzia " +"analityczne, środki kodujące, rozwiązywanie problemów i udostępnianie " +"przykładów." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Często zadawane pytania dotyczące REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Skopiuj polecenie konfiguracji REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Skopiuj polecenie aktualizacji REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Skopiuj polecenie odświeżania konfiguracji agenta" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Skopiuj polecenie analizy REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Skopiuj przykładowy monit o analizę" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Skopiuj polecenie diagnozy klienta" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Skopiuj polecenie konfiguracji z zakresem" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Spis treści{ph1} / Twoje pierwsze śledztwo" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Dowiedz się, gdzie{ph0}eksportowane notatki go." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Użyj REA, aby sprawdzić małą aplikację, postępuj zgodnie z jej przyciskiem " +"Eksportuj notatki i sam sprawdź jeden szczegół." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "W tym ćwiczeniu" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Skonfiguruj{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Zapytaj o eksport{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Postępuj zgodnie z odpowiedzią{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Sprawdź prognozę{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Zadaj kolejne pytanie{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Połącz swojego agenta z REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Lub uruchom to polecenie w swoim terminalu:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Przejrzyj plan, Zatwierdź konfigurację, a następnie uruchom ponownie agenta." +" Już podłączony? Kontynuuj poniżej." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Zapytaj, gdzie jest napisane CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"Przykładem jest sześcioplikowa aplikacja Electron z {ph0}Eksportuj " +"notatki{ph1} przycisk. Twój agent może sprawdzić swój kod bez instalowania " +"lub uruchamiania Electron ." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Twój agent pobiera pliki i przekazuje rozpakowany folder do REA do wglądu." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Pobierz przykład ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Jeśli twój agent nie może pobrać plików, rozpakuj to archiwum samodzielnie. " +"Daj mu drogę do {ph0} folder i to samo pytanie o eksport." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Postępuj zgodnie z odpowiedzią z powrotem do kodu" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Poszukaj krótkiego wyjaśnienia z odniesieniami do plików i linii:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Przycisk wysyła {ph0} wiadomość. Główny proces formatuje notatki jako CSV i " +"zapisuje {ph1} w folderze Pobrane użytkownika. Kolumny są {ph2} oraz {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Od przycisku Do pisarza plików" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"Analiza statyczna REA łączy wiadomość z jej obsługą. Miejsce docelowe jest " +"odczytywane z kodu." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Ścieżka pliku, formatowanie i wywołanie zapisu są razem w tym programie " +"obsługi. Poproś swojego agenta, aby pokazał te linie, jeśli jego odpowiedź " +"je pomija." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}Zobacz pełny ślad kodu i zapisany wynik REA{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Sprawdź prognozę" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Przecinek oddziela kolumny CSV. Co się stanie, gdy sam tytuł notatki zawiera" +" przecinek lub cudzysłów?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Sprawdź sam" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Otwórz terminal w rozpakowanym {ph0} folder:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"To polecenie używa powłoki z obsługą dokumentów here, takiej jak Bash lub " +"zsh. Twój agent może uruchomić ten sam JavaScript w powłoce Twojej " +"platformy." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Zadaj kolejne pytanie" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Spróbuj kontynuować tę samą rozmowę:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"Co się stanie, jeśli pliku nie można zapisać? Postępuj zgodnie z błędem z " +"powrotem do strony." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Lub daj swojemu agentowi własną aplikację i zapytaj o jeden przycisk, Plik " +"lub zachowanie." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Jak Notion kopiuje tekst i HTML{ph1}{ph2}Postępuj zgodnie z funkcją " +"schowka w spakowanej aplikacji Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Jak DX-Ball oblicza pozycjonowanie dźwięku stereo{ph1}{ph2}Przeczytaj " +"oryginalne instrukcje i kontrole rekonstrukcji.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Rozwiązywanie problemów z konfiguracją lub analizą{ph1}{ph2}Zaktualizuj" +" REA i sprawdź połączenie, jeśli utkniesz.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Twoje pierwsze badanie inżynierii odwrotnej-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Wypróbuj REA w małej aplikacji do notatek. Skonfiguruj swojego agenta, " +"zapytaj, gdzie są eksportowane notatki, i sprawdź formatowanie CSV z " +"przykładowym tytułem." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "Twoje pierwsze badanie REA" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Skopiuj monit instalacji REA" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Skopiuj polecenie konfiguracji" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Skopiuj uwagi dochodzenie prompt" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Skopiuj CSV sprawdź monit" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Skopiuj polecenie sprawdzania formatowania" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Spis treści{ph1} / Zacznij" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Skonfiguruj REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Połącz REA z agentem kodującym lub sprawdź lokalną aplikację z terminala." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Otwórz terminal i sprawdź:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Terminal" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows PowerShell" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Wpisz Y, jeśli zostaniesz poproszony o zaakceptowanie warunków. Zamknij " +"PowerShell, otwórz go ponownie, a następnie uruchom {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Jeśli PowerShell powie później {ph0}\"uruchamianie skryptów jest wyłączone w" +" tym systemie\"{ph1} kiedy biegniesz {ph2}, uruchom to raz i spróbuj " +"ponownie:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Jeśli używasz Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS * Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "W przeciwnym razie:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Zamknij Terminal, otwórz go ponownie, a następnie:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"Instalator potrzebuje {ph0} oraz {ph1} (na Debianie / Ubuntu: {ph2}). " +"Zamknij terminal, otwórz go ponownie, a następnie:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Twoja dystrybucja własna {ph0} Pakiet jest często starszy niż 22.19, więc " +"sprawdź {ph1} jeśli zamiast tego go użyjesz." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Wolisz zwykłego instalatora? Pobierz wersję LTS z {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Opcje konfiguracji" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Podłącz swojego agenta kodującego{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Użyj CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Skonfiguruj analizę programów kodu maszynowego{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Uzyskiwanie pomocy{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Podłącz swojego agenta kodującego" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Uruchom setup, aby połączyć REA z agentem kodującym. Wybory klientów " +"obejmują Claude Code , Codex , Cursor , Gemini CLI , Windsurf , Grok Build i" +" innych obsługiwanych klientów MCP. Złącze Grok Bot jest dodawane z czatu." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Nowy w agentach kodujących?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Agent kodujący to asystent AI, który działa na twoim komputerze zamiast na " +"karcie przeglądarki. Może odczytywać pliki i uruchamiać polecenia, a przed " +"wprowadzeniem zmian pyta. REA daje narzędzia inżynierii odwrotnej." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Jeśli jeszcze go nie masz, wybierz jeden, śledź jego stronę instalacji i " +"zaloguj się:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code {ph2}{ph3} przez Anthropic . Potrzebuje płatnego " +"planu Claude." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex {ph2}{ph3} przez OpenAI . Zaloguj się na swoje konto " +"ChatGPT." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode {ph2}{ph3}, open source. Połącz wybranego dostawcę " +"modelu." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Następnie otwórz go i skopiuj do niego poniższy monit. Agent uruchamia " +"konfigurację REA i pokazuje plan przed zmianą czegokolwiek." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Lub uruchom samodzielnie konfigurację" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Jak otworzyć terminal?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} otwórz menu Start, wpisz {ph2}PowerShell{ph3} i " +"naciśnij Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} prasa {ph2} {ph3}, Typ {ph4}Terminal{ph5} i naciśnij " +"Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0} Linux :{ph1} prasa {ph2} {ph3} {ph4} na większości komputerów " +"stacjonarnych." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Wklej polecenie za pomocą {ph0} {ph1} (macOS : {ph2} {ph3}; Terminale Linux:" +" {ph4} {ph5} {ph6}), a następnie naciśnij Enter." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Wybierz swojego klienta i przejrzyj plan konfiguracji. REA dodaje swoje " +"połączenie MCP i umiejętność badania dopasowania, zachowując kopię zapasową " +"istniejącej konfiguracji. Pyta przed zastosowaniem zmian." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Uruchom ponownie Klienta po zakończeniu konfiguracji." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Jak zrestartować klienta?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Aplikacje komputerowe{ph1} (Claude Desktop, Cursor, Windsurf, VS Code):" +" całkowicie zamknij aplikację, a następnie otwórz ją ponownie. Zamknięcie " +"okna nie wystarczy. Na prasie macOS {ph2} {ph3}; na Windows Zamknij również " +"ikonę w zasobniku, jeśli taka istnieje." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Agenci terminalowi{ph1} (Claude Code , Codex , Gemini CLI ): Zamknij " +"sesję i uruchom ją ponownie." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Daj swojemu agentowi ścieżkę docelową i konkretne pytanie. W przypadku " +"aplikacji JavaScript lub Electron możesz zacząć od:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"# Patrz {ph0} i dowiedz się, jak eksportuje dane. Pokaż punkty wejścia, " +"połączenia i zależności, z lokalizacjami źródłowymi dla swoich ustaleń." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Zastąp ścieżkę lokalnym celem." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Jak uzyskać pełną ścieżkę folderu?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} w Eksploratorze plików kliknij folder prawym " +"przyciskiem myszy i wybierz {ph2}Kopiuj jako ścieżkę{ph3}. Na Windows 10 " +"przytrzymaj klawisz Shift, klikając prawym przyciskiem myszy." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} w Finderze kliknij prawym przyciskiem myszy folder, " +"przytrzymaj opcję i wybierz {ph2}Skopiuj \" ... \" jako ścieżkę{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Dowolny system:{ph1} przeciągnij folder do okna terminala, a pojawi się" +" jego ścieżka." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "W terminalu umieść cudzysłowy wokół ścieżki zawierającej spacje." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Użyj CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Analizuj folder aplikacji JavaScript lub Electron lub archiwum ASAR bez " +"uruchamiania aplikacji:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Statyczna analiza aplikacji" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Zastąp ścieżkę wyodrębnionym katalogiem aplikacji lub {ph0} akta. Na Windows" +" ścieżka taka jak {ph1} działa tutaj." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Gdzie znajdę aplikację .plik asar?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Aplikacje Electron zwykle przechowują go w {ph0} folder:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (kliknij aplikację prawym przyciskiem myszy i " +"wybierz {ph3}Pokaż Zawartość Opakowania{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} często {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Niektóre aplikacje instalują się gdzie indziej. Wyszukaj w folderze " +"aplikacji {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Wynik identyfikuje aplikację, pokazuje połączenia między modułami i podaje " +"ich lokalizacje źródłowe. Połączenia REA nie można rozwiązać są oznaczone w " +"wyniku." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Jeśli chcesz mieć stałe {ph0} polecenie w Twojej powłoce:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Zainstaluj CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "" +"{ph0}Kontynuuj korzystanie z Przewodnika po aplikacjach JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Skonfiguruj analizę programów kodu maszynowego" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Programy kodu maszynowego potrzebują lokalnego narzędzia do analizy. Wybierz" +" i skonfiguruj jeden poniżej, a następnie podaj REA swój plik wykonywalny " +"lub bibliotekę." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Wybierz narzędzie: Ghidra, Hopper lub IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Użyj istniejącego Ghidra 12.1.instalacja x i 64-bitowy JDK 21 lub nowszy na " +"Linux lub macOS, na x64 lub arm64. Instalacja Ghidra wymaga natywnego " +"dekompilatora dla architektury hosta. Ustaw ścieżki przed uruchomieniem " +"konfiguracji:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Podłącz instalację Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Połączenie Ghidra * macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Zastąp obie ścieżki istniejącymi instalacjami. Setup sprawdza je i " +"rejestruje prawidłowe ustawienia dla wybranego klienta. Na Linux arm64 może " +"być konieczne oddzielne zbudowanie natywnego dekompilatora Ghidra." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Połącz Ghidra na Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 ma eksperymentalną obsługę tylko do odczytu dla natywnych " +"aplikacji x86 i x64 PE oraz bibliotek DLL na stałych lokalnych dyskach NTFS." +" Użyj istniejącego Ghidra 12.1.instalacja x i 64-bitowy JDK 21 lub nowszy:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Połączenie Ghidra * Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Zastąp dwie ścieżki instalacjami, a następnie przejrzyj plan konfiguracji." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Podłącz Hopper na macOS lub Linux . Uruchom powyższe polecenie konfiguracji;" +" wykrywa istniejącą instalację lub oferuje plan instalacji do zatwierdzenia." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"W macOS dokonaj pierwszego uruchomienia Hopper wyboru trybu demonstracyjnego" +" lub aktywacji licencji przed analizą nienadzorowaną." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"Zweryfikowane konfiguracje IDA używają Windows, z istniejącą rejestracją MCP" +" dla dołączonego GUI lub bezgłowej bazy danych. Analiza bezgłowa Linux i " +"macOS pozostaje niezweryfikowana." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Podłącz istniejącą rejestrację IDA MCP" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Utrzymuj działanie serwera upstream {ph0}, {ph1} i opcjonalnie {ph2} w pliku" +" JSON. Istniejący {ph3} obiekt z {ph4} wejście jest również akceptowane. " +"Wskaż REA na ten plik przed instalacją:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "Połączenie IDA * Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"Załączony profil wykorzystuje starsze narzędzia 1.4.0 z oryginalnym plikiem " +"binarnym już otwartym w IDA . Profil headless korzysta z interfejsu API " +"upstream database-supervisor i rejestracji w {ph0}; prawdziwa weryfikacja " +"obejmuje nadzorcę IDA 9.3 Windows x64. Lekarz sprawdza rejestrację bez " +"uruchamiania IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Podaj REA oryginalną ścieżkę wykonywalną, z {ph0} w zapytaniu CLI. Dla " +"agenta, obejmują {ph1} w środowisku rejestracji REA i wybierz IDA podczas " +"otwierania pliku binarnego." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "" +"W przypadku istniejącej konfiguracji Ghidra sprawdź funkcję za pomocą:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Analiza funkcji" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "Wymienić {ph0} z nazwą funkcji lub adresem, który chcesz sprawdzić." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "Jak działa analiza sesji programów kodu maszynowego" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Każde polecenie CLI importuje i analizuje plik binarny, a następnie zamyka " +"jego sesję. Zapytania MCP twojego agenta ponownie wykorzystują zaimportowany" +" plik binarny, gdy ta sesja jest otwarta." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Wykonaj analizę przykładu programów kodu maszynowego{ph1} aby zobaczyć," +" jak wynik funkcji prowadzi do odzyskanego obliczenia." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Uzyskiwanie pomocy" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Jeśli twój agent nie widzi REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Uruchom ponownie lub podłącz ponownie Klienta po konfiguracji. Sprawdź " +"połączenie REA z {ph0}; dla Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Sprawdź jednego klienta" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Jeśli dostawca wymaga uwagi" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Sprawdź dostawcę, którego używasz. Dla Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Sprawdź jednego dostawcę" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "Raport zawiera nieudaną kontrolę i sugerowany następny krok." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} REA FAQ{ph1}{ph2}Szybkie odpowiedzi na aktualizacje, agentów i " +"analizy.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Wybierz przewodnik po dochodzeniu{ph1}{ph2}Pracował przykłady binarny, " +"aplikacja Electron i przeglądarki.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Problemy z GitHub{ph1}{ph2}Zgłoś problem z poleceniem i " +"diagnostyką.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} Społeczność REA{ph1}{ph2}Pytania, dochodzenia i prace w toku.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Zainstaluj REA i skonfiguruj agenta kodowania" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Podłącz REA do agenta kodującego lub sprawdź lokalną aplikację JavaScript " +"lub Electron z terminala. Konfiguracja, pierwsze pytania i Przewodniki " +"natywnego dostawcy." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Kopia Node.js wersja sprawdź" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Skopiuj polecenie instalacji Node.js dla Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Skopiuj polecenie zasady wykonywania programu PowerShell" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Skopiuj polecenie instalacji Homebrew Node.js" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Skopiuj polecenie instalacji fnm dla macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Skopiuj Node.js 24 polecenia dla macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Skopiuj polecenie instalacji fnm dla Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Skopiuj Node.js 24 polecenia dla Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA przewodnik dla początkujących" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Skopiuj monit instalacji REA" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Skopiuj polecenie konfiguracji agenta" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Skopiuj polecenie analizy JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Skopiuj polecenie instalacji CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Skopiuj połączenie ghidra * macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Skopiuj połączenie Ghidra dla Windows PowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Skopiuj połączenie IDA dla Windows PowerShell" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Skopiuj natywne polecenie analizy funkcji" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Skopiuj polecenie diagnozy klienta" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Kopiuj polecenie diagnozy dostawcy" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "" +"{ph0}Spis treści{ph1} / {ph2}Przewodniki{ph3} / Obserwacja przeglądarki" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Zobacz, co się stanie{ph0}po kliknięciu." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Użyj małej aplikacji przeglądarki, aby połączyć akcję, jej żądanie sieciowe " +"i JavaScript, który tworzy plik do pobrania." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "W tym przewodniku" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Przykład{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Otwórz przeglądarkę{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Zapytaj swojego agenta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Przechwytywanie z CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Przeczytaj żądanie i skrypt{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Co się stanie po kliknięciu przycisku Eksportuj?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"The {ph0}Przykład przeglądarki notatek{ph1} ma {ph2}Eksportuj notatki{ph3} " +"przycisk. Kliknięcie go ładuje {ph4}, formatuje dwie notatki jako CSV i " +"rozpoczyna pobieranie." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Od kliknięcia do pobrania CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * Ty{ph1}{ph2}Kliknij Eksportuj notatki{ph3}{ph4}Wykonaj akcję w " +"przeglądarce, gdy przechwytywanie jest uruchomione.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA {ph1}{ph2}Zapisz żądanie{ph3}{ph4}Przechwyć adres URL żądania," +" status odpowiedzi i strukturę JSON z wybranej strony.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * Twój agent{ph1}{ph2}Przeczytaj kod eksportu{ph3}{ph4}Połącz " +"obserwowane żądanie z {ph5} w {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Rozpocznij przechwytywanie przed kliknięciem Eksportuj notatki." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Otwórz Chrome ze zdalnym debugowaniem" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Otwórz przykład hostowanych notatek za pomocą oddzielnego profilu " +"przeglądarki i lokalnego portu debugowania. Na Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Uruchom przykładową przeglądarkę" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Użyj ścieżki wykonywalnej zainstalowanej przeglądarki na macOS lub Windows ." +" Możesz zastąpić adres URL strony inną stroną, którą chcesz sprawdzić." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA łączy się z tą istniejącą przeglądarką. Zachowujesz kontrolę nad stroną," +" wykonujesz akcję i zamykasz przeglądarkę po zakończeniu." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Poproś swojego agenta, aby obejrzał jedną akcję" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby sprawdzić tę stronę, gdy klikam Eksportuj " +"notatki. Jakie jest żądanie i jak zbudowany jest CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Przykładowy monit. Daj swojemu agentowi punkt końcowy debugowania, {ph0}, " +"oraz adres URL strony. Pozwól mu rozpocząć przechwytywanie, zanim klikniesz." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Twój agent odkrywa cel strony, uruchamia okno obserwacji i odczytuje " +"wynikowe dowody. Następnie może sprawdzić skrypt za eksportem." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Lub przechwytywanie z terminala" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Znajdź identyfikator docelowy strony:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Znajdź stronę" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Wybierz cel z przykładowym adresem URL notatek. Wymienić {ph0} poniżej z " +"jego ID, a następnie uruchom:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Uchwyć następne dziesięć sekund" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Pozwól poleceniu połączyć się przez kilka sekund, a następnie kliknij " +"{ph0}Eksportuj notatki{ph1} w tej przeglądarce. Wynik pojawia się po " +"zakończeniu okna obserwacji." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Przechwycony wynik obejmuje wybraną stronę, aktywność sieciową w tym oknie " +"oraz kształt odpowiedzi JSON. Wcześniejsze żądania są poza tym " +"przechwytywaniem." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Przeczytaj skrypt żądania i eksportu" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Nagrany z REA 4.1.0 na przykładzie notatek lokalnych" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Uchwycony fakt" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Wartość" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Prośba" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Odpowiedź" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Inicjator żądania" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * skrypt" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Struktura odpowiedzi" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} z {ph1} oraz {ph2} pola" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Przeczytaj załadowane Skrypty" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"Żądanie identyfikuje źródło danych i rekordy REA {ph0} jako jego inicjator. " +"Przeczytaj przechwycone źródło skryptu, aby zobaczyć, jak dane są używane:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"Pobieranie jest konstruowane na stronie przy użyciu odpowiedzi JSON. Krok " +"formatowania CSV pochodzi ze skryptu; przechwytywanie sieci ustala, że to " +"kliknięcie jest wymagane {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Znajdź skrypt, który żąda {ph0}. Jak uniknąć tytułów zawierających przecinki" +" lub cudzysłowy?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"W przypadku zainstalowanej aplikacji JavaScript lub Electron Kontynuuj " +"{ph0}przepływ pracy aplikacji{ph1} aby śledzić pliki i granice procesów." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Analiza przeglądarek i sieci — REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Obserwuj eksport notatek za pomocą REA: wybierz stronę przeglądarki, " +"przechwyć kliknięcie, sprawdź żądanie i postępuj zgodnie ze skryptem " +"eksportu." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Obserwacja przeglądarki" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Skopiuj Uruchom przykładową przeglądarkę" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Skopiuj przykładowy monit" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Kopiuj znajdź stronę" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Kopiuj przechwyć następne dziesięć sekund" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Kopiuj przeczytaj załadowane Skrypty" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Spis treści{ph1} / Przewodniki" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "Przewodniki REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Analizuj natywną funkcję, eksport Electron lub żądanie przeglądarki. Każdy " +"przewodnik zawiera monit, kod i wyniki." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Pierwsze dochodzenie" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Skonfiguruj REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Podłącz agenta kodującego lub użyj REA z terminala." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Zacznij korzystać z REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Programy do kodu maszynowego" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Odzyskaj obliczenie lewej / prawej pozycji dźwięku" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Zacznij od pliku wykonywalnego gry Windows. Sprawdź instrukcje, postępuj " +"zgodnie z rozmówcą, przeczytaj stałe numeryczne i sprawdź odzyskane C." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Analiza programów kodu maszynowego przewodnik" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Śledź eksport CSV" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Mała aplikacja Notes rozprzestrzenia jedną funkcję w całym rendererze, " +"preload i głównym procesie. Użyj REA, aby połączyć API, kanał IPC i pisarz " +"plików." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript & Electron przewodnik" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Aby uzyskać większą spakowaną aplikację, postępuj zgodnie z {ph0} Notion ' s" +" clipboard bridge{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Zachowanie przeglądarki" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Obserwuj kliknięcie" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Otwórz przykład notatek roboczych, przechwyć żądanie eksportu i znajdź kod, " +"który zamienia jego odpowiedź w pobieranie." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Przewodnik obserwacji przeglądarki" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Reverse Engineering Guides-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Naucz się REA poprzez krótkie przykłady: natywne obliczenia, eksport " +"Electron CSV i żądanie przeglądarki." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}Spis treści{ph1} / {ph2}Przewodniki{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Śledzenie Electron {ph0} Eksport CSV." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Kliknij przycisk od strony API, przez Electron IPC, do CSV File writer." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "W tym przewodniku" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Przykład{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Zapytaj swojego agenta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Śledzenie kodu eksportu{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Wypróbuj przykład{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Sprawdź pisarz CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "Gdzie idzie \"Eksportuj notatki\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Ten przewodnik używa małej aplikacji Electron. Klikanie {ph0}Eksportuj " +"notatki{ph1} wywołuje API na stronie, przechodzi do głównego procesu i " +"zapisuje CSV . Zachowanie jest rozłożone na kilka plików." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "Eksport CSV w procesach Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} wywołuje API narażone " +"przez {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Między procesami{ph1}{ph2}{ph3}{ph4}{ph5}Wstępne ładowanie wywołuje " +"kanał IPC: nazwaną wiadomość do głównego procesu.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Główny proces{ph1}{ph2}Obsługi eksportu{ph3}{ph4}{ph5} obsługuje ten " +"kanał i wywołuje pisarz CSV.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} formatuje notatki → {ph1} pisze {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA dopasowuje dosłowne wywołanie IPC do jego obsługi i identyfikuje " +"odsłonięty interfejs API. Ścieżka jest wywnioskowana z kodu; przechwytywanie" +" środowiska wykonawczego może sprawdzić, co wykonuje." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Zapytaj o CSV export" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Połącz swojego agenta z REA {ph1} i daj mu katalog aplikacji lub plik " +"ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby dowiedzieć się, co się dzieje, gdy eksportuję " +"notatki w tej aplikacji. Gdzie jest tworzony CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "" +"Przykładowy monit. Dołącz bezwzględną ścieżkę do folderu aplikacji lub " +"{ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA odczytuje pliki aplikacji i tworzy mapę punktów wejścia, modułów i " +"granic procesów. Twój agent używa tej mapy, aby zawęzić dochodzenie do " +"funkcji eksportu." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Śledzenie kodu eksportu" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "Strona wywołuje mały interfejs API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"Strona zna nazwę metody. Implementacja żyje w obciążeniu wstępnym, co " +"ujawnia ją rendererowi." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA records {ph0} i dosłowny kanał {ph1}. Łączy to wywołanie z pojedynczą " +"obsługą dopasowania w głównym procesie." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"Czytanie obsługi odpowiada na pierwotne pytanie: {ph0} formatuje notatki, a " +"główny proces zapisuje {ph1} do folderu Pobrane użytkownika." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Nagrane przez REA 4.1.0 na poniższym przykładzie do pobrania. Lokalizacje " +"źródłowe towarzyszą ustaleniom API, kanału i obsługi." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Przeanalizuj sam przykład" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Pobierz przykład ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Przeglądaj sześć plików źródłowych" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Statyczna analiza aplikacji" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Zastąp ścieżkę rozpakowanym folderem. Powinieneś znaleźć jeden kanał IPC i " +"jeden pasujący program obsługi w {ph0}. Lokalizacje źródłowe znajdują się w " +"{ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"W przypadku własnej aplikacji Użyj tego samego polecenia z jej katalogiem " +"lub ścieżką ASAR. Agent może śledzić dosłowny ciąg znaków, nazwę API lub " +"kanał IPC za pomocą narzędzi do śledzenia funkcji REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Sprawdź pisarz CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Follow {ph0} do jego obsługi. Które Dane wejściowe docierają do pisarza CSV " +"i co się stanie, jeśli zapisanie pliku nie powiedzie się?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Użyj lokalizacji źródłowych, aby sprawdzić te szczegóły. Obliczone nazwy " +"kanałów i niejednoznaczne procedury obsługi mogą pozostać nierozwiązane; " +"obserwacje w czasie wykonywania dają inny sposób ich zbadania." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Śledź Notion ' s clipboard bridge{ph1} {ph2}Zastosuj to samo podejście " +"do spakowanej aplikacji Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Obserwuj eksport przeglądarki{ph1}{ph2}Uchwyć prawdziwe kliknięcie i " +"zobacz, które żądanie wysyła.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Postępuj zgodnie z natywną funkcją{ph1}{ph2}Przejdź do pliku binarnego," +" gdy funkcja zależy od kodu natywnego.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "Analiza JavaScript i Electron-REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Śledź eksport notatek CSV za pomocą interfejsu API renderera, ładowania " +"wstępnego i obsługi IPC za pomocą REA . Zawiera pliki przykładowe do " +"pobrania i zweryfikowany wynik analizy." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Skopiuj przykładowy monit" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Kopiuj statyczną analizę aplikacji" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Spis treści{ph1} / {ph2}Przewodniki{ph3} / Analiza programów kodu " +"maszynowego" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "Recover DX-Ball{ph0}obliczanie lewej / prawej pozycji dźwięku." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Sprawdź oryginalne instrukcje, zidentyfikuj dane wejściowe i stałe, a " +"następnie sprawdź odzyskane C." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "W tym przewodniku" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Przykład{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Zapytaj swojego agenta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Przeczytaj wyniki REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Odzyskaj i sprawdź{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Użyj własnego pliku binarnego{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Oblicz pozycjonowanie dźwięku stereo w lewo / w prawo" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"W DX-Ball uderzenie Cegły zapewnia poziomą pozycję ekranu. Kod dźwiękowy " +"zamienia go w wartość panoramowania w lewo/w prawo." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"Funkcja startowa, {ph0}, ma krótki wynik dekompilatora: wezwanie do {ph1}. " +"REA zwraca również swoje instrukcje i dzwoniące, które dają agentowi sposób " +"na zbadanie brakującej arytmetyki." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Nowy w tych warunkach?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Instrukcje:{ph1} kroki, które uruchamia procesor, pokazane w czytelnej " +"formie, takie jak {ph2} lub {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Wynik dekompilatora / pseudokod:{ph1} próba narzędzia analitycznego " +"przekształcenia instrukcji z powrotem w kod podobny do C. Może przegapić " +"części, jak w tym przykładzie." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Dzwoniący:{ph1} funkcja, która nazywa ten. Pokazuje, które wartości są " +"przekazywane." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Adres:{ph1} miejsce w programie, napisane w systemie szesnastkowym, " +"takie jak {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Stałe:{ph1} stałe numery przechowywane w programie, odczytywane jako " +"surowe bajty i dekodowane." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Trzy dowody, jedna kalkulacja" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * instrukcje{ph1}{ph2}Wejście całkowite{ph3}{ph4}Odczyt stosu " +"dostarcza wartość używaną przez instrukcje zmiennoprzecinkowe.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * dzwoniący{ph1}{ph2}Współrzędna ekranu{ph3}{ph4}The brick-hit " +"caller passes {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * bajty danych{ph1}{ph2}Stałe numeryczne{ph3}{ph4}Odsyłane bajty " +"dekodują do {ph5}, {ph6} i wartość skali.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA dostarcza instrukcje, relacji funkcja-wywołanie i bajtów. Agent " +"interpretuje je razem." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Zapytaj o zachowanie" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Po {ph0}łączenie REA z agentem{ph1} oraz {ph2}konfigurowanie narzędzia do " +"analizy programów kodu maszynowego{ph3}, podaj lokalny plik wykonywalny i " +"pytanie:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Jakiego narzędzia analitycznego powinienem użyć?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA potrzebuje jednego z nich do odczytu programów natywnych:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} (macOS lub Linux ): konfiguracja REA wykrywa ją lub " +"oferuje jej instalację. Na macOS otwórz Hopper raz i wybierz tryb demo lub " +"Aktywuj licencję przed pierwszą analizą." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} (macOS lub Linux ; eksperymentalny na Windows): wolny, " +"ale potrzebuje istniejącego Ghidra 12.1.instalacja x i 64-bitowy JDK 21 lub " +"nowszy." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA {ph1} (Windows): dla istniejącej konfiguracji IDA z rejestracją " +"MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Zobacz też {ph0}Skonfiguruj analizę programów kodu maszynowego{ph1} do " +"kroków." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby dowiedzieć się, jak DX-Ball oblicza " +"pozycjonowanie dźwięku stereo. Wyjaśnij obliczenia i pokaż " +"kod.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Przykładowy monit. Podaj swojemu agentowi ścieżkę do lokalnego pliku " +"wykonywalnego DX-Ball 1.07. REA nie zawiera DX-Ball, więc użyj własnej " +"kopii lub zadaj to samo pytanie dotyczące innego małego programu Windows, " +"który masz." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Jak uzyskać pełną ścieżkę pliku?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} w Eksploratorze plików kliknij plik prawym przyciskiem " +"myszy i wybierz {ph2}Kopiuj jako ścieżkę{ph3}. Na Windows 10 przytrzymaj " +"klawisz Shift, klikając prawym przyciskiem myszy." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} w Finderze kliknij prawym przyciskiem myszy plik, " +"przytrzymaj opcję i wybierz {ph2}Skopiuj \" ... \" jako ścieżkę{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Dowolny system:{ph1} przeciągnij plik do okna terminala, a pojawi się " +"jego ścieżka." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Przeczytaj wyniki REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Przeczytaj dane wejściowe" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Instrukcje ładują argument liczby całkowitej i konwertują go na arytmetykę " +"zmiennoprzecinkową. Jest to dane wejściowe nieobecne w pierwszym widoku " +"pseudokodu." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Podążaj za dzwoniącym" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA identyfikuje dzwoniącego z cegły. Jego wcześniejsze instrukcje mnożą " +"współrzędną płytki przez 30; dodawanie {ph0} (20) podaje położenie ekranu " +"Cegły." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Przeczytaj przywoływane stałe" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"Arytmetyka odwołuje się do tych adresów. Odczyt bajtów dostarcza " +"rzeczywistych wartości; kolejność instrukcji informuje agenta, w jaki sposób" +" są używane." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Napisz i sprawdź odzyskaną funkcję" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"W skali 1,0 pozycje ekranu 0, 320 i 640 są mapowane do -500, 0 i 500 przed " +"konwersją liczb całkowitych. Obliczenia umieszczają środek ekranu na środku " +"pola stereo." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"Agent wykorzystał wyniki REA do zapisania C. oddzielne kontrole porównały " +"3205 wejść z oryginalną funkcją x86 i odtworzyły wszystkie 63 skompilowane " +"bajty pełnej funkcji." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}Zobacz pełne porównanie badań i montażu do C{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Spróbuj z własnym binarnym" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Połącz analizę dostawcy programów kodu maszynowego{ph1}, następnie daj " +"agentowi lokalny plik wykonywalny lub bibliotekę oraz funkcję do zbadania. " +"Przydatne pytania początkowe obejmują \"Jak jest analizowany ten " +"plik?\"lub\" która funkcja obsługuje tę akcję menu?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Jeśli znasz już nazwę lub adres funkcji, możesz wysłać zapytanie z " +"terminala. Dla skonfigurowanej instalacji Ghidra:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Analiza funkcji" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Zastąp ścieżkę docelową i {ph0} z własną nazwą lub adresem funkcji. Każde " +"wywołanie CLI importuje i analizuje plik binarny, a następnie zamyka jego " +"sesję. Zapytania MCP twojego agenta ponownie wykorzystują zaimportowany plik" +" binarny, gdy ta sesja jest otwarta." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Przeczytaj pseudokod wraz z instrukcjami i odniesieniami. Gdy wynik " +"pozostawia nierozwiązane wywołanie lub wartość, użyj tej lokalizacji jako " +"następnego pytania." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Natywna Analiza binarna-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Odzyskaj natywne obliczenia za pomocą REA: sprawdź instrukcje, podążaj za " +"dzwoniącym, przeczytaj stałe i sprawdź zrekonstruowane C." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Analiza programów kodu maszynowego" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Skopiuj przykładowy monit" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Analiza funkcji kopiowania" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Skonfiguruj REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Skonfiguruj REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}Co to jest RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Jak pomaga REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Dinozaur gry{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Kalkulator{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Spróbuj REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Dowiedz się więcej{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Pomoc i opinie{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Społeczność{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Inżynieria odwrotna z twoim agentem kodującym" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Dowiedz się,{ph0}jak działa oprogramowanie." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA daje Twojemu agentowi programistycznemu narzędzia do zbadania programu i" +" wyjaśnienia jego działania." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "Znasz już RE? {ph0}Przejdź do poradników analizy →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Chcesz wejść głębiej? {ph0}Czytaj Blog →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Wklej to polecenie do swojego agenta programistycznego:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Kopiuj" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Albo uruchom to polecenie w terminalu:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "Sprawdź i zatwierdź plan zmian, a następnie uruchom agenta ponownie." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Czym jest inżynieria wsteczna?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Poznawaniem działania oprogramowania przez {ph0}badanie samego " +"programu.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"Cel: zrozumieć funkcję wystarczająco dobrze, aby {ph0}wyjaśnij to{ph1}, " +"{ph2}zmień to{ph3} lub {ph4}Odbuduj to.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "Przed REA · Badasz program {ph0}samodzielnie{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Dekoduj gałęzie" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Śledzenie połączeń" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Odzyskaj regułę" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Oryginalny x64 * wybrane instrukcje{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * która gałąź?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Dwa skoki w to samo miejsce. Którzy to operatorzy?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Wyszukaj identyfikatory poleceń, a następnie oznacz gałąź." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Podziel ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Mnożenie ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Co robią wywoływane funkcje?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 jest jasne. Rozmowy to tylko adresy. {ph0}Który dzieli? Która wartość " +"wchodzi?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Sprawdź funkcje pomocnicze i prześledź zapisane wartości." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Divide" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * Jaka jest reguła?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Ta ścieżka mnoży się przez inne dane wejściowe. Więc {ph0}10% oznacza 10% " +"z 200{ph1} po +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "Nazwij operandy i sprawdź obie ścieżki operatora." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Ilustrujące rozumowanie eksperta" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Dekodujesz instrukcje, postępujesz zgodnie z wywołaniami funkcji i " +"rekonstruujesz obliczenia.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "Z REA · Pytasz {ph0}swojego agenta{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Wystarczy jedno polecenie." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Zadaj agentowi pytanie {ph0}zwykłymi słowami.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Przykładowy monit * Kalkulator" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Przykładowa odpowiedź · na podstawie ustaleń" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "Po +, przycisk % trwa {ph0}procent pierwszej liczby.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA dostarcza" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Instrukcje obsługi, zdekompilowany kod i połączenia." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Twój agent wyjaśnia" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "Która gałąź ma zastosowanie, co oblicza i jak ją odbudować." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Wybrany zespół z zainstalowanego kalkulatora DLL. Myśli i odpowiedzi " +"ilustrują ustalenia. {ph0}Kontynuuj z przykładem kalkulatora ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Spróbujmy dwóch przykładów.{ph1} Zmień szybkość gry, a następnie wróć " +"do kalkulatora i odbuduj przycisk%." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Przykład 01 * gra dinozaurów Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Dlaczego dinozaur przyspiesza?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Gol" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Odbuduj grę za pomocą {ph0}regulowana prędkość.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Dlaczego reverse engineer it?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Aby odtworzyć jego przyspieszenie, potrzebujemy {ph0}reguła w grze " +"biegowej{ph1}: jak szybko się zaczyna, jak bardzo się zwiększa i kiedy się " +"zatrzymuje." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Zagraj w odtworzoną wersję" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Graj" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Skok ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Zacznij od nowa" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Prędkość" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Użyj reguły odzyskiwania przyspieszenia" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Pierwotna zasada: zacznij od 6, a następnie zwiększ do 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Przesuń suwak, aby ustawić własną prędkość. Przestrzeń lub skok usuwa " +"kaktusa." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Włącz JavaScript, aby odtworzyć rekonstrukcję. Powyższy kod i Wyjaśnienie " +"pozostają czytelne." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA zwróciło" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Skrypt faktycznie działa na stronie.{ph1} Agent odczytuje swoją funkcję" +" aktualizacji i ustawienia prędkości, a następnie używa tej reguły w nowej " +"grze." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Przykładowy monit * gra dinozaurów" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby sprawdzić tę grę dinozaurów. Dlaczego robi się" +" szybciej? Pokaż regułę prędkości, a następnie zbuduj małą wersję z " +"regulowaną prędkością.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Sprawdzony cel: {ph0}wayou ' s Chromium-wersja przeglądarki pochodnej{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Zacznij od 6.{ph1} Dodaj {ph2}0.001{ph3} każda aktualizacja bez " +"kolizji, podczas gdy prędkość jest poniżej {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Otwórz speed lab" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Co robi każda część" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 * REA {ph1}{ph2}Przeczytaj skrypt uruchomionej gry{ph3}{ph4}Zwróć " +"jego rzeczywisty kod i ustawienia do agenta.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * Twój agent{ph1}{ph2}Odbuduj regułę, Dodaj formant{ph3}{ph4}Użyj " +"odzyskanego przyspieszenia w małej grze z suwakiem prędkości.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * Ty{ph1}{ph2}Zmień prędkość i graj{ph3}{ph4}Wypróbuj oryginalne " +"przyspieszenie, a następnie wybierz własne tempo.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Zobacz skrypt, kontrole i jak wypróbować analizę" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA sprawdził wersję przeglądarki HTTP poprzez lokalne połączenie " +"debugowania i zwrócił załadowany {ph0}, w tym jego źródło i trawienie." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Nazwaliśmy funkcję aktualizacji oryginalnej gry w kontrolowanym sprawdzeniu " +"przeglądarki, z wyłączonymi przeszkodami i automatycznym planowaniem. Po " +"4000 aktualizacjach prędkość wynosiła 10,0; po 10 000 było to 13,0, " +"zaokrąglone do jednego miejsca po przecinku." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"Nowa mini-gra zachowuje tę zasadę prędkości. Jego rysunek, skoki i Kod " +"kolizji są małą implementacją nauczania. {ph0}Otwórz laboratorium{ph1} aby " +"zobaczyć nowy kod i uruchomić tę samą kontrolę prędkości." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Aby samodzielnie sprawdzić cel, postępuj zgodnie z {ph0}kroki połączenia " +"przeglądarki{ph1} używanie {ph2}strona dinozaurów{ph3}. Podaj agentowi ten " +"adres URL strony i lokalny punkt końcowy debugowania, a następnie skopiuj " +"powyższy monit." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Sprawdzony kod prędkości{ph1} · {ph2} Chromium autorzy * licencja " +"BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Przykład 02 * Kalkulator Windows" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Odtwórz przycisk % kalkulatora." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"Zbuduj mały kalkulator, który obsługuje {ph0}zarówno+, jak i × " +"poprawnie.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Ten sam przycisk używa {ph0}różne zasady PO + i ×.{ph1} Sprawdzamy " +"zainstalowaną aplikację, aby dowiedzieć się, do której liczby zastosowany " +"jest procent." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Wypróbuj obliczenia" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Resetuj" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% z 200 = 20. Następnie 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Interaktywna ilustracja kontrolowanej reguły procentowej." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Jedna gałąź dzieli się przez 100. Drugi również mnoży się przez " +"pierwszą liczbę.{ph1} Agent używa obu do odtworzenia przycisku%." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Dla tego przykładu, {ph0} oraz {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Przykładowy monit * Odbuduj przycisk" +" %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby sprawdzić przycisk % kalkulatora Windows. " +"Odzyskaj reguły po + I×, a następnie zbuduj mały kalkulator, który używa " +"obu.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Z +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Weź 10% pierwszej liczby.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Z ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Zamień 10% na 0,1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Z zainstalowanej aplikacji do działającego przycisku %" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA odczytuje bibliotekę{ph1}{ph2}Zwróć kod % " +"obsługi{ph3}{ph4}Funkcja sprawdza operatora i używa stałej {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * Twój agent to interpretuje{ph1}{ph2}Wyjaśnij i Odtwórz " +"ZASADY{ph3}{ph4}Sprawdź gałąź za pomocą źródła Microsoft, a następnie " +"wypróbuj + i × powyżej.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Zobacz prawdziwy kod i sposób sprawdzenia odpowiedzi" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Sprawdzone za pomocą REA 4.1.0: Kalkulator Windows 11.2508.4.0, x64. " +"Czytelne podsumowanie wykorzystuje nazwy z publicznego źródła firmy " +"Microsoft, aby wyjaśnić odzyskaną gałąź." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Procentowa realizacja{ph1} · {ph2}Przypadki testowe Microsoftu{ph3} · " +"{ph4}Natywny Przewodnik konfiguracji{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Twoje pierwsze śledztwo" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Wypróbuj REA w małej aplikacji." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Pobierz nasz przykład notatek, prześledź eksport CSV i sprawdź jedno " +"zmienione wejście." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Wypróbuj przykład z przewodnikiem" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Chcesz dowiedzieć się więcej?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Powiedz swojemu agentowi, co chcesz zrozumieć lub zbudować. Z REA, można " +"pracować razem na wszystko z {ph0}klonowanie tej strony{ph1} do " +"{ph2}rekonstrukcja gry z jej pliku wykonywalnego.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Przykładowy monit * strona " +"internetowa" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Tak, ten." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Przykładowy monit * rekonstrukcja " +"gry" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby zrekonstruować tę grę z jej pliku " +"wykonywalnego. Odzyskaj logikę rozgrywki w C i przetestuj ją przeciwko " +"oryginałowi.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Zobacz studium przypadku DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "Aby wykonać kroki konfiguracji i analizy, wybierz cel:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Programy do kodu maszynowego" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Sprawdzaj funkcje, ciągi znaków, odwołania i relacje wywołania funkcji w " +"plikach wykonywalnych i bibliotekach." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Analiza programów kodu maszynowego przewodnik" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Mapuj Moduły, trasy, IPC i natywne zależności z folderu aplikacji lub " +"archiwum ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Przepływy pracy aplikacji" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Aktywność przeglądarki i środowiska wykonawczego" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Przechwyć wybraną aktywność przeglądarki lub procesu, a następnie porównaj " +"wyniki w różnych przebiegach." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Przewodnik obserwacji przeglądarki" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Masz pytania?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Przeczytaj FAQ{ph1}, {ph2}porozmawiaj z nami na Discord {ph3}, lub " +"{ph4}otwórz problem GitHub{ph5} dla błędów i żądań funkcji." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Dołącz do społeczności" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Udostępniaj dochodzenia i uzyskaj pomoc od innych użytkowników REA na " +"Discord . Śledź REA na X dla aktualizacji projektu." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA - inżynieria odwrotna dla Twojego agenta kodującego" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Aplikacje inżynierii wstecznej, pliki binarne i zachowanie przeglądarki z " +"agentem kodującym. Postępuj zgodnie z przejrzystymi przewodnikami i wypróbuj" +" interaktywne przykłady z REA ." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Skopiuj monit instalacji REA" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Skopiuj polecenie konfiguracji" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Postępuj zgodnie z ręczną analizą kalkulatora" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Kopiuj Kalkulator Procent pytanie" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Dinozaur mini-gry. Użyj przycisku skoku lub naciśnij spację, gdy gra jest " +"skupiona." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Skopiuj monit o analizę dinozaurów" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Wybierz obliczenia" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Kopiuj monit o analizę kalkulatora" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Skopiuj monit projektu witryny" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Skopiuj monit o rekonstrukcję gry" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Spis treści{ph1} / {ph2}Gabloty{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Case study * Aegis Authenticator" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Jak działa authenticator{ph0}wygenerować kod logowania?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Sześciocyfrowy kod zmienia się co 30 sekund. Użyj REA, aby znaleźć " +"obliczenia w Android APK, a następnie odbudować go z zegarem można " +"kontrolować." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * oficjalne wydanie APK * 6.9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Zobacz Aegis na GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "Od APK do kodu, który możesz odtworzyć" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * Znajdź funkcję{ph1}{ph2}3077 klas → metody generowania{ph3}{ph4} " +"REA przeszukuje pakiet i śledzi kod używany przez akcje wyświetlania i " +"kopiowania.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * przeczytaj obliczenia{ph1}{ph2}Czas + klucz konta → sześć " +"cyfr{ph3}{ph4} REA zwraca metody i wartości domyślne. Agent wyjaśnia, jak do" +" siebie pasują.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * Odbuduj i sprawdź{ph1}{ph2}Zmień zegar. Uważaj na " +"kod.{ph3}{ph4}Nowa wersja demonstracyjna przeglądarki odtwarza regułę i " +"sprawdza ją w publicznych przypadkach referencyjnych.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "W tym studium przypadku" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Zapytaj swojego agenta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Wypróbuj generator kodu{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Znajdź kod za pomocą REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Przeczytaj obliczenia{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Sprawdź rekonstrukcję{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Sprawdź sam APK{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Zapytaj swojego agenta" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"Aplikacja pokazuje zmieniający się kod logowania. Chcemy znaleźć {ph0}co " +"sprawia, że się zmienia{ph1} i odtworzyć to zachowanie." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Przykładowy monit dla pobranego APK, ze skonfigurowaną analizą Androida REA." +" {ph0}Pobierz APK i konfiguracji analizy ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Wypróbuj generator kodu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"Aplikacja grupuje czas w {ph0}30-sekundowe bloki.{ph1} Łączy numer bloku z " +"kluczem konta, aby wygenerować kod. Ten sam klucz i blok tworzą ten sam kod." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Przesuń zegar na 60 sekund" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Czas" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "sekund" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Nasz regulowany przykładowy zegar" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30-sekundowy blok" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Blok" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 sekund{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Wygenerowany kod" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Klucz konta + blok → sześć cyfr" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Przykładowy czas, w sekundach" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 sekund" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 sekund" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"Po 59 sekundach: {ph0}287082.{ph1} Po 60 sekundach: {ph2}359152.{ph3} " +"Poruszanie się w obrębie jednego bloku pozostawia kod niezmieniony." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"Klucz jest stały, publiczny {ph0}Dane testowe RFC 6238{ph1}. Demo " +"implementuje obliczenia odzyskane z APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"Diagram pokazuje wynik po 59 sekundach. Włącz JavaScript, aby zmienić zegar." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Znajdź kod za pomocą REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Zawęź APK do trzech klas" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} jest kandydatem do obliczeń; pozostałe dwa dotyczą paska postępu i " +"zaimportowanych kont. TOTP oznacza hasło jednorazowe oparte na czasie." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Podłącz generator do wyświetlacza aplikacji" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA identyfikuje przeciążenie znacznika czasu i znajduje wywołujących metody" +" bazowej. Kontrola {ph0} następnie pokazuje wywołanie wyświetlacza {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Żądania pokazują skróconą ścieżkę wejściową. Nazwy klas wynikowych pomijają " +"wspólne {ph0} prefiks." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Przeczytaj obliczenia" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA zwraca {ph0}konwersja zegara, ustawienia domyślne i metody " +"generowania.{ph1} Konstruktorzy ustawiają 30-sekundowy interwał i sześć " +"cyfr; metoda znacznika czasu zamienia sekundy na numer bloku." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Blok czasu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Klucz + blok" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Sześć cyfr" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Czas wybiera blok.{ph1} Sekundy od 30 do 59 dają blok 1. Po 60 " +"sekundach blok staje się 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}Kluczowe sprawy też.{ph1} Generator łączy klucz konta z blokiem. Konto " +"z innym kluczem może wyświetlać jednocześnie inny kod." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Zachowaj sześć cyfr.{ph1} Reszta po podzieleniu przez 1 000 000 jest " +"uzupełniana zerami w razie potrzeby, więc kod może zaczynać się od 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Fragmenty kilku sprawdzonych metod, z zawijaniem linii do wyświetlania. " +"Prawy panel jest podsumowaniem wyjaśniającym. {ph0} Kod Aegis to " +"GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Wewnątrz generatora" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"Wydany APK stawia {ph0} w {ph1}. REA podąża za wywołaniem z {ph2} i zwraca " +"to ciało; oryginalne źródło wywołuje pomocnika {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"Ostatni bajt skrótu wybiera pozycję. Cztery bajty w tej pozycji zapewniają " +"dodatnią liczbę 31-bitową; formatowanie redukuje ją do żądanej liczby cyfr. " +"Ostatni argument konstruktora wybiera gałąź formatowania kodu wprowadzoną " +"przez kompilację." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Porównaj z pasującym źródłem wydania{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Sprawdź rekonstrukcję" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Zebraliśmy wybrane REA-zwrócone metody Java w małym programie testowym. Ich " +"dorobek odpowiadał niezależnej rekonstrukcji na {ph0}133 przypadki " +"testowe{ph1}, w tym granice bloków czasowych i kody zaczynające się od zera." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Przykładowy czas" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Kod sześciocyfrowy" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 sekund" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 sekund" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Generator pasuje również do sześciu opublikowanych przypadków referencyjnych" +" SHA-1 w {ph0}RFC 6238{ph1}. Sprawdź implementację przeglądarki przeciwko " +"nim:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Uruchom kontrole referencyjne" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Przeczytaj obliczenia demo" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"Przypadki referencyjne używają ośmiu cyfr. Kontrola weryfikuje również ich " +"sześciocyfrowe wyniki." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Weryfikacja uruchamia wyodrębnione metody Java i nowe demo. Android APK " +"został sprawdzony statycznie." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Sprawdź sam APK" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Skonfiguruj REA {ph1} na macOS lub Linux pobierz te dwa pliki do tego " +"samego folderu. W Windows Użyj środowiska Linux, takiego jak WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Analiza Androida wymaga pełnego JDK 17 lub nowszego. Wybierz go za pomocą " +"{ph0} lub {ph1}. W tym przypadku zastosowano JDK 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Wskaż REA w pliku dostawcy i sprawdź APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Twój agent może kontynuować przez REA CLI, korzystając z powyższego monitu. " +"Dla MCP, dodać {ph0} do środowiska serwera REA i podłącz go ponownie." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Następne pytanie: {ph0}co się dzieje, gdy konto używa ośmiu cyfr lub innego " +"przedziału czasu?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Źródła" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Oficjalne wydanie Aegis 3.4.3{ph1} · {ph2}Dopasowanie zatwierdzenia " +"źródła{ph3} · {ph4}Licencja GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" +"{ph0}RFC 6238 przypadki referencyjne{ph1} · {ph2}Dane z testów " +"demonstracyjnych{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Sprawdzony za pomocą REA 6.1.0 w dniu 9 października 2026 r. Zdekompilowane " +"fragmenty są przypisywane Aegis ; diagram, czytelne podsumowanie i " +"rekonstrukcja przeglądarki to nowy materiał dydaktyczny." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK inżynieria odwrotna: kody logowania-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Sprawdź Aegis Android APK za pomocą REA, Odzyskaj jego sześciocyfrowe " +"obliczenie kodu logowania i wypróbuj rekonstrukcję z regulowanym zegarem." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK case study" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Skopiuj przykładowy monit Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Postępuj zgodnie z obliczeniem kodu logowania" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Skopiuj polecenie kontroli APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Spis treści{ph1} / {ph2}Gabloty{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Studium przypadku * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Znajdź flagę w{ph0}binarny CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Użyj REA, aby sprawdzić mały kontroler flag, przekształcić jego reguły w " +"równania i znaleźć Dane wejściowe, które sprawiają, że oryginalny program " +"drukuje {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "maskowane kwadraty FLAG checker * Easy * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Zobacz oryginalne wyzwanie" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "Od binarnej do sprawdzonej odpowiedzi" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * Znajdź czek{ph1}{ph2}Ciągi → sprawdzanie funkcji{ph3}{ph4} REA " +"znajduje monit, jego odwołania i kod, który akceptuje lub odrzuca dane " +"wejściowe.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * Wyodrębnij Zasady{ph1}{ph2}36 znaków · 26 Sum{ph3}{ph4} REA zwraca" +" instrukcje i dane za każdym czekiem. Agent zamienia je w równania.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * rozwiązać i uruchomić{ph1}{ph2}Odzyskana flaga → " +"poprawna!{ph3}{ph4}Skrypt Pythona rozwiązuje równania. REA przechwytuje " +"oryginalny program akceptujący wynik.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"Wyzwanie jest autorstwa Josepha, opublikowane w oficjalnym repozytorium " +"DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "W tym studium przypadku" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Znajdź kod kontrolny{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Przeczytaj jedną maskę{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Montaż do czytelnego kodu{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Rozwiąż równania{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Sprawdź odpowiedź{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Spróbuj sam{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Znajdź kod kontrolny" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Materiały informacyjne to plik wykonywalny o wielkości 15 KB. Prosi o flagę," +" a następnie drukuje {ph0} lub {ph1}. Zacznij od prostej prośby do swojego " +"agenta." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby przeanalizować ms_flag_checker i znaleźć " +"flagę. Wyjaśnij, jak działają kontrole, a następnie zweryfikuj odpowiedź za " +"pomocą oryginalnego programu.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Przykładowy monit z pobranym wyzwaniem dostępnym lokalnie i analizą " +"podłączonego dostawcy programów kodu maszynowego." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Postępuj zgodnie z monitem wejściowym do jego funkcji" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"Odwołanie daje agentowi miejsce do zbadania, mimo że oryginalne nazwy " +"funkcji pliku wykonywalnego zostały usunięte." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Przeczytaj kontroler i jego dwóch pomocników" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"Pierwsza pętla kopiuje 36 kodów znaków. Pętla sprawdzania dekoduje maskę, " +"sumuje wybrane kody i porównuje wynik z zapisaną liczbą. Jego {ph0}- bajtowe" +" kroki w poprzek {ph1} bajty dają 26 masek." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Są to wybrane wyniki ze świeżej analizy REA. Lokalna ścieżka docelowa jest " +"skrócona do wyświetlania; adresy odnoszą się do importowanego obrazu REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Jeden czek ujawnia jedną postać" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Kontroler układa dane wejściowe w siatce 6×6. Maska wybiera, które komórki " +"przyczyniają się do sumy. Jego kompaktowe kodowanie wykorzystuje liczby " +"ujemne do pomijania komórek i liczby dodatnie do ich wybierania." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "Siódmy czek wybiera tylko jedną pozycję. {ph0}Otwórz rysunek{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Odczytaj maskę i jej cel z pliku binarnego" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"Instrukcja {ph0} odczytuje bajty maski jako wartości podpisane. Właśnie " +"dlatego {ph1} oznacza -21. Celem jest liczba całkowita little-endian. Razem " +"te bajty mówią agentowi, że {ph2}, więc ta postać jest {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Od instrukcji do czytelnego czeku" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Wybierz krok, aby połączyć pomocnika sumowania i jego wywołującego z tą samą" +" regułą w C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Start" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Wybierz" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Dodaj" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Advance" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Porównaj" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * wybrane oryginalne instrukcje" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Czytelne podsumowanie C * one-check" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * zacznij od zera · {ph1} {ph2} trzyma bieżącą sumę." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * Sprawdź komórkę maski.{ph1} Wartość zerowa pomija znak; wartość " +"niezerowa go zawiera." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * Dodaj kod znaku · {ph1} Liczba całkowita wejścia przy tym samym " +"przesunięciu jest dodawana do sumy." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * przejdź do następnej komórki.{ph1} Oryginalna pętla przesuwa " +"cztery bajty na liczbę całkowitą i odwiedza sześć wierszy po sześć komórek." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * Porównaj z zapisanym celem.{ph1} Dzwoniący otrzymuje sumę w {ph2}." +" Niedopasowanie skacze do {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Instrukcje pochodzą od pomocnika sumującego i jego dzwoniącego. C jest " +"podsumowaniem wyjaśniającym z opisowymi nazwami i spłaszczoną pętlą 36 " +"komórek." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Rozwiąż 26 równań" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"Większość masek wybiera kilka komórek. Na przykład pierwsze sprawdzenie " +"dodaje 16 kodów znaków i wymaga łącznie 1441. Nakładające się zaznaczenia " +"dają równania, które mały skrypt Pythona może rozwiązać razem." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python * solver fragment" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 to solver, który znajduje wartości spełniające te równania. Ten fragment " +"wykorzystuje wyodrębnione kontrole i zakłada {ph0} flaga z literami, " +"cyframi, podkreśleniami i nawiasami klamrowymi. Pełne pobieranie obejmuje " +"wszystkie 26 masek i celów." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Pobierz kompletny solver" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Sprawdź odpowiedź za pomocą oryginalnego programu" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REA przechwytywanie procesu rejestruje oryginalny plik wykonywalny " +"akceptujący rozwiązaną flagę. Zmiana jednego wybranego znaku z {ph0} do " +"{ph1} tworzy pierwszą sumę 1440 zamiast 1441, a program ją odrzuca." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Wejście" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Obserwowane wyjście" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Kod wyjścia" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Flaga solvera" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Jedna postać się zmieniła" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Pokaż odzyskaną flagę i przechwycone dane wyjściowe" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * oryginalne wyjście programu" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Kopiuj flagę" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"Odzyskana wartość pasuje również do flagi w opublikowanych przez " +"organizatorów metadanych wyzwania, sprawdzonych po rozwiązaniu pliku " +"binarnego." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Źródło, tożsamość docelowa i szczegóły analizy" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Nowa analiza i dwa przechwytywanie procesów w dniu 8 października 2026 " +"r.przy użyciu REA 4.1.0 z Ghidra 12.1.4 na Linux x64. Plik binarny to " +"pozbawiony x86-64 ELF, 15 248 bajtów." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Odniesienia do ciągów, funkcje i stałe zostały sprawdzone przed " +"przeczytaniem źródła lub rozwiązania organizatorów. Solver Python i diagram " +"zostały zbudowane z tych wyników REA." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Porównaj ze źródłem organizatorów{ph1} · {ph2}Metadane wyzwania i " +"flaga{ph3} · {ph4} REA dowody uwagi{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Spróbuj sam" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Pobierz oryginalne wyzwanie i solver do jednego folderu. Użyj powyższego " +"monitu, aby zbadać sprawę z agentem lub uruchom dołączony skrypt." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Terminal * Rozwiąż i uruchom" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Skrypt drukuje flagę kandydata; wklej go w monicie programu. Rozwiązywanie " +"potrzeb Python i {ph0}. Uruchomienie oryginalnego pliku wykonywalnego wymaga" +" Linux x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Skonfiguruj REA z agentem kodującym" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "CTF Reverse Engineering: DownUnderCTF Flag Checker-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Użyj REA, aby rozwiązać sprawdzanie flagi maskowanych kwadratów " +"DownUnderCTF. Znajdź funkcje sprawdzania, wyodrębnij maski i porównaj " +"odzyskaną flagę z oryginalnym programem." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "CTF flag-checker case study" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Skopiuj przykładowy monit CTF" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "Równanie maski CTF; przewijaj poziomo na mniejszych ekranach" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"Siódma Maska pomija 21 komórek, wybiera pozycję 21, a następnie pomija 14. " +"Tylko ta komórka przyczynia się do sumy. Wymagany kod znaku to 55, co " +"oznacza, że znak to 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Postępuj zgodnie z kontrolą CTF" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Kopiuj zespół CTF" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Kopiuj czytelny czek CTF" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Skopiuj fragment CTF solver" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Skopiuj odzyskaną flagę" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Kopiuj polecenia CTF solver" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Spis treści{ph1} / {ph2}Gabloty{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Studium przypadku * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Przebudowa DX-Ball {ph0}z jego pliku wykonywalnego." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"Celem jest utrzymanie wersji C gry Windows z 1996 roku. REA pomaga agentowi" +" sprawdzić oryginalną, jedną funkcję na raz." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 * C * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Jedna funkcja, od wykonywalnego do sprawdzonego C. REA dostarcza instrukcje," +" rozmówców i odczyty danych; projekt rekonstrukcji implementuje i testuje " +"wynik. {ph0}Otwórz rysunek{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "W tym studium przypadku" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Projekt{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Sound pan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Sprawdzanie wyniku{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Kontynuuj pracę{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "utrzymywane funkcje C" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "porównania z oryginalnym kodem" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "funkcje z dopasowanymi skompilowanymi bajtami" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Punkt kontrolny projektu: 7 października 2026 r. {ph0}Progress ledger{ph1} ·" +" {ph2}Pokrycie testu{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Dotychczasowy projekt" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Odzyskany kod obejmuje obsługę tablic i zasobów, trafienia cegieł, animacje," +" cząstki i produkcję bonusów. Obecne Kompilacje zapewniają narzędzia " +"inspekcyjne i bibliotekę analiz. Prace nad grywalną grą kontynuowane są z " +"fizyką piłki i wiosła, obsługą zasilania i integracją Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Znalezienie obliczenia lewej / prawej pozycji dźwięku" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Po uderzeniu Cegły jej pozycja pozioma jest przekazywana do kodu " +"dźwiękowego. Dochodzenie wymagało odzyskania, w jaki sposób ta współrzędna " +"ekranu staje się wartością panoramowania w lewo/w prawo." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby dowiedzieć się, jak DX-Ball oblicza " +"pozycjonowanie dźwięku stereo. Wyjaśnij obliczenia i pokaż " +"kod.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Przykładowy monit dla agenta kodującego z dostępnym lokalnym plikiem " +"wykonywalnym. Poniższe dochodzenie pokazuje zapytania REA i dowody stojące " +"za odpowiedzią." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"Agent użył REA do sprawdzenia funkcji, podążania za jej dzwoniącym z cegły i" +" odczytywania stałych z pliku wykonywalnego. Wyniki te dostarczyły danych " +"wejściowych i arytmetycznych potrzebnych do zapisania funkcji C poniżej." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"Pierwszy wynik funkcji dla {ph0} dołączono deklarowanie pseudokodu {ph1} i " +"dzwonienie {ph2}. Jego widok instrukcji pokazywał wejście stosu i operacje " +"zmiennoprzecinkowe. Ta rozbieżność dała agentowi konkretny powód do dalszego" +" dochodzenia." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "Pierwszy widok dekompilatora" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"Wyjście pokazuje wywołanie konwersji. Czytanie poniższych instrukcji ujawnia" +" wejście i podawanie obliczeń, które wywołanie." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Trzy pytania odpowiedział przez REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Odzyskaj brakujące dane wejściowe" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"Wynik funkcji zawiera instrukcje obok pseudokodu i rozmówców. Tutaj, {ph0} " +"ujawnia dane wejściowe całkowite brakujące w widoku dekompilatora." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Postępuj zgodnie z rozmówcą, aby zrozumieć Dane wejściowe" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA zidentyfikował tego rozmówcę w pierwszym wyniku. Jego poprzednia skala " +"instrukcji {ph0} przez 30; dodanie 20 daje współrzędną ekranu Cegły, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Przeczytaj wartości za adresami pamięci" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Zwracane bajty ustanawiają dwie stałe arytmetyczne i początkową skalę " +"przesuwania. Agent ma teraz wartości potrzebne do wyrażenia C." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "Od ustaleń REA do C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Wykonaj pięć poniższych kroków. Każdy wybór podkreśla oryginalne instrukcje " +"i poinformowane przez nich linie C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Wejście" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Pomnóż" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Odejmij" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Skala" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Powrót" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Oryginalny x86 * fragment" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Zrekonstruowany C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * odczytaj dane wejściowe.{ph1} Widok instrukcji w wyniku funkcji " +"REA odczytuje {ph2} i używa {ph3} aby załadować liczbę całkowitą. Po " +"wywołaniu przez REA ustanawia znaczenie współrzędnych ekranu parametru C " +"{ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * pomnóż przez 1,5625.{ph1} {ph2} czyta podwójne w {ph3}. Bajty " +"zwrócone przez REA {ph4} dekodowanie do {ph5}; C używa tej samej stałej." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * Odejmij 500,0.{ph1} {ph2} czyta podwójne w {ph3}. Wynik bajtu REA" +" dekoduje do {ph4}, przesunięcie środka obliczeń do współrzędnych ekranu " +"{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * Zastosuj zapisaną skalę.{ph1} Drugi {ph2} czyta {ph3}. Ten " +"globalny nazywa się {ph4} w utrzymywanym źródle. Odczyt drugiego bajtu REA " +"ustala jego początkową wartość {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * Zwraca liczbę całkowitą.{ph1} Wezwanie na {ph2} sięga {ph3}, " +"zidentyfikowane w wynikach callee REA. C rzuca wynik do {ph4}; oryginał-" +"porównania x86 sprawdzają zwróconą wartość." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"Fragment zestawu wybiera instrukcje wejściowe, arytmetyczne i zwrotne. Pełna" +" lista poniżej obejmuje również interwencyjne sklepy oraz konfigurację i " +"czyszczenie funkcji." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Pełne zgromadzenie i dowody potwierdzające" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "Wynik REA * 0x406400 · 0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Co dostarcza rozmówca" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"Funkcja brick-hit w {ph0} skaluje współrzędną płytki o 30, dodaje 20, a " +"następnie popycha ją przed wywołaniem:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Co odczytują dane" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "Bajt REA odczytuje, dekoduje jako mało - endian podwaja" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Adres" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Wartość" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Używany do" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Pierwsze mnożenie" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Odejmowanie" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} początkowo" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Przechowywana skala patelni" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Nagrany z REA 4.1.0 Dla celu DX-Ball 1.07 przypiętego hash. Powiązane " +"notatki z dochodzenia zachowują identyfikatory dowodów." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Utrzymane źródło{ph1} · {ph2}Notatki z dochodzenia i odniesienia do " +"dowodów{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Sprawdzanie odzyskanej funkcji" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"Odzyskana Funkcja Przechodzi dwa kontrole: jej wartości zwracane są zgodne z" +" oryginałem, a skompilowane bajty są zgodne z plikiem wykonywalnym." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3205 przypadków zachowania" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Testy wykonują oryginalną funkcję x86 i porównują jej wartość zwracaną z " +"utrzymanym C. obejmują każdą pozycję całkowitą od 0 do 640 w pięciu skalach " +"pan: 0, 0,5, 1, 20 i -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 pasujące bajty" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"Funkcja C jest kompilowana z przypiętym łańcuchem narzędzi VC4.0. Powtórka " +"kompilatora pasuje do pełnej funkcji po zastosowaniu sprawdzonych relokacji " +"i sprawdzeniu przywoływanych stałych." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"W skali 1 odzyskane obliczenia zwracają -500 na lewej krawędzi, 0 Na środku " +"i 500 na prawej krawędzi. Kolejną częścią pracy audio jest integracja tej " +"wartości z zapleczem dźwiękowym gry." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Przeczytaj szczegóły powtórki kompilatora{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Kontynuuj dochodzenie" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"To samo podejście stosuje się w przypadku aktualizacji cząstek, kolejek " +"wybuchowych i generowania premii: sprawdź odpowiednie funkcje, Odzyskaj ich " +"stan i zależności, a następnie porównaj implementację z oryginałem." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Aby samodzielnie sprawdzić funkcję panoramowania dźwięku, postępuj zgodnie z" +" instrukcjami konfiguracji projektu DX-Ball i podaj odpowiadający jej " +"oryginalny cel. Następnie uruchom:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "W kasie DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} Repozytorium DX-Ball{ph1}{ph2}Aktualne źródło, postęp i konfiguracja " +"lokalna.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} REA analiza przepływu pracy{ph1}{ph2}Postępuj zgodnie z obliczeniami, " +"a następnie użyj tego samego podejścia z własnym plikiem binarnym.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Cząstki i produkcja premii{ph1}{ph2}Większe dochodzenie w sprawie " +"stanu, kolejek i pikseli pisze.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball inżynieria odwrotna: panoramowanie dźwięku-REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Wykonaj rekonstrukcję DX-Ball z analizy binarnej przez REA do utrzymywanych " +"testów C, original-x86 i dopasowywania skompilowanych bajtów funkcji." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball sound-pan investigation; przewijanie poziomo na mniejszych ekranach" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.Funkcja EXE 0x00406400 jest sprawdzana za pomocą REA . Dzwoniący z " +"cegły dostarcza 20 plus 30 razy tile_x. instrukcje załaduj x, pomnóż przez " +"1,5625, odejmij 500,0, zastosuj skalę pan_scale i zwróć liczbę całkowitą. " +"Utrzymane C jest sprawdzane niezależnie od oryginalnego x86 w 3205 " +"przypadkach i przez kompilator VC4.0 replay pasujący do 63 bajtów." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "Studium przypadku rekonstrukcji DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Skopiuj przykładowy monit" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Postępuj zgodnie z obliczeniem lewej / prawej pozycji dźwięku" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Skopiuj oryginalny fragment zespołu" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Kopiuj dźwięk-funkcja panoramowania" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Skopiuj kompletny montaż dźwięku" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Skopiuj polecenie analizy DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Spis treści{ph1} / Gabloty" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA case studies." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, Gry, Electron i wyzwanie CTF, z kodem, liczbami i sprawdzonymi " +"wynikami." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android * analiza APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Jak authenticator generuje kod logowania" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Znajdź sześciocyfrowe obliczenie kodu Aegis w wydanym APK . Śledź metody " +"generowania za pomocą REA, a następnie przesuń zegar demonstracyjny, aby " +"zobaczyć, dlaczego kod zmienia się co 30 sekund." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Przeczytaj studium przypadku Androida" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * Analiza programów kodu maszynowego" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Rozwiąż sprawdzanie flag CTF" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Sprawdź łatwe wyzwanie DownUnderCTF za pomocą REA . Znajdź jego funkcje " +"kontrolne, zamień maski i sumy w równania, a następnie zweryfikuj rozwiązaną" +" flagę za pomocą oryginalnego programu." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Przeczytaj studium przypadku CTF" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Natywna * Rekonstrukcja" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball obliczenie lewej / prawej pozycji dźwięku" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Odzyskaj obliczenie lewej / prawej pozycji dźwięku z gry Windows z 1996 " +"roku. Instrukcje REA, odwołania do dzwoniącego i stałe numeryczne prowadzą " +"do małej funkcji C, sprawdzonej pod kątem oryginalnego zachowania i " +"wszystkich 63 skompilowanych bajtów." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Przeczytaj studium przypadku DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * śledzenie funkcji" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Jak Notion kopiuje tekst i HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Śledź interfejs API skierowany do strony za pomocą Notion zapakowany " +"JavaScript . Postępuj zgodnie z opakowaniami IPC do schowka systemowego, a " +"następnie zobacz, jak mały znacznik HTML utrzymuje bogate dane blokowe " +"połączone z kopią." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Przeczytaj studium przypadku Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 dos * rekonstrukcja" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Jak TH04 celuje w pierścień kul" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Sprawdź oryginalny 16-bitowy Pomocnik kąta za pomocą REA . Dopasuj jego " +"operacje mnożenia, dzielenia i koordynowania do czytelnego C++, a następnie " +"zobacz, jak wytwarzają pierścień skierowany do gracza." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Przeczytaj studium przypadku TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Przewodniki krok po kroku" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Przewodniki przechodzą przez natywne obliczenia, eksport Electron i żądanie " +"przeglądarki. Każdy zaczyna się od podpowiedzi i konkretnego celu." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Przeczytaj przewodniki" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Studia przypadków inżynierii odwrotnej-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Śledź dochodzenia REA za pomocą kodu, liczb i wersji demonstracyjnych: " +"Android authenticator , DX-Ball , Notion, TH04 i kontroler flagi " +"DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Spis treści{ph1} / {ph2}Gabloty{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Studium przypadku * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Jak kopie Notion{ph0}tekst i HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Śledź wywołanie schowka z interfejsu API strony Notion, poprzez wstępne i " +"główny proces, do programu do zapisywania schowka Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion Desktop 7.6.1 * JavaScript * REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Mostek wewnątrz pakietu biurkowego Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * API skierowane do strony{ph1} {ph2}{ph3}{ph4} {ph5}Wstępne " +"obciążenie ujawnia wywołalną metodę.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * opakowanie wstępne{ph1} {ph2}{ph3}{ph4} {ph5}Opakowanie wysyła " +"kanał i argumenty.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * główny proces obsługi{ph1} {ph2}{ph3}{ph4} {ph5}Odbiorca sprawdza," +" która strona Go wysłała.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * Schowek systemowy{ph1} {ph2}{ph3}{ph4} {ph5} Electron zapisuje " +"dostarczony tekst i HTML.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Jeden kanał łączy dwie strony: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Spakowany kod używa tego samego kanału w procesie ładowania wstępnego i " +"głównego. Rozwiązanie opakowań ujawnia wywołania Electron za tymi nazwami." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "W tym studium przypadku" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Podążaj za mostkiem schowka{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Utrzymanie struktury bloku{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Więcej przykładów i źródeł{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Gdzie idzie operacja kopiowania?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"Strona widzi metodę o nazwie {ph0}. Jego implementacja w preload jest " +"opakowaniem. Przydatne pytanie brzmi, co wysyła to opakowanie i który Kod je" +" odbiera." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby prześledzić, w jaki sposób Notion kopiuje " +"tekst i HTML do schowka systemowego. Pokaż kod na każdym " +"kroku.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Przykładowy monit z lokalnym pakietem aplikacji Notion Dostępny dla agenta " +"kodującego." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA znajduje, gdzie zacząć czytać" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Analiza wstępnego ładowania karty za pomocą REA lokalizuje interfejs API " +"wystawiony na stronę i wywołanie, które wysyła żądanie IPC. Oba ustalenia " +"pochodzą z zakresów źródłowych w minified bundle:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA → dwa miejsca do otwarcia" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Wybrane pola ze świeżych {ph0} wynik na karcie Notion preload, nagrany z REA" +" 4.1.0. Pozycje używają wiersza oryginalnego pakietu i kolumny zerowej." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"Agent otwiera te lokalizacje, znajduje element schowka w zmontowanym " +"interfejsie API i czyta {ph0}. Jej Call site supplies {ph1}. Ta nazwa daje " +"agentowi coś precyzyjnego, czego można szukać w głównym pakiecie. Cztery " +"fragmenty poniżej pokazują trasę, którą łączy." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Cztery krótkie fragmenty kodu" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Uproszczony z pakowanego JavaScript, z czytelnymi nazwami zmiennych. " +"Niepowiązani członkowie są pomijani." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Zacznij od interfejsu API wyświetlanego na stronie" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Ten członek podaje nazwę kanału. Realizacja {ph0} informuje nas, w jaki " +"sposób żądanie opuszcza proces strony." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Rozwiąż opakowanie wstępnego obciążenia" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"Zwrócona funkcja przekazuje argumenty za pośrednictwem IPC żądania i " +"odpowiedzi Electron. Możemy teraz szukać {ph0} po stronie głównej-proces." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Sprawdź, jak zarejestrowany jest odbiorca" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Główny proces wykorzystuje inne opakowanie. Jego {ph0} metoda rejestruje " +"{ph1} odbiornik dla tego kanału." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Znajdź zapis i sprawdzenie jego nadawcy" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"To jest cel podróży. Po sprawdzeniu nadawcy program obsługi przekazuje " +"dostarczone dane do interfejsu API schowka Electron. Kanał i dwa rozwiązane " +"opakowania łączą odsłoniętą metodę z tym wywołaniem." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Jak skopiowany blok zachowuje swoją strukturę?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Edytor internetowy Notion wysyła tekst i HTML poprzez {ph0}. Przechowuje " +"dane bloku lokalnie i umieszcza identyfikator w skopiowanym kodzie HTML, aby" +" je połączyć." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "Linki HTML do zapisanych danych blokowych" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Przeczytaj identyfikator HTML" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Znajdź ten sam lokalny identyfikator" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Przywróć dane bloku Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Tekst ilustracyjny i ID. Nagrany test modułu przywraca dane bloku, gdy " +"identyfikatory są zgodne; Nieaktualny wpis zwraca tylko tekst i HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"Po wklejeniu Notion szuka identyfikatora HTML i sprawdza go z zapisaną " +"kopią. Pasujące identyfikatory przywracają dane bloku." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Format schowka nagrany z zasobów internetowych buforowanych 13 lipca 2026 r." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Więcej przykładów i źródeł" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Inny przykład: tabele przeceny" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion analizuje Markdown na dane blokowe. Ten przykład pokazuje, jak tabela" +" staje się nagłówkiem i wierszami danych." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Tabela za pośrednictwem parsera Markdown Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Nagrane wyjście z wyodrębnionego parsera przeceny. Tabela staje się " +"wierszami i komórkami." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Inna ścieżka: połączenie offline SQLite" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Żądania renderowania Notion {ph0} przez IPC. Główny proces tworzy kanał " +"wiadomości i daje jeden port rendererowi, a drugi procesowi narzędziowemu " +"SQLite. Kolejne partie wyciągów i wyniki przemieszczają się przez ten port." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"Po tym przekazaniu wyjaśniono, gdzie działa baza danych i dlaczego śledzenie" +" tylko początkowego żądania IPC pomija późniejszą rozmowę." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Źródła i jak czytać fragmenty" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Mostek schowka pochodzi z Notion Desktop 7.6.1 {ph0}: zakładka preload i " +"{ph1}. Fragmenty rozszerzają minifikowane nazwy zmiennych i pomijają " +"niepowiązany kod; Pomocnik sender-check jest wyświetlany wraz z jego " +"podstawą {ph2} zadzwoń." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Przykłady Wirtualnego schowka i Markdown pochodzą z zasobów internetowych " +"buforowanych 13 lipca 2026 r., w tym modułów {ph0}, {ph1}, {ph2} oraz {ph3}." +" Te aktywa mają swoją własną wersję. Zapisane sondy wykonywały wyodrębnione " +"moduły i małe wiązki; ich wyjścia opisują te sondy, a nie przechwyconą sesję" +" interfejsu użytkownika pulpitu." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"Pokazany tutaj wynik REA jest skoncentrowaną analizą zapisanego obciążenia " +"wstępnego karty, zarejestrowanego z opublikowanym pakietem REA 4.1.0. " +"Lokalizuje API i wywołuje operację. Element składowy schowka i pasujący " +"odbiornik są połączone poprzez odczytanie ich implementacji opakowania w " +"pakiecie." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"Przykład Markdown wykorzystuje moduł parsera {ph0}. Zapisane testy modułów " +"pokazują, że zarówno filtry strony, jak i czatu zachowują tę tabelę. Parsery" +" paste/import, structured Markdown i AI/chat mają oddzielne punkty wejścia i" +" formaty pośrednie." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} JavaScript Przewodnik aplikacji{ph1}{ph2}Postępuj zgodnie z funkcją " +"eksportu małej aplikacji Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} DX-Ball{ph1}{ph2}Postępuj zgodnie z natywnymi instrukcjami sprawdzonej" +" funkcji C.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron inżynieria odwrotna: Schowek-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Śledź API schowka Notion poprzez wstępne ładowanie Electron, opakowania IPC " +"i główny proces, z krótkimi fragmentami kodu i spojrzeniem na jego bogaty " +"format schowka." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron case study" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Skopiuj monit o analizę Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Kopia Notion preload fragment" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Kopiuj Notion wywołaj fragment opakowania" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Kopia Notion obsługi wrapper fragment" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Skopiuj fragment odbiornika schowka Notion" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Przywracanie bogatych danych schowka po wklejeniu" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Przejdź do treści" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Spis treści{ph1} / {ph2}Gabloty{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Studium przypadku * Touhou 4: Lotus Land Story" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Rekonstrukcja TH04{ph0}wzory pocisków." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Pierścień pocisków zaczyna się od obliczenia krótkiego kąta. Użyj REA, aby " +"sprawdzić oryginalną funkcję DOS, a następnie postępuj zgodnie z jej " +"instrukcjami w czytelnym C++." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 * 16-bitowy DOS · C++ i montaż" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Zobacz rekonstrukcję TH04" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Od oryginalnych instrukcji do sprawdzonego źródła" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * oryginalna gra{ph1}{ph2}Główny.EXE{ph3}{ph4}Plik wykonywalny PC-98" +" i jego pomocnik kąta pocisku.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * sprawdź za pomocą REA {ph1}{ph2}Instrukcje + " +"referencje{ph3}{ph4}Sprawdź załadowany kod DOS i odczytaj obliczenie kąta z " +"pliku wykonywalnego.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * przeczytaj C++{ph1}{ph2}Przestrzeń → cel → obróć{ph3}{ph4}Połącz " +"każdą operację z utrzymaną rekonstrukcją.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * Sprawdź źródło{ph1}{ph2}2139 pasujących " +"bajtów{ph3}{ph4}Zarejestrowane kontrole kompilatora obejmują kod generowania" +" punktorów, który zawiera ten Pomocnik.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA zwraca oryginalny kod i jego dowody analizy. Projekt TH04 zapewnia " +"utrzymywane kontrole źródła i kompilatora." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "W tym studium przypadku" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}Pierścień kuli{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}Co zwraca REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Montaż do C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Sprawdzanie źródła{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Pełny projekt{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Jak pierścień celuje w gracza" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"Atak Elly wymaga wycelowanego pierścienia z początkową liczbą 16. Jeden " +"Pomocnik oblicza kierunek każdego pocisku. Ten sam pierścień może być " +"skierowany w ustalonym kierunku lub skręcić w kierunku gracza." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Twój agent kodowania" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Kopiuj" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA, aby dowiedzieć się, jak TH04 tworzy pierścień " +"pocisków i celuje w gracza. Wyjaśnij obliczenia i pokaż kod.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Przykładowy monit z oryginalnym plikiem wykonywalnym i kasą rekonstrukcji " +"dostępną lokalnie." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 przechowuje pełny obrót zgodnie z ruchem wskazówek zegara w jednostkach" +" kąta 256. Dla 16 pocisków każdy indeks dodaje 16 jednostek: {ph0}. Dodanie " +"kierunku gracza obraca te pozycje razem." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Ilustracja odzyskanej matematyki kąta dla liczby 16, kierunku gracza 40 i " +"obrotu szablonu 0. {ph0}Otwórz rysunek{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Szablon wypalania w odzyskanym źródle" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Atak pierścienia Elly * fragment źródłowy" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Linie te wybierają wzór przed trudnością i strojeniem wydajności. " +"{ph0}Przeczytaj źródło ataku{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "Co zwraca REA" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Sprawdzamy {ph0}, funkcja, która ustawia prędkość i kąt każdego pocisku. " +"REA zwraca instrukcje, pseudokod i odwołania. Trzy części tego wyniku " +"wyjaśniają wzór." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Sprawdź obraz DOS przed przeczytaniem jego kodu" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"Sprawdzenie wiąże załadowany kod i rekordy relokacji z dostarczonym plikiem " +"wykonywalnym. Ścieżka powyżej jest skrócona do wyświetlania." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Przeczytaj mnożenie i dzielenie pierścienia" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} posiada indeks punktora. Przesunięcie mnoży go przez 256, a następnie " +"podział wykorzystuje liczbę odczytaną z {ph1}. Utrzymane nazwy źródłowe tego" +" pola {ph2}. Pełna sekwencja pojawia się poniżej." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Znajdź, gdzie wzór obraca się w kierunku gracza" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Operandy instrukcji ujawniają dwie różnice współrzędnych i pomocnika " +"kierunku. Jego wartość zwracana jest dodawana do względnego kąta " +"pierścienia. Nazwy źródeł sprawiają, że adresy te są czytelne; REA pozwala " +"agentowi sprawdzić oryginalne operacje za nimi." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Od zestawu do czytelnego C++" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Wybierz krok, aby dopasować oryginalne instrukcje do obliczenia kąta. To " +"podsumowanie podąża ścieżką ukierunkowanego pierścienia; pełne źródło " +"obsługuje również spready, stosy i losowe wzory." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Indeks" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Kosmos" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Aim" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Rotate" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Sklep" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * oryginalne 16-bitowe instrukcje" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Czytelne podsumowanie C++ · aimed-ring" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * przeczytaj indeks punktora.{ph1} Argument stosu jest ładowany do " +"{ph2}. W pierścieniu z 16 pociskami ten indeks członków biegnie od 0 do 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Rozmieść Kierunki wokół pełnego obrotu.{ph1} {ph2} mnoży się przez" +" 256. Liczba jest zerowa-rozszerzona na słowo, a następnie {ph3} dzieli " +"produkt przez tę liczbę. W przypadku liczby 16 każdy indeks przesuwa się o " +"16 jednostek kąta." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * Dodaj kierunek gracza.{ph1} Dwa odejmowania tworzą współrzędne " +"player-minus-origin. Pomocnik kierunku zwraca kąt w {ph2}; dodanie go obraca" +" cały pierścień w kierunku gracza." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * Dodaj obrót wzoru.{ph1} {ph2} dodaje kąt szablonu. Początkowy " +"szablon Elly ustawia go na zero; inne wzory mogą używać tego samego " +"pomocnika z obrotem." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Zachowaj ostateczny kąt w jednym bajcie.{ph1} Sklep pisze {ph2} do" +" pola kąta odrodzenia. Wartości zawijają się po 255, tak jak robi to " +"odlewanie bez znaku. Otaczające źródło również przekształca ten kąt i " +"prędkość w prędkość." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"Zespół wybiera gałąź pierścienia celowanego, obliczenie celu i końcowy " +"magazyn. Powyższy C++ jest czytelnym podsumowaniem. Poniższe kontrole " +"kompilatora dotyczą utrzymywanego źródła w połączonym projekcie." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Przeczytaj utrzymane źródło pierścienia i celu" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Makro pierścienia{ph1} · {ph2}Cel i źródło prędkości{ph3} · " +"{ph4}Reprezentacja kąta{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Sprawdzanie utrzymywanego źródła" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"Zarejestrowane kontrole projektu TH04 kompilują kod generowania pocisków, w " +"tym ten pomocnik, z przypiętym łańcuchem narzędzi Turbo C++ 4.0 J." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2139 pasujących bajtów" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Skompilowany kod generowania punktorów pasuje do 2139-bajtowej sekcji " +"oryginalnego pliku wykonywalnego." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Dwie czyste Kompilacje" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Dwie oddzielne Kompilacje dają te same pasujące bajty. Zapisane skróty " +"wejściowe odpowiadają wyświetlonemu tutaj utrzymywanemu źródłu." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Zarejestrowany 3 października 2026 roku. {ph0}Przeczytaj kontrole " +"kompilatora{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Tożsamość celu i zakres analizy" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Oryginalny cel" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156 258 bajtów, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Wpis pomocnika" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} w załadowanym obrazie REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Oryginalny plik offset" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, zwrócony przez {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Rejestrowana Kontrola kodu" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 października 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Kontrole kompilatora obejmują pełną sekcję bullet-add code, w tym tego " +"pomocnika. Porównują również wkład Mapy i nakładające się relokacje." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA zweryfikował statyczny obraz obciążenia DOS w segmencie obciążenia " +"{ph0}. Jego adresy opisują ten obraz analizy. Wynik funkcji zgłasza 503 " +"bajty treści w dwóch zakresach w zakresie 517 bajtów; wybrane instrukcje " +"powyżej znajdują się w tych zgłaszanych zakresach." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Nazwy źródeł i kontrole kompilatora pochodzą z punktu kontrolnego TH04 " +"{ph0}. Wcześniejsze obserwacje rekonstrukcji wykorzystywały własne skrypty " +"analityczne projektu; ta strona dodaje nową inspekcję REA tego samego " +"oryginalnego celu. Tożsamość dostarczonej gry jest przypięta przez manifest " +"repozytorium, a niezależne pochodzenie nieskazitelnego zrzutu jest nadal " +"otwarte." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"Rysunek ilustruje obliczenie kąta. Sterowanie pełną grą, czas i zachowanie " +"sprzętowe PC-98 mają oddzielne kontrole środowiska wykonawczego w projekcie " +"rekonstrukcji." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "Pełna rekonstrukcja TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Projekt buduje cztery produkty dos gry z utrzymanego C++ i assembly. Poza " +"generowaniem pocisków, źródło obejmuje etapy, bossów, renderowanie, " +"wprowadzanie, menu, zakończenia i obsługę punktów." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Poznaj repozytorium TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Źródło generowania pocisków{ph1}{ph2}Kompletny Pomocnik, inne typy " +"wzorów i strojenie szablonów.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}Dos build and run guide{ph1}{ph2}Zbuduj źródło i przetestuj je w " +"przepływie pracy emulatora PC-98 projektu.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Aktualny stan projektu{ph1}{ph2}Weryfikacja DOS i oddzielny natywny " +"port x64.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 inżynieria odwrotna: wzory pocisków dos-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Sprawdź oryginalny 16-bitowy kod dos TH04 za pomocą REA . Postępuj zgodnie z" +" montażem i odzyskanym C++, aby zobaczyć, jak pierścień pocisków jest " +"rozmieszczony i wycelowany w gracza." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "Na tej stronie" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04 bullet-pattern case study" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Skopiuj przykładowy monit TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 stałe i wycelowane pierścienie pocisku; przewijaj poziomo na mniejszych" +" ekranach" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Dwa schematy pierścienia z 16 kulami. Stały pierścień zaczyna się pod kątem " +"zerowym. Dodanie kierunku gracza 40 obraca się w każdym kierunku o tę samą " +"wartość; podświetlona pierwsza wypunktowanie wskazuje na gracza. Oba " +"zachowują odstęp 16 jednostek kąta lub 22,5 stopnia." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Kopiuj szablon TH04" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Postępuj zgodnie z obliczeniem pierścienia celowanego TH04" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Skopiuj fragment zespołu TH04" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Kopiuj czytelne wyliczenie pierścienia" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Do góry" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Kopiuj" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Skopiowano" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Wybrane" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Kod skopiowany do schowka." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Wybrany kod. Użyj klawiatury, aby ją skopiować." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA na GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Odległość {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Uderz w kaktusa. Spróbuj innej prędkości." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Przestrzeń lub skok ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Zagraj ponownie" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Graj" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Pauza" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Naciśnij przycisk Play, a następnie przeskoczyć kaktusa." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Uderz w kaktusa. Naciśnij ponownie Play lub zmień prędkość i uruchom " +"ponownie." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Biegam. Przestrzeń lub skok usuwa kaktusa." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Wstrzymane. Naciśnij Play, aby kontynuować." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Stała prędkość: {speed}. Przestrzeń lub skok usuwa kaktusa." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Stała prędkość: {speed}. Naciśnij Play, aby spróbować." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Odzyskana reguła: zacznij od 6, a następnie zwiększ w kierunku 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Stała prędkość: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Odtworzono odzyskaną regułę. Wszystkie cztery wartości odpowiadają " +"kontrolowanej kontroli oryginalnej gry po zaokrągleniu do trzech miejsc po " +"przecinku." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"Powtórka różni się od nagranych wartości oryginalnej gry. Porównaj regułę " +"prędkości i ustawienia powyżej." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} sekund" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} sekund, blok czasu {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Interaktywne obliczenia są niedostępne w tej przeglądarce. Przykład pokazuje" +" kod w 59 sekundach." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Sprawdzanie…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} kontrole przeszły (sześć przypadków referencyjnych, po " +"sześciu i ośmiu cyfrach)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "Nie można uruchomić kontroli referencyjnych. Spróbuj jeszcze raz." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Analityk myślący przy komputerze" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Jeden czek ujawnia jedną postać" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"Siódma Maska wybiera tylko pozycję 21 w siatce wejściowej sześć na sześć. " +"Jego kod znaku musi być równy 55, więc znak to 7. Pozostałe maski wybierają " +"różne pozycje i podają dalsze równania." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" +"Siódmy czek. Etykiety komórek są pozycjami wejściowymi, zaczynając od 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Zakodowana Maska: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Pomiń 21 komórek. Wybierz 1. Pomiń 14. Zatrzymaj się na 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "W sumie jest jedna komórka" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "Pozycja 21 na fladze musi zawierać 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Wybrane: jedna komórka" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 masek daje 26 równań." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Rozwiąż je razem, aby znaleźć flagę." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball sound-pan" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA zapewnia instrukcję, dzwoniącego i bajtów odczytu dowodów dla jednej " +"funkcji DX-Ball. Dane wejściowe stosu są mnożone przez 1,5625, przesuwane o " +"500, skalowane i konwertowane na liczbę całkowitą. Utrzymane C jest " +"sprawdzane w 3205 oryginalnych przypadkach-x86 i oddzielnej 63-bajtowej " +"powtórce kompilatora." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Stos" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "wejście x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "int" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "zwrot" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Odtworzona funkcja" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "Kod w C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Po trafieniu cegły" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Oryginał" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "porównanie" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3 205 testów" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Build VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 zgodne bajty" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Zadaj pytanie dotyczące lokalnego celu. REA sprawdza i śledzi za pomocą " +"lokalnych adapterów analitycznych, zwraca dowody i obsługuje pytania " +"uzupełniające, gdy agent wyjaśnia, wdraża i testuje." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Pytanie" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Agent + lokalny plik" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "Aplikacja / plik / Web" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Analiza i tropy" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Odczyt dowodów" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Kod / odwołania /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "niewiadome" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Zastosowanie" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Twój agent" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Wyjaśnij / zbuduj / testuj" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Narzędzia analizy" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Lokalne adaptery" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Kolejne pytanie" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: Rozstaw i celowanie w pierścień pocisków" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Pełny obrót zgodnie z ruchem wskazówek zegara ma 256 jednostek kąta. " +"Szesnaście pocisków zaczyna się pod kątem zero, szesnaście, trzydzieści dwa," +" przez 240. Dodanie przykładowego kierunku gracza o wartości czterdziestu " +"zamienia wszystkie szesnaście kierunków razem; pierwsze wypunktowanie " +"wskazuje na gracza. Obrót szablonu wynosi zero." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Naprawiono pierścień" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Pierwsza kula: kąt 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Skierowany pierścień" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Pierwsza kula: kierunek gracza" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Środek" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Gracz" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Ten sam odstęp: 256 ÷ 16 = 16 jednostek kąta = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Przykłady" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Pierwsze kroki" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Poradniki" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Kod źródłowy" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Licencja MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Dołącz do społeczności" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Obserwuj na X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * wybrane źródło skryptu" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Kod źródłowy" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Oczekiwany formatowanie wyjście" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Instrukcje" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Dzwoniący" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Stałe" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Funkcja C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Przycisk" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "Preload API" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "Plik CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Twoje kliknięcie" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Przechwycone żądanie" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Skrypt eksportu" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA wynik * podsumowanie.fragment ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA Instrukcja fragment * 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA fragment dzwoniącego * 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "Wyniki bajtów REA * interpretowane jako podwaja się little-endian" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Odzyskany fragment C ·" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Zobacz, jak działa REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Instrukcja instalacji" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Gabloty →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Wybrane ustawienia z kontrolowanego skryptu" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Czytelne podsumowanie % obsługi" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * wybrane oryginalne instrukcje" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "Identyfikatory operatora * Źródło Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "@ Reatools na X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → agent * wybrane wyniki" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → agent * metody i rozmówcy" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * wybrana zdekompilowana Java" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Czytelne podsumowanie * interpretacja agenta" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP, kompletne ciało" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Pobierz Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Pobierz Android analysis provider" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → agent * wybrane wyniki" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → agent * wybrane instrukcje" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Agent → REA * read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → agent * siódme wpisy" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Oryginalny plik wykonywalny * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Pobierz oryginalne wyzwanie" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Pobierz solver" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "Wynik REA * fragment pseudokodu" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agent → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → agent * fragment instrukcji" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → agent * fragment dzwoniącego" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Agent → REA * dwa {ph0} wnioski" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "Wyniki bajtów REA * dekodowane jako podwójne" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Zacznij od własnego celu" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Generowanie kodu" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Odzyskana reguła" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Regulowany zegar" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Binarny" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Sprawdzanie kodu" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Równania" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Zgadza się!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Plik wykonywalny" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Odzyskane C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Walidacja" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Pakowana aplikacja" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "Exposed API" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "Owijarki IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Schowek" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Oryginalny kod DOS" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA instrukcje" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Obliczanie kąta" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Bullet ring" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "Exposed page API" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Renderer IPC call" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Wysłane do schowka systemowego" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Zapisane lokalnie przez Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Wejście Markdown" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Ustrukturyzowane wyjście parsera * fragment" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Analizuj własną aplikację" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Agent → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → agent * wybrane pola" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agent → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → agent * fragment instrukcji" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Ta sama funkcja wynik * aim fragment" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "Odpowiadający utrzymywany C++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Pierścień makro * TH04 oddział, fragment" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Kąt i prędkość * fragment źródła" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Naciśnij %, aby zobaczyć, co dzieje się z 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% z 200 to 20. Naciśnij =, aby go dodać." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "W przypadku mnożenia 10 staje się 0,1. Naciśnij =, aby pomnożyć." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"Tłumaczenie jest aktualizowane. Przeczytaj na razie tę stronę w języku " +"angielskim." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA do analizy {ph3} i wyjaśnij, w jaki sposób " +"eksportuje dane. Pokaż odpowiedni kod i lokalizacje źródłowe.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Zainstaluj REA i połącz je z tym agentem programistycznym za" +" pomocą {ph3}. Najpierw pokaż plan zmian i poczekaj na moją zgodę. Potem " +"sprawdź instalację.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}Pobierz {ph3} do nowego przykładowego folderu i rozpakuj go." +" Użyj REA, aby dowiedzieć się, co się stanie, gdy kliknę Eksportuj notatki. " +"Pokaż gdzie {ph4} jest napisane, które pola zawiera, oraz odpowiednie pliki " +"i wiersze.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Zainstaluj REA i połącz je z tym agentem programistycznym za" +" pomocą {ph3}. Najpierw pokaż plan zmian i poczekaj na moją zgodę. Potem " +"sprawdź instalację.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Zainstaluj REA i połącz je z tym agentem programistycznym za" +" pomocą {ph3}. Najpierw pokaż plan zmian i poczekaj na moją zgodę. Potem " +"sprawdź instalację.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Użyj REA do sprawdzenia {ph3}. Sklonuj dla mnie tę " +"stronę.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Rekonstrukcja * {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"Gdy dostępne są {ph0} i npm, Uruchom setup, wybierz agenta kodowania i " +"przejrzyj proponowane zmiany." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Dostarczony przykład * {ph0} i npm * Twój agent kodujący" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Użyj agenta kodującego, takiego jak Claude Code, Codex lub Cursor. Będziesz " +"potrzebować {ph0} oraz npm; the {ph1}Przewodnik konfiguracji zawiera listę " +"obsługiwanych wersji{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Strona * {ph1}{ph2}{ph3}Eksportuj notatki{ph4}{ph5}Połączenia " +"{ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Most · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Wysyła nazwaną wiadomość do " +"głównego procesu.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Handler · {ph1}{ph2}{ph3}Pisz {ph4}{ph5}{ph6}Wywołuje formatowanie w " +"{ph7} i zapisuje plik.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * linie 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Przewidzieć CSV dla notatki z id 1 i tytuł {ph3}. Następnie " +"uruchom przykład {ph4} formatowanie z {ph5} żeby to sprawdzić. Pokaż " +"prognozę i rzeczywistą wydajność.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Tytuł pozostaje w jednym cytowanym polu; każdy cudzysłów jest podwojony. To " +"sprawdza formatowanie bezpośrednio za pomocą {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV formatowanie" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Będziesz potrzebować {ph0} 22 (22.19+), 24 (24.11+) lub 26+. npm pochodzi z" +" {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "Nie masz {ph0}, czy nie jesteś pewien?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Jeśli {ph0} drukuje v22.19+, v24.11+ lub v26+, jesteś gotowy. Jeśli " +"wydrukuje starszą wersję lub \"nie rozpoznano\" / \"nie znaleziono " +"polecenia\", zainstaluj {ph1} 24 LTS:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * przykładowy fragment źródła" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Otwórz przykład{ph1} · {ph2}Pobierz {ph3}{ph4} · {ph5}Pobierz " +"{ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * przykładowe źródło" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Pobierz przykład i rozpakuj go. Archiwum zawiera kompletne {ph0} folder. " +"Przeanalizuj to za pomocą {ph1} oraz npm; Electron nie jest potrzebny w tym " +"przykładzie." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Pierwszy raz lub zaginiony {ph0} a może Agent kodujący? {ph1}Postępuj " +"zgodnie z instrukcją konfiguracji krok po kroku →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "Na przykład: {ph0}dlaczego kalkulator zwraca 220 dla {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Użycie REA aby sprawdzić Windows Kalkulator. Dlaczego {ph3} " +"daje 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * załadowany {ph0} * wybrane linie" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Widzieliśmy dlaczego {ph0}{ph1} daje 220.{ph2} Teraz odzyskajmy reguły " +"zarówno dla+, jak i × i wypróbuj je." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA czyta {ph1}{ph2}{ph3}Uruchamia aplikację " +"Kalkulator{ph4}{ph5}Kod otwiera się {ph6}. Następnie agent wybiera " +"bibliotekę zainstalowanej aplikacji.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Użycie REA aby sprawdzić aegis-v3.4. {ph3}. Dowiedz się, jak" +" generuje sześciocyfrowy kod logowania, wyjaśnij, dlaczego zmienia się co 30" +" sekund i odbuduj małe demo, w którym mogę zmienić czas.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view / {ph0} * członek API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view / {ph0} * IPC helper" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "główna/{ph0} * Pomocnik obsługi" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "główna/{ph0} * odbiornik schowka" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Rekonstrukcja * dino-speed.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Gdy dostępne są Node.js i npm, Uruchom setup, wybierz agenta kodowania i " +#~ "przejrzyj proponowane zmiany." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Dostarczony przykład * Node.js i npm * Twój agent kodujący" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Użyj agenta kodującego, takiego jak Claude Code, Codex lub Cursor. Będziesz " +#~ "potrzebować Node.js oraz npm; the {ph0}Przewodnik konfiguracji zawiera listę" +#~ " obsługiwanych wersji{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Strona * renderer.js{ph1}{ph2}Eksportuj notatki{ph3}{ph4}Połączenia " +#~ "{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Mostek * napięcie wstępne.js{ph1}{ph2}{ph3}{ph4}{ph5}Wysyła nazwaną " +#~ "wiadomość do głównego procesu.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Handler * główny.js{ph1}{ph2}Napisz notatki.csv{ph3}{ph4}Wywołuje " +#~ "formatowanie w {ph5} i zapisuje plik.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Przewidzieć CSV dla notatki z id 1 i tytuł cześć, \"REA\". " +#~ "Następnie uruchom przykładowy formatter toCsv z Node.js żeby to sprawdzić. " +#~ "Pokaż prognozę i rzeczywistą wydajność.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Tytuł pozostaje w jednym cytowanym polu; każdy cudzysłów jest podwojony. To " +#~ "sprawdza formatowanie bezpośrednio za pomocą Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV formatowanie" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Będziesz potrzebować Node.js 22 (22.19+), 24 (24.11+) lub 26+. npm pochodzi " +#~ "z Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "Nie masz Node.js, czy nie jesteś pewien?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Jeśli {ph0} drukuje v22.19+, v24.11+ lub v26+, jesteś gotowy. Jeśli " +#~ "wydrukuje starszą wersję lub \"nie rozpoznano\" / \"nie znaleziono " +#~ "polecenia\", zainstaluj Node.js 24 LTS:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Otwórz przykład{ph1} · {ph2}Pobierz eksport.js{ph3} · {ph4}Pobierz " +#~ "notatki.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Pobierz przykład i rozpakuj go. Archiwum zawiera kompletne {ph0} folder. " +#~ "Przeanalizuj to za pomocą Node.js oraz npm; Electron nie jest potrzebny w " +#~ "tym przykładzie." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Pierwszy raz lub zaginiony Node.js a może Agent kodujący? {ph0}Postępuj " +#~ "zgodnie z instrukcją konfiguracji krok po kroku →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "Na przykład: {ph0}dlaczego kalkulator zwraca 220 dla 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Użycie REA aby sprawdzić Windows Kalkulator. Dlaczego 200 + " +#~ "10% daje 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Widzieliśmy dlaczego {ph0}200 + 10% daje 220.{ph1} Teraz odzyskajmy reguły " +#~ "zarówno dla+, jak i × i wypróbuj je." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA czyta calc.exe{ph1}{ph2}Uruchamia aplikację " +#~ "Kalkulator{ph3}{ph4}Kod otwiera się {ph5}. Następnie agent wybiera " +#~ "bibliotekę zainstalowanej aplikacji.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Użycie REA aby sprawdzić aegis-v3.4. 3.apk. Dowiedz się, jak" +#~ " generuje sześciocyfrowy kod logowania, wyjaśnij, dlaczego zmienia się co 30" +#~ " sekund i odbuduj małe demo, w którym mogę zmienić czas.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view / preload.js * członek API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view / preload.js * IPC helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "główny / indeks.js * Pomocnik obsługi" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "główny / indeks.js * odbiornik schowka" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "główny.js * linie 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "eksport.js * przykładowy fragment źródłowy" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "renderer.js * przykładowe źródło" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "napięcie wstępne.js * przykładowe źródło" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "główny.js * przykładowe źródło" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA · załadowany indeks.js * wybrane linie" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Użycie REA aby przeanalizować / absolute/path/to / app i " +#~ "wyjaśnić, w jaki sposób eksportuje dane. Pokaż odpowiedni kod i lokalizacje " +#~ "źródłowe.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Zainstalować REA i podłącz go do tego agenta kodującego za " +#~ "pomocą npx Rea-agenci @ najnowsza konfiguracja. Pokaż mi plan konfiguracji " +#~ "do zatwierdzenia, a następnie sprawdź instalację.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Pobierz https://rea.tools/examples/notes-example.zip do " +#~ "nowego przykładowego folderu i rozpakuj go. Użycie REA aby dowiedzieć się, " +#~ "co się stanie, gdy kliknę Eksportuj notatki. Pokaż, gdzie notatki.zapisywany" +#~ " jest csv, które pola zawiera oraz odpowiednie pliki i " +#~ "wiersze.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Zainstalować REA i podłącz go do tego agenta kodującego za " +#~ "pomocą npx Rea-agenci @ najnowsza konfiguracja. Pokaż mi plan konfiguracji " +#~ "do zatwierdzenia, a następnie sprawdź instalację.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Zainstalować REA i podłącz go do tego agenta kodującego za " +#~ "pomocą npx Rea-agenci @ najnowsza konfiguracja. Pokaż mi plan konfiguracji " +#~ "do zatwierdzenia, a następnie sprawdź instalację.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Użycie REA aby sprawdzić https://rea.tools/. Sklonuj dla " +#~ "mnie tę stronę.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "kod[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× pan_scale" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}Inżynieria Wsteczna cokolwiek{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/pt-BR/messages.po b/website/locales/pt-BR/messages.po new file mode 100644 index 000000000..c3c91ca39 --- /dev/null +++ b/website/locales/pt-BR/messages.po @@ -0,0 +1,13448 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: pt-BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Casa{ph1} / Blog" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blog." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Reflexões sobre engenharia reversa." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Reconstrução do jogo{ph0}Ensaio" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "A Revolução industrial na engenharia reversa" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"O manual RE e reconstrução TH08, TH095 e TH04 me ensinou sobre agentes, " +"verificação e conhecimento que compostos entre projetos." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Leia o artigo" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Por N0zoM1z0 * 10 de outubro de 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Top" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA Blog-reflexões sobre engenharia reversa" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Reflexões sobre engenharia reversa, com base na experiência prática com " +"agentes REA e AI." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-descubra como o software funciona. Engenharia reversa com seu agente de " +"codificação." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Página inicial do REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Navegação principal" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA no GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Participe do Discord do REA" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Siga o REA no X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Casa{ph1} / {ph2}Blogue{ph3} / Reconstrução de Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Ensaio * reconstrução de Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "A Revolução industrial na engenharia reversa." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Por N0zoM1z0 * 10 de outubro de 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Pontos principais" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Dar aos agentes autonomia sobre a investigação.{ph1} Defina uma meta " +"clara e critérios de aceitação e, em seguida, deixe o agente decidir o que " +"tentar a seguir." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Use o repositório e o Git como memória de trabalho.{ph1} Mantenha o " +"raciocínio com o código. Os pontos de verificação do Git permitem que a " +"próxima sessão continue após o término da conversa." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Deixe a evidência decidir o que você afirma.{ph1} Uma explicação " +"confiante ainda precisa ser testada. \"Desconhecido\" é uma resposta válida " +"quando as provas estão incompletas." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Teste também a referência de verificação (oracle).{ph1} Tente casos que" +" deve rejeitar. Se perder um bug, revise os resultados anteriores que " +"dependiam dele." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Estamos nos primeiros dias da Revolução industrial da RE.{ph1} Os " +"métodos continuam a tomar forma. Ainda há muito para explorar." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Como experiência compostos" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Direcção humana{ph1} * Objectivo e critérios de aceitação" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Autonomia" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Agente" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Escolha uma experiência.{ph0}Propor uma hipótese." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Verificação" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Referência de validação" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Ensaio contra a{ph0}referência concreta." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Repositório" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Memória de trabalho" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Código, elementos de prova,{ph0}verificações e lições." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Incompatibilidade{ph0}{ph1}Rever a hipótese{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Um melhor{ph0}{ph1}ponto de partida{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Reutilização" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Passe{ph1} * Conservar o resultado e as suas provas" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Cada projecto deixa o próximo com um melhor ponto de partida. Isso inclui a " +"fixação dos controlos quando descobrimos uma lacuna." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "Neste artigo" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Agosto 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08: a continuação{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Duas abordagens{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095: composição{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: entre arquiteturas{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}Do exato ao legível{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}A mudança industrial{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}O que se torna possível{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "O que mudou em agosto de 2026" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Antes deste trabalho, eu tinha feito muita engenharia reversa manual. Eu " +"inspecionaria uma função até ter uma explicação e, em seguida, testaria essa" +" explicação em relação ao programa. Ir mais longe significava gastar mais do" +" meu próprio tempo na próxima função. Também significava manter uma imagem " +"cada vez maior na minha cabeça." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"A maior parte do meu trabalho é sobre jogos. Eu os reconstruo para que seu " +"comportamento possa ser entendido e eventualmente transportado para uma " +"porta de software ou um mod. Esta é a experiência por detrás deste artigo. O" +" método pode ser útil em outros lugares, mas cada campo precisa estabelecer " +"o que pode verificar em relação a uma referência confiável." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"Em agosto de 2026, comecei a explorar seriamente a RE orientada por agentes." +" Eu queria ver até onde um agente poderia chegar com acesso ao programa e às" +" ferramentas de desenvolvimento comuns. A reconstrução de Touhou deu-me um " +"projecto substancial para descobrir." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Os primeiros progressos foram surpreendentes. Uma investigação poderia " +"continuar sem que eu escolhesse cada passo individual. Uma comparação com " +"falha pode enviar o agente para outro chamador. Poderia escrever um pequeno " +"diagnóstico e usar o resultado para decidir o que tentar a seguir. Dar-lhe " +"essa liberdade fez a diferença: eu poderia dedicar mais atenção à direcção " +"do projecto e à fiabilidade dos seus controlos." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"O ritmo chamou minha atenção primeiro. Então comecei a me perguntar o que " +"sobreviveria além do projeto atual. O próximo jogo beneficiaria de tudo o " +"que acabámos de aprender?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: baseando-se no trabalho humano" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08 {ph1}, Noite imperecível, começou como uma continuação de {ph2} " +"Reconstrução de GensokyoClub{ph3}. A sua fonte pública deu-me uma base " +"substancial. Veio com o conhecimento da construção e uma história de " +"contribuições que preservei na continuação." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"A história importada termina no posto de controlo público de 10 de agosto. A" +" minha continuação independente teve início em 13 de agosto. Em 19 de " +"agosto, o livro-razão registou a fonte para todas as 1.107 funções do jogo " +"identificadas." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Um porto de reconstrução Linux jogável foi confirmado em 24 de agosto, cerca" +" de onze dias após o início da continuação. Seguiu-se uma edição Web. A " +"versão nativa Linux de 64 bits chegou em 30 de agosto." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"O que me impressionou foi que o trabalho tinha chegado a um programa que as " +"pessoas podiam executar. Para chegar lá, é necessário seguir problemas além " +"de uma função individual. Mesmo quando duas funções pareciam corretas " +"isoladamente, elas poderiam acidentalmente usar cópias separadas de Estado " +"que deveriam ter sido compartilhadas." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Isso tornou os controlos de referência centrais para o trabalho. Eu chamo-" +"lhes {ph0}referências de verificação (oráculos){ph1}. Uma comparação de " +"códigos pode dizer-nos se uma função reconstruída reproduz as instruções " +"originais. Uma verificação de tempo de execução pode nos dizer se uma rota " +"exercida atinge o estado esperado. O agente propõe uma explicação e testa - " +"a; uma incompatibilidade dá-lhe algo específico para investigar." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Uma correspondência exata com a constante errada" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Uma referência de verificação (oracle) é um software que alguém escreveu. " +"TH08 me deu um lembrete claro de quanto pode depender desse software." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"Em setembro, um bug relatado por uma porta de Switch downstream levou de " +"volta à coleta automática de itens. A fonte reconstruída verificou o poder " +"do jogador contra {ph0}. O original utilizado {ph1}, o limiar de potência " +"máxima." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"A potência Normal não é negativa, pelo que a verificação da potência " +"reconstruída foi efectivamente sempre satisfeita. Acima da linha de coleta, " +"o jogo poderia atrair itens sem exigir potência máxima. As outras excepções " +"na condição estavam correctas. Esta constante mudou o comportamento." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}No entanto, a função já havia passado na comparação exata.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Uma reconstrução pode colocar uma constante em um endereço diferente. A " +"ferramenta de comparação explicou isso ajustando os endereços nas instruções" +" compiladas antes de compará-los com o original. Mas nunca verificou o valor" +" de ponto flutuante armazenado no endereço referenciado." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Isso deixou um buraco no cheque. Poderia apontar a instrução reconstruída " +"para o original {ph0} enquanto a fonte ainda disse {ph1}. Os bytes de " +"instrução corresponderam. A fonte significava algo diferente." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"O {ph0}Correção de 2 de setembro{ph1} corrigiu a fonte e fez a comparação " +"verificar os bytes reais da constante referenciada. A {ph2}auditoria mais " +"alargada{ph3} em seguida, examinou 1.548 referências constantes de ponto " +"flutuante. Encontrou outras doze referências incorrectas em cinco funções " +"aceites." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"A comparação verifica agora cada uma dessas constantes de ponto flutuante. " +"Os seus testes incluem valores deliberadamente errados para garantir que são" +" rejeitados. Tivemos também de rever os resultados que tinham passado pelo " +"controlo mais fraco." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}A referência de verificação (oráculo) também precisava de ser " +"reconstruída.{ph1} Repará-lo fazia parte da reparação do jogo." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Isso importa quando a equipa é essencialmente uma pessoa que trabalha com " +"agentes. Não posso inspeccionar pessoalmente todas as linhas que produzem, " +"pelo que muito da minha confiança depende dos seus controlos. O ponto cego " +"de uma referência de verificação partilhada (oracle) pode afectar muitas " +"investigações antes que eu perceba. Eu tenho que entender o que o " +"verificador realmente verifica e testá-lo contra casos que deveriam falhar." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"À medida que os trabalhos prosseguiam, esses controlos passaram a fazer " +"parte do repositório. O mesmo aconteceu com as razões das alterações da " +"fonte e das notas que permitiram que uma sessão posterior continuasse onde " +"uma sessão anterior parou. {ph0}O repositório de código-fonte estava a " +"tornar-se a memória de trabalho do projecto.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Um lote bem sucedido proporcionou-nos tanto o código recuperado como um" +" ambiente melhor para o próximo lote.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Duas ideias diferentes de reconstrução" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"De GensokyoClub {ph0}README público{ph1} explicita o seu desacordo com este " +"tipo de trabalho. O aviso anuncia que o desenvolvimento adicional ocorrerá " +"em particular até a conclusão. Uma passagem diz:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"A ascensão de vigaristas (decompilações e portos de IA) neste espaço, " +"tirando do nosso trabalho, pinta uma imagem ruim para futuros esforços de " +"descompilação…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"O aviso também descreve o impacto psicológico dos mantenedores. A sua " +"política de contribuição exclui os pull requests produzidos principalmente " +"com IA. Dedicaram o seu tempo livre a um trabalho difícil, e esse trabalho " +"ajudou a tornar possível a minha continuação. Respeito o esforço por trás " +"disso. O desacordo que quero discutir é sobre como a reconstrução deve " +"prosseguir e como uma contribuição deve ser julgada." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"No fluxo de trabalho manual que eu conhecia, desenvolver uma compreensão de " +"uma função e reconstruí-la geralmente cabia à mesma pessoa. Um projecto " +"baseou-se fortemente na experiência dessa pessoa. A confiança no colaborador" +" importava porque grande parte do raciocínio acontecia enquanto eles " +"trabalhavam." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Os projectos existentes já preservam o conhecimento na sua fonte e criam " +"ferramentas. O que mudou para mim foi que um agente poderia usar esse " +"conhecimento para prosseguir a próxima investigação por conta própria." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"Na minha continuação, decido o objectivo e a norma para aceitar um " +"resultado. O agente tem ampla liberdade para investigar. A sua reconstrução " +"proposta tem então de sobreviver aos controlos pertinentes. Quero que outra " +"pessoa possa examinar a razão pela qual escolhemos uma implementação, mesmo " +"que um agente tenha feito a maior parte do trabalho." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Esta pode ser uma transição difícil. Anos de trabalho cuidadoso podem " +"tornar-se a base para uma continuação que se move muito mais rapidamente. " +"Isso levanta questões reais sobre o crédito. Também altera o que os " +"mantenedores precisam saber antes de aceitar uma contribuição." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"A analogia industrial ajuda-me a pensar nisso. Em um ofício, grande parte do" +" processo depende da habilidade da pessoa que o realiza. O maquinário muda " +"quando essa habilidade é necessária. Alguém ainda tem que projetar o " +"processo e reconhecer quando sua saída está errada. Diferentes comunidades " +"podem escolher quanto dessa mudança querem assumir." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"A minha escolha é continuar abertamente, com a obra herdada creditada e a " +"sua história preservada. Quero que o novo trabalho seja passível de revisão." +" Isso dá-nos uma forma de perguntar até que ponto esta abordagem pode ir e " +"de aprender com o que corre mal ao longo do caminho." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Fonte: de GensokyoClub {ph0}Aviso README{ph1}, verificados em 10 de outubro " +"de 2026, e {ph2}Política de contribuição{ph3}. A citação é um trecho " +"abreviado. De TH08 {ph4}créditos e proveniência{ph5} registre o limite de " +"continuação." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: a experiência começa a compor" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095 {ph1}, Atire a bala, tornou o valor dessa experiência muito mais" +" fácil de ver. Seu repositório começou em 29 de Agosto com zero funções de " +"jogo confirmadas no livro-razão. Ainda tínhamos de aprender o jogo. Mas já " +"sabíamos muito mais sobre como iniciar uma reconstrução e como mantê-la em " +"movimento." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"Até 7 de setembro, todas as 697 funções do jogo identificadas tinham origem." +" Em 8 de setembro, 696 tinham sido aceites como comparações exactas. Todo o " +"programa teve ligação em 9 de setembro. A reconstrução Windows i386 foi " +"marcada como jogável em 10 de setembro, cerca de doze dias após a " +"inicialização." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Achei isso mais emocionante do que a velocidade do primeiro projeto. Um novo" +" alvo poderia beneficiar do trabalho realizado noutro jogo. A experiência já" +" estava presente nas Ferramentas e na forma como o projecto foi organizado." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Por exemplo, TH08 nos ensinou a prestar atenção ao programa montado cedo. Se" +" várias funções recuperadas dependem do mesmo estado, as suas comparações " +"isoladas deixam uma questão importante em aberto. Temos de vê-los a " +"trabalhar em conjunto. Essa lição ajudou a moldar a forma como abordamos a " +"construção de todo o programa do TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Uma lição que fica na minha cabeça é útil enquanto lá estou. Uma vez que se " +"torne uma verificação de que outra sessão pode ser executada, ela pode " +"continuar ajudando depois que eu seguir em frente. O próximo agente pode " +"utilizar o resultado sem repetir a investigação que o conduziu." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"O bug constante de ponto flutuante também pertence a essa memória. Explica " +"por que a verificação de uma referência também exige a verificação dos dados" +" subjacentes. Manter essa correção com o código ajuda os projetos " +"posteriores a evitar herdar o ponto cego do cheque antigo." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}O método passa a fazer parte do material de partida para o próximo " +"jogo.{ph1} Podemos gastar mais do esforço do próximo projecto naquilo que é " +"realmente novo sobre o seu objectivo." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"O mesmo benefício está disponível para as pessoas que se juntam mais tarde. " +"Eles podem inspecionar uma decisão e reexecutar sua verificação antes de " +"continuar o trabalho. Não têm de reconstruir toda a história do projecto " +"para descobrir porque é que a fonte se parece com ela." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: o fluxo de trabalho sobrevive a uma arquitetura diferente" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04 {ph1}, Lotus Land Story, levou este trabalho para a era PC-98 " +"dos. O alvo era agora um ambiente de 16 bits com quatro programas " +"cooperantes. Compreender o seu comportamento de hardware exigiu provas " +"diferentes dos jogos Windows. Existente {ph2}Trabalho ReC98{ph3} deu-nos " +"também aqui conhecimentos valiosos e material de origem." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"A reconstrução do DOS está agora a funcionar. Em meus testes manuais, joguei" +" rotas normais completas através de seus finais e verifiquei as defesas. O " +"trabalho atual é uma porta nativa de 64 bits. O estabelecimento de uma " +"versão DOS funcional dá, em primeiro lugar, a essa porta uma referência." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"A arquitectura mudou o que precisávamos de investigar. Também mudou o " +"compilador e o tempo de execução em relação aos quais verificamos nosso " +"trabalho. Mas o agente ainda pode seguir uma pergunta até um resultado e " +"deixar que esse resultado guie a próxima experiência." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Considere a transição da jogabilidade para um final. Precisamos de saber que" +" estado atravessa essa fronteira e que programa é responsável por ela. Isso " +"é algo que podemos investigar contra o produto DOS. Uma vez que as provas e " +"os controlos estejam disponíveis, um agente pode resolver a questão da mesma" +" forma que fez com um título Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"É por isso que TH04 é importante para o argumento. Uma mudança substancial " +"da plataforma não nos obrigou a recomeçar com uma nova forma de trabalhar. A" +" arquitetura definiu o problema; o fluxo de trabalho ainda nos deu uma " +"maneira de resolvê-lo." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Para a porta de 64 bits, podemos agora examinar a nova implementação contra " +"o comportamento já recuperado no DOS. O conhecimento da reconstrução dá ao " +"porto algo em que se basear." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Estado do projecto em 10 de outubro de 2026: {ph0}Reconstrução DOS E ensaios" +" manuais{ph1} · {ph2}Porta de 64 bits{ph3}. O porto continua em " +"desenvolvimento." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Do código exato ao código legível" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Uma vez que uma reconstrução funcione, quero que outra pessoa possa " +"compreendê-la." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Para mim, a montagem e as compensações brutas podem parecer velhos amigos. " +"Sei que esta é uma definição ligeiramente invulgar de \" legível.\"A maioria" +" das pessoas prefere seguir a lógica do jogo sem manter o layout da memória " +"do executável na cabeça." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"É aí que {ph0}reconstrução semântica{ph1} entra. Um campo recuperado pode " +"ainda ser conhecido principalmente pela sua compensação. Seguimos a forma " +"como o jogo o utiliza até podermos explicar o seu papel. Então podemos dar -" +" lhe um nome significativo e um tipo que se encaixa na evidência. Mantemos o" +" raciocínio com a fonte para que a próxima pessoa possa ver de onde veio " +"essa interpretação." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Isso se torna especialmente importante para uma porta de software. Um " +"endereço absoluto me diz onde algo vivia no antigo executável. Dá uma " +"implementação de 64 bits pouca ajuda para decidir qual objeto deve possuir " +"esse estado. Para mover o comportamento com segurança, precisamos recuperar " +"a relação por trás do antigo acesso à memória." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "A ordem que eu uso agora é:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Recuperar uma linha de base exacta.{ph1} Compile as peças reconstruídas" +" com o compilador histórico. Compare o código e os dados relevantes com o " +"executável original. Registe diferenças não resolvidas para que a próxima " +"fase tenha um ponto de partida claro." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Construa e jogue na plataforma original.{ph1} Vincule essas peças ao " +"programa real usando a arquitetura e o compilador originais. Exercite " +"caminhos de jogo importantes. É aqui que podemos encontrar problemas com o " +"estado compartilhado ou inicialização que uma comparação de função isolada " +"perdeu." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Reconstruir a semântica contra ambas as referências.{ph1} Tome uma " +"parte coerente do jogo de cada vez e estabeleça o que significa a sua fonte " +"recuperada. Melhorar a sua representação, preservando as comparações exatas " +"e a construção histórica jogável." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Faça o porto moderno.{ph1} Mova o comportamento estabelecido para o " +"novo ambiente, como uma compilação nativa de 64 bits. O jogo de plataforma " +"original reconstruído continua a ser uma referência para comparar o " +"comportamento do Porto." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"A construção jogável do segundo estágio torna-se um {ph0}segunda referência " +"de verificação (oracle){ph1} durante o terceiro. A primeira referência de " +"verificação (oracle) verifica se a nossa fonte alterada ainda reproduz o " +"código e os dados originais relevantes. A segunda verifica se o programa " +"reconstruído continua a construir e a comportar-se correctamente ao longo " +"dos caminhos que exercemos." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Eles pegam erros diferentes. Uma alteração de tipo pode alterar as " +"instruções geradas. Uma mudança de propriedade pode deixar duas partes do " +"jogo usando cópias diferentes do estado. Manter ambas as verificações " +"disponíveis dá ao Agente uma falha concreta em investigar antes de levar " +"mais longe um refatorador." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Um nome precisa de provas próprias. Uma comparação exacta não nos pode dizer" +" se um campo significa realmente \"tempo de invulnerabilidade\".\"Temos que " +"estabelecer isso a partir de como o jogo escreve e usa. Se o significado " +"permanece incerto, um nome neutro é mais útil para o próximo leitor do que " +"um palpite confiante." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Aprendemos esta ordem através dos projectos. TH08 já tinha portas jogáveis " +"antes de algumas de suas auditorias posteriores de plataforma histórica. " +"Isso tornava certos defeitos mais difíceis de ver. O {ph0}Fluxo de trabalho " +"atual da fábrica{ph1} coloca a construção da plataforma original em primeiro" +" lugar, para que o trabalho semântico possa usá-la como referência antes do " +"início da portabilidade." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}A reconstrução exacta dá-nos uma referência. A reconstrução semântica " +"torna utilizável o conhecimento recuperado.{ph1} Um porto pode então basear-" +"se em ambos." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "O que torna esta mudança industrial" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Estes projectos mudaram onde dediquei a minha atenção. Uma vez que os " +"agentes puderam levar muito adiante uma investigação, melhorar o seu " +"ambiente de trabalho tornou-se uma das coisas mais úteis que eu poderia " +"fazer. Uma ferramenta melhor poderia ajudar em todas as funções posteriores " +"que dela necessitassem." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"A autonomia importa aqui. O próximo passo útil torna-se frequentemente claro" +" apenas após uma experiência fracassada. Um agente precisa de liberdade " +"suficiente para seguir esse resultado em algum lugar inesperado. Se tiver de" +" esperar que eu prescreva cada passo, grande parte do trabalho continua " +"ligada à minha atenção." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Espero que o agente faça hipóteses erradas. O que importa é saber se podemos" +" testá-los e aprender com o resultado. Uma verificação com falha deve ajudá-" +"lo a entender o erro o suficiente para tentar novamente. Ainda tenho de " +"decidir se as provas acumuladas apoiam um marco do projecto." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA dá ao agente acesso às ferramentas de análise. Uma pergunta sobre o " +"chamador de uma função pode levar diretamente à inspeção desse chamador. O " +"projecto de reconstrução fornece o compilador e as suas próprias " +"verificações de referência. O agente pode usá-los para testar a fonte que " +"propõe e ver onde está a sua explicação." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"O bug TH08 mostra por que essas verificações merecem atenção própria de " +"engenharia. Quando a mesma comparação é usada em centenas de funções, uma " +"lacuna na TI pode se espalhar muito mais do que um erro em uma " +"implementação. Testar o verificador melhora o feedback disponível para todos" +" os trabalhos posteriores." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"A analogia industrial tem aqui um exemplo histórico útil. Boulton e Watt " +"introduziram um {ph0}indicador do motor a vapor em 1796{ph1} para ajudar a " +"ajustar as válvulas do motor. Uma versão de gravação rastreou a pressão " +"através do curso do pistão. Disponibilizou o comportamento interno do motor " +"para inspecção. As nossas ferramentas de comparação têm um propósito " +"semelhante: permitem-nos examinar o que a máquina está a fazer enquanto a " +"melhoramos." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Estamos na fase inicial desta mudança industrial.{ph1} Grande parte da " +"infra-estrutura ainda é imatura. Os agentes podem mover-se mais rapidamente " +"do que os nossos controlos foram concebidos para suportar, pelo que o " +"processo tem de se desenvolver paralelamente a eles. Quando encontramos um " +"defeito numa ferramenta partilhada, temos de O reparar e rever os resultados" +" que afectou. O próximo projecto pode então herdar uma ferramenta mais " +"forte." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Há também um limite prático para qualquer conversa. Terminará antes de " +"terminar uma grande reconstrução. O repositório de código-fonte tem de " +"possibilitar a continuação de outra sessão sem perder o motivo da última " +"decisão." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"O {ph0}Fábrica De Reconstrução De Touhou{ph1} surgiu dessa necessidade. Dá " +"aos projectos uma forma partilhada de levar adiante os seus controlos e " +"lições. Trabalhar num jogo pode melhorar as condições de partida para outro." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"É isso que me torna significativa a analogia industrial. A experiência " +"começa a tornar-se parte de ferramentas que outros podem utilizar. Melhorar " +"essas ferramentas muda o quanto a próxima pessoa—ou o próximo agente—pode " +"fazer." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Os projectos que podemos agora considerar" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"O ritmo é importante porque muda a decisão de começar. Um jogo pode ser " +"fascinante para fazer engenharia reversa e ainda exigir mais da minha " +"própria atenção do que eu poderia realisticamente dar. Muitos projectos " +"continuariam a ser ideias." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Agora posso ver uma forma de manter um projecto deste tipo a decorrer " +"através de investigações repetidas. Conseguir uma reconstrução funcional " +"torna uma porta de software mais prática. Recuperar semântica legível torna " +"mais fácil para outra pessoa explorar um mod. O esforço colocado na " +"compreensão do jogo pode continuar valendo a pena após a primeira versão ser" +" executada." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Agora olho para um programa desconhecido e pergunto: {ph0}que Acesso, " +"feedback e conhecimento acumulado permitiriam que um agente trabalhasse de " +"forma fiável?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Esta pergunta Leva-me a considerar projectos que anteriormente teria deixado" +" em paz. Cada um pode melhorar a forma como abordamos o próximo. Quero " +"continuar a explorar até onde isso nos pode levar." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Marcos e fontes do projecto" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"As datas descrevem pontos de controlo registados do projecto, verificados em" +" relação ao histórico público GitHub em 10 de outubro de 2026. O tempo " +"decorrido é o tempo de calendário entre as Confirmações. Presença de origem," +" comparações exatas, uma compilação e um tempo de execução resultam em cada " +"nome um marco diferente." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08 :{ph1} {ph2}13 de agosto continuação{ph3}, {ph4}19 de " +"agosto{ph5}, {ph6}24 de agosto Linux Porto{ph7}, {ph8}26 de agosto edição " +"Web{ph9}, e {ph10}30 de agosto 64-bit Linux lançamento{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} {ph2}29 de agosto razão inicial{ph3}, {ph4}7 de " +"setembro{ph5}, {ph6}8 de setembro comparações{ph7}, {ph8}9 de setembro " +"ligação{ph9}, e {ph10}10 de setembro jogável-construir recorde{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}10 de outubro{ph3} regista a reconstrução dos DOS em " +"funcionamento, os testes completos de rota Normal do mantenedor e a fase " +"actual de 64 bits." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} Correção de referência de verificação TH08 (oracle) :{ph1} {ph2}o bug " +"de recolha automática reportado{ph3}, {ph4}a correção de origem e " +"comparação{ph5}, e {ph6}a auditoria completa da constante de ponto " +"flutuante{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Reconstrução semântica:{ph1} {ph2} Manual de legibilidade do TH08{ph3} " +"e {ph4}ordem de Fase da fábrica e dois caminhos de validação{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}História Industrial:{ph1} {ph2}registo do indicador do motor a vapor do" +" Science Museum Group{ph3} descreve a introdução de 1796 e o mecanismo de " +"registo da pressão." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Método:{ph1} a fábrica {ph2}autonomia do agente{ph3} e " +"{ph4}conhecimento entre jogos{ph5} os documentos conservam os princípios e " +"as lições de trabalho." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}Mais artigos{ph1} · {ph2}Explorar uma investigação TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Revolução Industrial da engenharia reversa-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 reflete sobre engenharia reversa manual, reconstrução de Touhou com" +" agentes de IA e como o conhecimento se compõe em TH08 , TH095 e PC-98 TH04 " +"." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Experiência realizada entre projectos" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Ensaio de reconstrução de Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Casa{ph1}{ph2}/{ph3}Dinosaur speed lab" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Inspeccionar valuetech" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Reconstrua a regra da velocidade do dinossauro." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Para recriar a aceleração do jogo, primeiro Encontre a regra que controla " +"sua velocidade. {ph0} REA retornou o script em execução;{ph1} usámos a sua " +"regra para construir este mini-jogo com {ph2}velocidade ajustável.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "Nesta página" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Jogue e mude a velocidade{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Leia a regra recuperada{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Verificar a reconstrução{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Experimente a análise{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Jogue e mude a velocidade" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Pressione Play e, em seguida, salte sobre o cacto. Mova o controle " +"deslizante de velocidade para tentar um jogo mais lento ou mais rápido; ele " +"muda para uma velocidade fixa. Selecione a regra recuperada para começar em " +"6 e acelerar gradualmente novamente." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Jogue a reconstrução" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Jogar" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Pular ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Reiniciar" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Velocidade" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Use a regra de aceleração recuperada" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Regra Original: comece em 6, depois aumente para 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Mova o controle deslizante para definir sua própria velocidade. Espaço ou " +"salto limpa um cacto." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Permitir que o JavaScript reproduza a reconstrução. O código e a explicação " +"acima permanecem legíveis." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Leia o script REA retornado" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Nós inspecionamos {ph0}edição de navegador derivada do Chromium da " +"wayou{ph1} com REA . Ele retornou o carregado {ph2}, incluindo este ramo na " +"função de atualização do jogo:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"As configurações são {ph0}, {ph1} e {ph2}. O jogo executa este ramo em uma " +"atualização sem colisão." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Use a mesma regra no novo jogo" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Copiar" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"O mini-jogo usa esta função para aceleração automática. Mover o controle " +"deslizante fornece uma velocidade fixa. Desenho, física de salto e " +"verificações de colisão de retângulo são novos códigos para este jogo de " +"ensino; sua simulação avança em 60 atualizações por segundo." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "" +"{ph0}Baixe a regra da velocidade{ph1} · {ph2}Leia o código do jogo{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Verificar a reconstrução" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Chamamos a função de atualização do jogo original com obstáculos e " +"programação automática desativada. Compare essas velocidades registadas com " +"uma repetição da regra recuperada." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Actualizações" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Jogo Original" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Regra reconstruída" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Execute a verificação de velocidade" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Valores arredondados para três casas decimais. O ramo verifica antes de " +"adicionar, de modo que o incremento final pode ter velocidade um pouco acima" +" de 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Experimente você mesmo a análise" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Configurar REA {ph1} com o seu agente de codificação." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Siga o {ph0}etapas de conexão do navegador{ph1}, utilizando {ph2} como o URL" +" da página." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Forneça ao seu agente o URL da página e o endpoint de depuração local e, em " +"seguida, copie este prompt." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para inspecionar este jogo de dinossauros. Por que " +"fica mais rápido? Mostre a regra da velocidade, a seguir construa uma versão" +" pequena com uma velocidade ajustável.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Peça um acompanhamento: {ph0}\"Onde é calculada a altura do Salto? Adicione " +"um controle de altura de salto à nova versão.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Fonte: {ph0}código de velocidade inspeccionado{ph1}, Chromium autores. " +"{ph2}Direitos de autor e licença BSD{ph3}. O REA 4.1.0 inspecionou a edição" +" HTTP em execução no Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Jogo Do Dinossauro de Chrome: reconstrua sua regra da velocidade-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Leia a regra de Velocidade do jogo de dinossauros com REA, reconstrua-a, " +"depois altere a velocidade e jogue." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Reconstrução da velocidade dos dinossauros" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Mini-jogo de dinossauros. Use o botão de salto ou pressione espaço enquanto " +"o jogo está focado." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Copiar regra de velocidade reconstruída" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Copie o alerta da análise do dinossauro" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Casa{ph1} / FAQ" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA FAQ." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Configuração, atualizações, análise e resolução de problemas." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Temas" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Configuração e atualizações{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Análise{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Resolução de problemas{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Dados e partilha{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Configuração e atualizações" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Como instalo o REA?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Terminal * configuração do agente" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Copiar" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"A configuração registra a conexão MCP do REA e instala a skill de " +"investigação correspondente. Ao terminar, reinicie seu agente e forneça o " +"caminho do arquivo e uma pergunta. O {ph0}guia de configuração{ph1} explica " +"os pré-requisitos e a primeira análise." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Que agentes de codificação podem utilizar REA ?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Qualquer agente que suporte servidores MCP locais. A configuração inclui " +"Claude Code , Claude Desktop, Codex , Cursor , Gemini CLI , Windsurf , Devin" +" , OpenCode , Antigravity , GitHub Copilot CLI , Command Code , Grok Build ," +" OMP e VS Code . O conector do Grok Bot é adicionado a partir do seu chat." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Ligue o seu agente de codificação{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Como atualizo o REA?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"O REA é lançado com frequência, incluindo correções de bugs. Se você " +"instalou o CLI com npm :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Terminal * CLI instalado" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Siga o comando setup refresh impresso pela atualização. Se configurar o seu " +"agente através de {ph0}, correr:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Terminal * configuração do agente de atualização" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Revise as alterações e reinicie seu agente. A conexão com o REA usa uma " +"versão específica do pacote, então execute a configuração novamente para " +"usar a nova versão. Para um comando avulso na CLI, coloque o comando depois " +"de {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Está instalando a habilidade de skills.sh chega?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"A habilidade dá instruções de investigação ao seu agente. Executar {ph0} " +"Configuração REA{ph1} para conectar o servidor MCP e instalar a habilidade " +"correspondente, reinicie o agente para que ele possa chamar as ferramentas." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Análise" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "O que posso analisar com REA ?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Comece com o tipo de software que você tem:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Executáveis e bibliotecas nativas{ph1}: funções, montagem, pseudocódigo" +" e referências." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Aplicações JavaScript e Electron{ph1}: módulos, importações, IPC e " +"localizações de origem." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Páginas do navegador{ph1}: scripts, pedidos e observações de tempo de " +"execução." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"O REA também possui fluxos de trabalho para assemblies gerenciados, APKs " +"Android, firmware e recursos empacotados. {ph0}Ver os estudos de caso{ph1} " +"para investigações trabalhadas." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Preciso de Hopper, Ghidra ou IDA ?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"A análise profunda de programas de código de máquina utiliza um deles. O " +"trabalho estático da inspeção de JavaScript e de.NET com os arquivos " +"fornecidos e não precisa uma análise do motor dos programas do código de " +"máquina." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Conecte a instalação existente do Ghidra ou IDA ou deixe o setup detectar o " +"Hopper e propor uma instalação. Seu host e destino determinam qual provedor " +"pode ser usado. {ph0}Configurar a análise de programas de código de " +"máquina{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Posso usar REA sem um agente de codificação?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Sim. O CLI utiliza os mesmos fluxos de trabalho de análise. Para uma " +"aplicação local JavaScript ou Electron:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Terminal * análise estática da aplicação" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Substitua o caminho por uma pasta de aplicativo extraída ou arquivo ASAR. " +"{ph0}Utilizar o CLI {ph1} para opções de instalação." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "Que código o REA retorna?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"A análise nativa retorna assembly e pseudocódigo, com chamadas de funções, " +"referências e constantes relevantes. A análise de JavaScript retorna " +"módulos, suas relações e as posições no código-fonte." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Seu agente usa essas descobertas para explicar o comportamento ou escrever e" +" testar uma implementação. O {ph0} Cálculo DX-Ball{ph1} e {ph2}Verificador " +"de bandeira CTF{ph3} mostre como esse processo funciona." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "O que devo perguntar ao meu agente?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Dê - lhe um alvo local e um comportamento para investigar. Para uma " +"aplicação JavaScript ou Electron:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Substitua o caminho pelo seu alvo. O {ph0}guias{ph1} forneça prompts para " +"exemplos nativos, Electron e navegadores." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Resolução de problemas" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Por Que meu agente não pode ver as ferramentas REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Reinicie ou reconecte seu agente após a configuração. Verifique seu registro" +" REA com {ph0}; para Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Terminal * verificar um cliente" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Substituir {ph0} com o seu ID de cliente, como {ph1} ou {ph2}. Se o " +"relatório mostrar um registo em falta ou obsoleto, execute a configuração " +"para esse cliente:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Terminal * reparar a configuração de um cliente" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Reveja o seu plano e reinicie o cliente. Se o registro estiver íntegro, mas " +"as ferramentas permanecerem ausentes, Verifique o erro de conexão MCP do " +"cliente. {ph0}Mais diagnósticos de configuração{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Preciso iniciar o Hopper primeiro?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA inicia Hopper quando uma operação precisa. No macOS, conclua a primeira " +"escolha de modo de demonstração ou ativação de licença antes da análise " +"autônoma. {ph0}Consulte Configuração do provedor nativo{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "O que faço se encontrar um bug?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Actualização REA {ph1}, reinicie seu agente e tente novamente a mesma " +"tarefa. Uma versão recente já pode resolver o problema." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Se persistir, {ph0}abrir um problema{ph1} com sua versão REA, sistema " +"operacional, tipo de destino, etapas para reproduzir e saída de erro. Inclua" +" o nome do Fornecedor quando o problema envolver a análise de programas de " +"código de máquina." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Dados e partilha" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "O REA carrega a minha aplicação?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA analisa alvos em sua máquina. O seu agente recebe os resultados e a " +"Política de dados do respetivo Fornecedor modelo aplica-se a esses " +"resultados." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Como posso partilhar um exemplo ou contribuir?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Tem um exemplo útil de REA? Adoraríamos vê-lo. Partilhar o alvo, a sua " +"pergunta, as conclusões e a forma como as verificou numa {ph0}questão{ph1} " +"ou {ph2}pull request{ph3}. Trechos e números de códigos curtos ajudam outras" +" pessoas a acompanhar a investigação." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Relatórios de bugs, solicitações de recursos, documentação e melhorias de " +"código também são bem-vindos. Você também pode discutir um exemplo no " +"{ph0}comunidade{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA FAQ: configuração, atualizações e resolução de problemas" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Respostas às perguntas comuns do REA: instalação, atualizações, ferramentas " +"de análise, agentes de codificação, solução de problemas e exemplos de " +"compartilhamento." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Perguntas frequentes sobre REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Copiar o comando de configuração REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Copiar comando de actualização REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Comando de atualização de configuração do agente de cópia" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Copiar comando de análise REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Copiar exemplo de pedido de análise" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Comando Copy client diagnosis" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Comando de configuração com escopo de cópia" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Casa{ph1} / Sua primeira investigação" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Descubra onde{ph0}notas exportadas vão." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Use o REA para inspecionar um pequeno aplicativo, siga o botão Exportar " +"notas e verifique você mesmo um detalhe." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "Neste exercício" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Configurar{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Pergunte sobre exportação{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Siga a resposta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Verificar uma previsão{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Faça outra pergunta{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Ligue o seu agente ao REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Copiar" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Ou execute este comando no seu terminal:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Revise o plano, aprove a configuração e reinicie o agente. Já está ligado? " +"Continue abaixo." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Pergunte onde está escrito o CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"O exemplo é um aplicativo Electron de seis arquivos com um {ph0}Notas de " +"exportação{ph1} botão. Seu agente pode inspecionar seu código sem instalar " +"ou iniciar o Electron ." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Seu agente baixa os arquivos e entrega a pasta descompactada ao REA para " +"inspeção." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Baixar exemplo ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Se o seu agente não puder baixar arquivos, Descompacte este arquivo você " +"mesmo. Dê-lhe o caminho para o {ph0} pasta e a mesma questão de exportação." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Siga a resposta de volta ao código" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Procure uma breve explicação com referências de arquivo e linha:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"O botão envia um {ph0} mensagem. O processo principal Formata as notas como " +"CSV e escreve {ph1} na pasta Downloads do utilizador. As colunas são {ph2} e" +" {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Do botão ao gravador de arquivos" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"A análise estática do REA emparelha a mensagem com o seu manipulador. O " +"destino é lido a partir do Código." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"O caminho do arquivo, o formatador e a chamada de gravação estão juntos " +"neste manipulador. Peça ao seu agente para mostrar estas linhas se a sua " +"resposta As deixar de fora." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" +"{ph0}Veja o rastreamento completo do código e o resultado REA " +"registrado{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Verificar uma previsão" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Uma vírgula separa as colunas CSV. O que acontece quando o próprio título de" +" uma nota contém uma vírgula ou aspas?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Execute o cheque você mesmo" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Abrir um terminal no desembalado {ph0} pasta:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Este comando usa um shell com suporte a documentos here, como Bash ou Zsh. " +"Seu agente pode executar o mesmo JavaScript no shell da sua plataforma." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Faça outra pergunta" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Tente um acompanhamento na mesma conversa:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"O que acontece se o ficheiro não puder ser gravado? Siga o erro de volta à " +"página." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Ou dê ao seu agente um aplicativo próprio e pergunte sobre um botão, arquivo" +" ou comportamento." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Como Notion copia texto e HTML{ph1}{ph2}Siga um recurso de área de " +"transferência em um aplicativo Electron empacotado.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Como DX-Ball calcula o posicionamento do som estéreo{ph1}{ph2}Leia as " +"instruções originais e os controlos da reconstrução.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Resolução de problemas de configuração ou análise{ph1}{ph2}Atualize o " +"REA e verifique a conexão se ficar preso.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Sua primeira investigação de engenharia reversa-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Experimente o REA em um pequeno aplicativo de notas. Configure seu agente, " +"pergunte para onde vão as notas exportadas e verifique o formatador CSV com " +"um título de amostra." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "Sua primeira investigação REA" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Copiar o aviso de instalação do REA" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Comando Copiar configuração" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Copiar notas pedido de investigação" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Copiar o pedido de verificação CSV" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Comando Copiar verificação do formatador" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Casa{ph1} / Começar" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Configurar REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Conecte o REA ao seu agente de codificação ou inspecione um aplicativo local" +" do seu terminal." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Abrir um terminal e verificar:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Terminal" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows PowerShell" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Tipo Y se solicitado a aceitar os Termos. Feche o PowerShell, abra-o " +"novamente e execute {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Se o PowerShell disser mais tarde {ph0}\"a execução de scripts está " +"desativada neste sistema\"{ph1} quando você corre {ph2}, execute isto uma " +"vez e tente novamente:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Se utilizar Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS * Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Caso contrário:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Feche o Terminal, abra-o novamente, depois:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"As necessidades do instalador {ph0} e {ph1} (em Debian / Ubuntu: {ph2}). " +"Feche o terminal, abra-o novamente, depois:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Sua própria distribuição {ph0} pacote é muitas vezes mais velho do que " +"22.19, então verifique {ph1} se você usá-lo em seu lugar." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Prefere um instalador regular? Baixe a versão LTS de {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Opções de configuração" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Ligue o seu agente de codificação{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Utilizar o CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Configurar a análise de programas de código de máquina{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Obter ajuda{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Ligue o seu agente de codificação" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Execute a configuração para conectar o REA ao seu agente de codificação. As " +"opções do cliente incluem Claude Code, Codex , Cursor , Gemini CLI , " +"Windsurf , Grok Build e outros clientes MCP suportados. O conector do Grok " +"Bot é adicionado a partir do seu chat." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Novo em agentes de codificação?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Um agente de codificação é um assistente de IA que funciona em seu " +"computador em vez de em uma guia do navegador. Ele pode ler arquivos e " +"executar comandos, e pergunta antes de fazer alterações. REA dá-lhe " +"ferramentas da reverso-engenharia." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Se ainda não tiver um, escolha um, Siga a sua página de instalação e inicie " +"sessão:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code {ph2}{ph3} por Anthropic . Precisa de um plano Claude" +" pago." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex {ph2}{ph3} por OpenAI . Inicie sessão com a sua conta " +"ChatGPT." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode {ph2}{ph3}, código aberto. Conecte o Provedor do modelo " +"de sua escolha." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Em seguida, abra-o e copie o prompt abaixo para ele. O agente executa a " +"configuração do REA e mostra o plano antes de alterar qualquer coisa." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Ou execute a configuração você mesmo" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Como abrir um terminal?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} abra o menu Iniciar, escreva {ph2}PowerShell{ph3} e " +"prima Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} imprensa {ph2} {ph3}, tipo {ph4}Terminal{ph5} e prima " +"Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0} Linux :{ph1} imprensa {ph2} {ph3} {ph4} na maioria dos desktops." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Colar um comando com {ph0} {ph1} (macOS : {ph2} {ph3}; Terminais Linux: " +"{ph4} {ph5} {ph6}) e, em seguida, prima Enter." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Escolha o seu cliente e reveja o plano de configuração. REA adiciona sua " +"conexão MCP e a habilidade de investigação correspondente, mantendo um " +"backup da configuração existente. Pergunta antes de aplicar as alterações." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Reinicie o cliente quando a configuração terminar." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Como faço para reiniciar meu cliente?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Aplicações Desktop{ph1} (Claude Desktop, Cursor , Windsurf, VS Code ): " +"feche o aplicativo completamente e abra-o novamente. Fechar a janela não é " +"suficiente. Em macOS imprensa {ph2} {ph3}; em Windows, também saia do ícone " +"da bandeja, se houver um." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Agentes terminais{ph1} (Claude Code, Codex, Gemini CLI ): saia da " +"sessão e inicie-a novamente." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Dê ao seu agente um caminho de destino e uma pergunta específica. Para um " +"aplicativo JavaScript ou Electron, você pode começar com:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Olhe para {ph0} e descubra como exporta dados. Mostre os pontos de entrada, " +"chamadas e dependências envolvidas, com os locais de origem das suas " +"descobertas." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Substitua o caminho pelo seu destino local." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Como obtenho o caminho completo de uma pasta?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} no Explorador de Ficheiros, clique com o botão direito " +"do rato na pasta e escolha {ph2}Copiar como caminho{ph3}. Em Windows 10, " +"mantenha pressionada a tecla Shift enquanto clica com o botão direito do " +"mouse." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} no Finder, clique com o botão direito na pasta, segure " +"Option e escolha {ph2}Copiar \" ... \" como caminho{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Qualquer sistema:{ph1} arraste a pasta para uma janela de terminal e " +"seu caminho será exibido." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" +"Em um terminal, coloque aspas em torno de um caminho que contém espaços." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Utilizar o CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Analisar uma pasta de Aplicação JavaScript ou Electron ou um arquivo ASAR " +"sem executar a aplicação:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Análise estática da aplicação" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Substitua o caminho pelo diretório do aplicativo extraído ou {ph0} ficheiro." +" Em Windows, um caminho como {ph1} trabalha aqui." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Onde encontro um aplicativo .ficheiro asar?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Os aplicativos Electron geralmente o mantêm em um {ph0} pasta:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (clique com o botão direito do mouse no aplicativo " +"e escolha {ph3}Mostrar O Conteúdo Da Embalagem{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} muitas vezes {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Alguns aplicativos são instalados em outro lugar. Pesquise na pasta do " +"aplicativo {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"O resultado identifica o aplicativo, mostra as conexões entre os módulos e " +"fornece suas localizações de origem. As ligações REA não podem ser " +"resolvidas estão marcadas no resultado." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Se você quiser uma permanente {ph0} comando na sua concha:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Instalar o CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Continue com o Guia de Aplicação JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Configurar a análise de programas de código de máquina" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Os programas de código de máquina precisam de uma ferramenta de análise " +"local. Escolha e configure um abaixo e, em seguida, forneça ao REA seu " +"executável ou biblioteca." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Escolha uma ferramenta: Ghidra, Hopper ou IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Use um Ghidra 12.1 existente.x Instalação e um JDK de 64 bits 21 ou mais " +"recente em Linux ou macOS, em x64 ou arm64. Sua instalação do Ghidra precisa" +" de um descompilador nativo para sua arquitetura de host. Definir os " +"caminhos antes de executar a configuração:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Conecte sua instalação Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ligação Ghidra * macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Substitua os dois caminhos pelas instalações existentes. A configuração " +"verifica - os e regista definições válidas para o cliente selecionado. No " +"Linux arm64, pode ser necessário construir o decompilador nativo do Ghidra " +"separadamente." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Ligar Ghidra em Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"O Windows x64 tem suporte experimental somente leitura para aplicações " +"nativas x86 e x64 PE e DLLs em unidades NTFS locais fixas. Use um Ghidra " +"12.1 existente.x Instalação e um JDK de 64 bits 21 ou mais recente:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ligação Ghidra * Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Substitua os dois caminhos pelas suas instalações e, em seguida, reveja o " +"plano da instalação." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Conecte Hopper em macOS ou Linux . Execute o comando setup acima; ele " +"detecta uma instalação existente ou oferece um plano de instalação para sua " +"aprovação." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"No macOS, conclua a primeira escolha do modo de demonstração ou ativação da " +"licença do Hopper antes de uma análise autônoma." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"As configurações IDA verificadas usam Windows, com um registro MCP existente" +" para uma GUI anexada ou um banco de dados sem cabeça. A análise sem cabeça" +" Linux e macOS permanece não verificada." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Ligar um registo IDA MCP existente" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Manter o funcionamento do servidor upstream {ph0}, {ph1} e facultativo {ph2}" +" em um arquivo JSON. Um existente {ph3} objecto com um {ph4} a entrada " +"também é aceita. Aponte REA nesse ficheiro antes da configuração:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "Ligação IDA * Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"O perfil anexado usa ferramentas 1.4.0 herdadas upstream com o binário " +"original já aberto no IDA . O perfil headless usa a API upstream database-" +"supervisor e um registro com {ph0}; a verificação real abrange um supervisor" +" IDA 9.3 Windows x64. O médico verifica o registo sem iniciar o IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Dê a REA o caminho executável original, com {ph0} em uma consulta CLI. Para " +"um agente, incluir {ph1} no ambiente do registro REA e selecione IDA ao " +"abrir o binário." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "Para uma configuração existente do Ghidra, inspecione uma função com:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Análise de funções" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "" +"Substituir {ph0} com o nome ou endereço da função que pretende inspecionar." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "" +"Como funcionam as sessões de análise de programas de código de máquina" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Cada comando CLI importa e analisa o binário e, em seguida, fecha sua " +"sessão. As consultas MCP do seu agente reutilizam o binário importado " +"enquanto essa sessão está aberta." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Seguir um exemplo de análise de programas de código de máquina{ph1} " +"para ver como o resultado da função conduz a um cálculo recuperado." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Obter ajuda" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Se o seu agente não vir REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Reinicie ou volte a ligar o cliente após a configuração. Verificar a ligação" +" REA com {ph0}; para Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Verificar um cliente" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Se um fornecedor precisar de atenção" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Verifique o fornecedor que está a utilizar. Para Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Verificar um fornecedor" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "O relatório apresenta a verificação falhada e sugere o próximo passo." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} REA FAQ{ph1}{ph2}Respostas rápidas sobre actualizações, agentes e " +"análises.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Escolha um guia de investigação{ph1}{ph2}Exemplos trabalhados para um " +"binário, um aplicativo Electron e um navegador.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Questões GitHub{ph1}{ph2}Relate um problema com o comando e o " +"diagnóstico.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} Comunidade REA{ph1}{ph2}Perguntas, investigações e trabalhos em " +"curso.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Instale o REA e configure o seu agente de codificação" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Conecte o REA ao seu agente de codificação ou inspecione um aplicativo " +"JavaScript ou Electron local a partir do terminal. Configuração, primeiras " +"perguntas e guias do provedor nativo." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Copiar a verificação da versão Node.js" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Copiar o comando de instalação Node.js para Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Copiar o comando da Política de execução do PowerShell" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Comando de instalação copiar Homebrew Node.js" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Copiar o comando de instalação do fnm para macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Copiar comandos Node.js 24 para macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Copiar o comando de instalação do fnm para Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Copiar comandos Node.js 24 para Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA guia de introdução" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Copiar o aviso de instalação do REA" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Comando Copy agent setup" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Copiar comando de análise JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Copiar o comando de instalação do CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Copiar ligação ghidra * macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Copiar ligação Ghidra para Windows PowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Copiar ligação IDA para Windows PowerShell" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Copiar comando de análise de função nativa" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Comando Copy client diagnosis" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Comando de diagnóstico do Fornecedor de cópia" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Casa{ph1} / {ph2}Guias{ph3} / Observação do navegador" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Veja o que acontece{ph0}quando você clica." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Use um pequeno aplicativo de navegador para conectar uma ação, sua " +"solicitação de rede e o JavaScript que cria um download." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "Neste guia" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}O exemplo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Abra o navegador{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Pergunte ao seu agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Captura a partir de CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Ler o pedido e o guião{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "O que acontece quando você clica em Exportar?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"O {ph0}Exemplo do navegador Notes{ph1} tem um {ph2}Notas de exportação{ph3} " +"botão. Clicar nele carrega {ph4}, Formata as duas notas como CSV e inicia um" +" download." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Do clique ao download do CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * Você{ph1}{ph2}Clique em Exportar notas{ph3}{ph4}Execute a ação no " +"seu navegador enquanto a captura estiver em execução.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA {ph1}{ph2}Registar o pedido{ph3}{ph4}Capture o URL da " +"solicitação, o status da resposta e a estrutura JSON da página " +"selecionada.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * o seu agente{ph1}{ph2}Ler o código de exportação{ph3}{ph4}Ligar o " +"pedido observado ao {ph5} em {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Inicie a captura antes de clicar em Exportar notas." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Abrir Chrome com depuração remota" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Abra o exemplo do hosted Notes com um perfil de navegador separado e uma " +"porta de depuração local. Em Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Inicie o navegador de exemplo" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Copiar" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Use o caminho executável do navegador instalado em macOS ou Windows . Você " +"pode substituir o URL da página por outra página que deseja inspecionar." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA se conecta a este navegador existente. Você mantém o controle da página," +" executa a ação e fecha o navegador quando terminar." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Peça ao seu agente para assistir a uma ação" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para inspecionar esta página enquanto clico em " +"Exportar notas. Que Pedido faz e como é construído o CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Exemplo de alerta. Dê ao seu agente o ponto de extremidade de depuração, " +"{ph0}, e o URL da página. Deixe-o iniciar a captura antes de clicar." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Seu agente descobre o destino da página, inicia uma janela de observação e " +"lê as evidências resultantes. Ele pode então inspecionar o script por trás " +"da exportação." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Ou captura a partir do terminal" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Encontrar o ID de destino da página:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Encontre a página" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Escolha o destino com o URL de exemplo do Notes. Substituir {ph0} abaixo com" +" o seu ID, em seguida, executar:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Capture os próximos dez segundos" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Deixe o comando se conectar por alguns segundos e clique em {ph0}Notas de " +"exportação{ph1} nesse navegador. O resultado chega após o fim da janela de " +"observação." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"O resultado capturado inclui a página selecionada, a atividade da rede " +"durante essa janela e a forma da resposta JSON. Os pedidos anteriores estão " +"fora desta captura." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Leia o script de solicitação e exportação" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Gravado com REA 4.1.0 no exemplo de notas locais" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Facto capturado" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Valor" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Pedido" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Resposta" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Iniciador do pedido" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * roteiro" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Estrutura de resposta" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} com {ph1} e {ph2} campos" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Ler os scripts carregados" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"A solicitação identifica a fonte de dados e os registros REA {ph0} como seu " +"iniciador. Leia a fonte do script capturado para ver como os dados são " +"usados:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"O download é construído na página usando a resposta JSON. A etapa de " +"formatação CSV vem do script; a captura de rede estabelece que este Clique " +"solicitado {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Encontre o script que solicita {ph0}. Como escapam os títulos que contêm " +"vírgulas ou aspas?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Para um aplicativo JavaScript ou Electron instalado, continue com o " +"{ph0}fluxo de trabalho da aplicação{ph1} para seguir arquivos e limites do " +"processo." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Análise de navegador e rede-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Observe uma exportação de notas com REA: selecione uma página do navegador, " +"capture um clique, inspecione a solicitação e siga o script de exportação." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Observação do navegador" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Copiar iniciar o navegador de exemplo" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Copiar exemplo de pedido" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Copiar encontrar a página" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Copiar capturar os próximos dez segundos" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Copiar ler os scripts carregados" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Casa{ph1} / Guias" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "Guias REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Analise uma função nativa, uma exportação Electron ou uma solicitação do " +"navegador. Cada guia inclui um aviso, código e resultados." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Primeira investigação" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Configurar REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "" +"Ligue o seu agente de codificação ou utilize o REA a partir do terminal." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Começar a utilizar REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Programas de código de máquina" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Recuperar um cálculo da posição sonora esquerda/direita" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Comece com um executável de jogo Windows. Inspecione as instruções, siga um " +"chamador, leia constantes numéricas e verifique o C recuperado." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Análise do Guia de programas de código de máquina" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Seguir uma exportação CSV" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Um pequeno aplicativo Notes espalha um recurso pelo renderizador, pré-" +"carregamento e processo principal. Use REA para conectar a API, o canal IPC " +"e o gravador de arquivos." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript & guia Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Para um aplicativo empacotado maior, siga {ph0} Notion's clipboard " +"bridge{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Comportamento do navegador" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Observe um clique" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Abra um exemplo de notas de trabalho, capture uma solicitação de exportação " +"e encontre o código que transforma sua resposta em um download." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Guia de observação do navegador" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Guias de engenharia reversa-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Aprenda REA através de exemplos curtos trabalhados: um cálculo nativo, uma " +"exportação Electron CSV e uma solicitação do navegador." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}Casa{ph1} / {ph2}Guias{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Rastrear um Electron {ph0} Exportação CSV." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Siga um clique de botão da API da página, através do Electron IPC, até o " +"gravador de arquivos CSV." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "Neste guia" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}O exemplo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Pergunte ao seu agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Rastrear o código de exportação{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Experimente o exemplo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Inspecionar o gravador CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "Para onde vão as\" notas de exportação\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Este guia usa um pequeno aplicativo Electron. Clicar {ph0}Notas de " +"exportação{ph1} chama uma API na página, cruza para o processo principal e " +"grava um CSV . O comportamento está espalhado por vários arquivos." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "A exportação CSV através dos processos Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Pré-carga do renderizador{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} chama a API " +"exposta por {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Entre processos{ph1}{ph2}{ph3}{ph4}{ph5}O preload invoca um canal IPC: " +"uma mensagem nomeada para o processo principal.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Processo principal{ph1}{ph2}Um manipulador de exportação{ph3}{ph4}{ph5}" +" lida com esse canal e chama o gravador CSV.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} Formata as notas7 {ph1} escreve {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA corresponde à chamada IPC literal ao seu manipulador e identifica a API " +"exposta. O caminho é inferido do Código; uma captura de tempo de execução " +"pode verificar o que é executado." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Pergunte sobre a exportação CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Ligue o seu agente ao REA {ph1} e dê a ele o diretório do aplicativo ou" +" o arquivo ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para encontrar o que acontece quando eu exportar " +"notas neste app. Onde é criado o CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "" +"Exemplo de alerta. Inclua o caminho absoluto para a pasta do aplicativo ou " +"{ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA lê os arquivos do aplicativo e cria um mapa de pontos de entrada, " +"módulos e limites do processo. Seu agente usa esse mapa para restringir a " +"investigação ao recurso de exportação." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Rastrear o código de exportação" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "A página chama uma pequena API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"A página conhece o nome do método. A implementação reside na pré-carga, o " +"que a expõe ao renderizador." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA records {ph0} e o canal literal {ph1}. Ele emparelha essa invocação com " +"o manipulador de correspondência único no processo principal." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"A leitura do manipulador responde à pergunta original: {ph0} Formata as " +"notas e o processo principal escreve {ph1} na pasta Transferências do " +"utilizador." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Gravado por REA 4.1.0 no exemplo para download abaixo. Os locais de origem " +"acompanham as descobertas da API, do canal e do manipulador." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Analise você mesmo o exemplo" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Baixar exemplo ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Procurar os seis ficheiros de origem" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Análise estática da aplicação" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Substitua o caminho pela pasta que você descompactou. Você deve encontrar um" +" canal IPC e um manipulador correspondente em {ph0}. Os locais de origem " +"estão em {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Para seu próprio aplicativo, use o mesmo comando com seu diretório ou " +"caminho ASAR. Um agente pode seguir uma string literal, nome de API ou canal" +" IPC com as ferramentas de rastreamento de recursos do REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Inspecionar o gravador CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Seguir {ph0} ao seu manipulador. Quais entradas atingem o gravador CSV e o " +"que acontece se a gravação do arquivo falhar?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Use os locais de origem para inspecionar esses detalhes. Nomes de canais " +"computados e manipuladores ambíguos podem permanecer sem solução; as " +"observações de tempo de execução fornecem outra maneira de investigá-los." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Seguir A Ponte da área de transferência de Notion{ph1} {ph2}Aplique a " +"mesma abordagem a um aplicativo Electron empacotado.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Observar uma exportação do navegador{ph1}{ph2}Capture um clique real e " +"veja qual solicitação ele faz.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Seguir uma função nativa{ph1}{ph2}Continue em um binário quando um " +"recurso depender do código nativo.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "Análise JavaScript e Electron-REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Rastreie uma exportação do Notes CSV por meio de uma API de renderizador, " +"pré-carga e manipulador IPC com REA . Inclui ficheiros de exemplo " +"descarregáveis e um resultado de análise verificado." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Copiar exemplo de pedido" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Copiar análise estática da aplicação" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Casa{ph1} / {ph2}Guias{ph3} / Análise de programas de código de máquina" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "" +"Recuperar o de DX-Ball{ph0}cálculo da posição sonora esquerda/direita." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Inspecione as instruções originais, identifique a entrada e as constantes e," +" em seguida, verifique o C recuperado." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "Neste guia" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}O exemplo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Pergunte ao seu agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Leia os resultados do REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Recuperar e verificar{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Use seu próprio binário{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Calcular o posicionamento do som estéreo esquerdo / direito" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"Em DX-Ball, uma batida do tijolo fornece uma posição horizontal da tela. O " +"código de som transforma - o num valor panorâmico esquerdo/direito." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"A função inicial, {ph0}, tem um resultado decompilador curto: uma chamada " +"para {ph1}. REA também retorna suas instruções e chamadores, que dão ao " +"Agente uma maneira de investigar a aritmética ausente." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Novo nestes Termos?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Instruções:{ph1} as etapas que o processador executa, mostradas de " +"forma legível, como {ph2} ou {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Resultado do decompilador / pseudocódigo:{ph1} a tentativa de uma " +"ferramenta de análise de transformar as instruções de volta em código " +"C-like. Pode perder partes, como neste exemplo." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Chamador:{ph1} uma função que chama este. Mostra quais valores são " +"transmitidos." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Endereço:{ph1} um local no programa, escrito em hexadecimal, como " +"{ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Constantes:{ph1} números fixos armazenados no programa, lidos como " +"bytes brutos e decodificados." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Três elementos de prova, um cálculo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * instruções{ph1}{ph2}Uma entrada inteira{ph3}{ph4}Uma leitura de " +"pilha fornece o valor utilizado pelas instruções de ponto flutuante.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * chamador{ph1}{ph2}Uma coordenada de ecrã{ph3}{ph4}O chamador " +"atingido por Tijolos passa {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * bytes de dados{ph1}{ph2}As constantes numéricas{ph3}{ph4}Os bytes " +"referenciados descodificam para {ph5}, {ph6} e um valor de escala.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA fornece as instruções, a relação função-chamada e os bytes. O agente " +"interpreta-os em conjunto." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Pergunte sobre o comportamento" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Após {ph0}conectando REA ao seu agente{ph1} e {ph2}criação de uma ferramenta" +" de análise de programas de código de máquina{ph3}, forneça o executável " +"local e uma pergunta:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Que Ferramenta de análise devo utilizar?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA precisa de um destes para ler programas nativos:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} (macOS ou Linux): a configuração do REA detecta-o ou " +"oferece-se para instalá-lo. No macOS, abra o Hopper uma vez e escolha o modo" +" de demonstração ou ative uma licença antes da sua primeira análise." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} (macOS ou Linux; experimental em Windows): gratuito, mas " +"necessita de um Ghidra 12.1 existente.x Instalação e um JDK de 64 bits 21 ou" +" mais recente." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA {ph1} (Windows): para uma configuração IDA existente com um " +"registo MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Ver {ph0}Configurar a análise de programas de código de máquina{ph1} para os" +" passos." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use o REA para descobrir como o DX-Ball calcula o " +"posicionamento do som estéreo. Explique o cálculo e mostre o " +"código.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Exemplo de alerta. Dê ao seu agente o caminho para o executável local DX-" +"Ball 1.07. REA não inclui DX-Ball, então use sua própria cópia ou Faça o " +"mesmo tipo de pergunta sobre outro pequeno programa Windows que você possui." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Como obtenho o caminho completo de um ficheiro?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} no Explorador de Ficheiros, clique com o botão direito " +"do rato no ficheiro e escolha {ph2}Copiar como caminho{ph3}. Em Windows 10, " +"mantenha pressionada a tecla Shift enquanto clica com o botão direito do " +"mouse." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} no Finder, clique com o botão direito do rato no " +"ficheiro, mantenha premida a opção e escolha {ph2}Copiar \" ... \" como " +"caminho{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Qualquer sistema:{ph1} arraste o arquivo para uma janela de terminal e " +"seu caminho será exibido." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Leia os resultados do REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Leia a entrada" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"As instruções carregam um argumento inteiro e o convertem para aritmética de" +" ponto flutuante. Esta é a entrada ausente da primeira visualização de " +"pseudocódigo." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Siga o chamador" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA identifica o chamador atingido por tijolo. Suas instruções anteriores " +"multiplicam a coordenada do bloco por 30; adicionando {ph0} (20) indica a " +"posição do ecrã do tijolo." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Leia as constantes referenciadas" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"A aritmética faz referência a esses endereços. A leitura dos bytes fornece " +"os valores reais; a ordem de instrução informa ao agente como eles são " +"usados." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Escrever e verificar a função recuperada" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"Com uma escala de 1,0, as posições da tela 0, 320 e 640 são mapeadas para " +"-500, 0 e 500 antes da conversão de inteiros. O cálculo coloca o centro da " +"tela no centro do campo estéreo." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"O agente utilizou as conclusões do REA para escrever o C. verificações " +"separadas compararam 3.205 entradas com a função x86 original e reproduziram" +" todos os 63 bytes compilados da função completa." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "" +"{ph0}Ver o inquérito completo e a comparação entre a montagem e a c{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Experimente com seu próprio binário" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Conecte uma análise do provedor de programas de código de máquina{ph1}," +" em seguida, dê ao seu agente um executável ou biblioteca local e um recurso" +" para investigar. Perguntas iniciais úteis incluem \"como este arquivo é " +"analisado?\"ou\" qual função lida com esta ação do menu?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Se já souber o nome ou endereço de uma função, pode consultá-la a partir do " +"terminal. Para uma instalação Ghidra configurada:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Análise de funções" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Substituir o caminho de destino e {ph0} com o seu próprio nome ou endereço " +"de função. Cada invocação CLI importa e analisa o binário e, em seguida, " +"fecha sua sessão. As consultas MCP do seu agente reutilizam o binário " +"importado enquanto essa sessão está aberta." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Leia o pseudocódigo juntamente com instruções e referências. Quando um " +"resultado deixa uma chamada ou valor sem solução, use esse local como a " +"próxima pergunta." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Análise binária nativa-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Recupere um cálculo nativo com REA: inspecione as instruções, siga um " +"chamador, leia constantes e verifique c reconstruído." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Análise de programas de código de máquina" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Copiar exemplo de pedido" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Análise da função de cópia" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Configurar REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Configurar REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}O que é RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Como o REA ajuda{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Jogo de dinossauros{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Calculadora{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Experimente REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Aprofunde-se{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Ajuda e feedback{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Comunidade{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Engenharia reversa, com seu agente de codificação" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Descubra como{ph0}o software funciona." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"O REA oferece ao seu agente de programação as ferramentas para examinar um " +"programa e explicar o que ele faz." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "Já conhece o RE? {ph0}Ir para os guias de análise{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Quer ir mais fundo? {ph0}Leia o blogue{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Copie este prompt para seu agente de programação:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Copiar" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Ou execute este comando no terminal:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "Revise e aprove as alterações propostas. Depois, reinicie seu agente." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "O que é engenharia reversa?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Entender como o software funciona {ph0}examinando o próprio programa.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"O objetivo: entender um recurso bem o suficiente para {ph0}explicar{ph1}, " +"{ph2}mudá-lo{ph3} ou {ph4}reconstruí-lo.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "Antes do REA · Você investiga {ph0}por conta própria{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Descodificar ramificações" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Rastrear chamadas" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Recuperar a regra" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Original x64 · instruções seleccionadas{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * que ramo?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Dois saltos para o mesmo lugar. Que operadores são " +"estes?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Procure os IDs do comando e, em seguida, rotule a ramificação." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Dividir ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Multiplicar ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · O que fazem as funções chamadas?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 é claro. As chamadas são apenas endereços. {ph0}Qual deles divide? Que" +" valor entra?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Inspecione as funções auxiliares e rastreie os valores armazenados." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Dividir" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * Qual é a regra?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Este caminho multiplica-se pela outra entrada. Então {ph0}10% significa " +"10% de 200{ph1} depois de +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "Nomeie os operandos e verifique os dois caminhos do operador." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Raciocínio ilustrativo de peritos" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Descodifica as instruções, segue as chamadas de função e reconstrói o " +"cálculo.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "Com o REA · Você pergunta ao {ph0}seu agente{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Um único prompt." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Pergunte ao seu agente {ph0}com palavras simples.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemplo de alerta * Calculadora" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Exemplo de resposta * com base nas conclusões" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "" +"Depois de+, o botão % leva {ph0}uma percentagem do primeiro número.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "O REA fornece" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Instruções do manipulador, código descompilado e chamadas." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Seu agente explica" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "Qual ramificação se aplica, o que calcula e como reconstruí-la." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Conjunto selecionado da DLL da calculadora instalada. Os pensamentos e as " +"respostas ilustram as conclusões. {ph0}Continue com o exemplo da " +"calculadora{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Vamos tentar dois exemplos.{ph1} Altere a velocidade de um jogo, depois" +" volte à calculadora e reconstrua o botão%." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Exemplo 01 * jogo de dinossauros de Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Por que o dinossauro fica mais rápido?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Objectivo" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Reconstrua o jogo com {ph0}velocidade ajustável.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Por que fazer engenharia reversa?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Para reproduzir sua aceleração, precisamos {ph0}a regra no jogo de " +"corrida{ph1}: quão rápido começa, quanto aumenta e quando pára." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Jogue a reconstrução" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Jogar" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Pular ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Reiniciar" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Velocidade" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Use a regra de aceleração recuperada" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Regra Original: comece em 6, depois aumente para 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Mova o controle deslizante para definir sua própria velocidade. Espaço ou " +"salto limpa um cacto." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Permitir que o JavaScript reproduza a reconstrução. O código e a explicação " +"acima permanecem legíveis." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "O REA retornou" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}O script realmente em execução na página.{ph1} O agente lê sua função " +"de atualização e configurações de velocidade e usa essa regra em um novo " +"jogo." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemplo de prompt * jogo de " +"dinossauro" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para inspecionar este jogo de dinossauros. Por que " +"fica mais rápido? Mostre a regra da velocidade, a seguir construa uma versão" +" pequena com uma velocidade ajustável.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Alvo inspeccionado: {ph0}edição de navegador derivada do Chromium da " +"wayou{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Comece às 6.{ph1} Adicionar {ph2}0.001{ph3} cada atualização sem " +"colisão, enquanto a velocidade é inferior {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Abrir o laboratório de velocidade" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "O que cada parte faz" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 * REA {ph1}{ph2}Leia o roteiro do jogo em execução{ph3}{ph4}Devolva " +"o seu código e definições reais ao agente.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * o seu agente{ph1}{ph2}Reconstruir a regra, adicionar um " +"controlo{ph3}{ph4}Use a aceleração recuperada em um pequeno jogo com um " +"controle deslizante de velocidade.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * Você{ph1}{ph2}Alterar a velocidade e jogar{ph3}{ph4}Experimente a " +"aceleração original e escolha o seu próprio ritmo.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Veja o script, verificações e como tentar a análise" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"O REA inspecionou a edição do navegador HTTP por meio de uma conexão de " +"depuração local e retornou {ph0}, incluindo a sua fonte e digestão." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Chamamos a função de atualização do jogo original em uma verificação " +"controlada do navegador, com obstáculos e programação automática " +"desativados. Após 4.000 atualizações, a velocidade era de 10,0; após 10.000," +" era de 13,0, arredondado para um decimal." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"O novo mini-jogo mantém essa regra de velocidade. Seu código de desenho, " +"salto e colisão é uma pequena implementação de ensino. {ph0}Abrir o " +"laboratório{ph1} para ver o novo código e executar a mesma verificação de " +"velocidade." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Para inspecionar o alvo você mesmo, siga o {ph0}etapas de conexão do " +"navegador{ph1} utilização {ph2}a página do dinossauro{ph3}. Forneça ao seu " +"agente o URL da página e o ponto de extremidade de depuração local e, em " +"seguida, copie o prompt acima." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Código de velocidade inspeccionado{ph1} · {ph2} Chromium autores * " +"licença BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Exemplo 02 * Calculadora Windows" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Recrie o botão % da calculadora." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"Construa uma pequena calculadora que manipule {ph0}ambos + E7 " +"corretamente.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"O mesmo botão usa {ph0}regras diferentes depois de + E7X.{ph1} Inspecionamos" +" o aplicativo instalado para descobrir a qual número a porcentagem é " +"aplicada." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Tente o cálculo" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Redefinir" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% de 200 = 20. Então 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Ilustração interactiva da regra das percentagens inspeccionadas." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Um ramo divide-se por 100. O outro também se multiplica pelo primeiro " +"número.{ph1} O agente usa ambos para recriar o botão%." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Para este exemplo, {ph0} e {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemplo de prompt * reconstruir o " +"botão %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para inspecionar o botão % da calculadora Windows. " +"Recupere as regras depois de + E7X, em seguida, construir uma pequena " +"calculadora que usa ambos.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Com +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Pegue 10% do primeiro número.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Com a ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Transformar 10% em 0,1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Do aplicativo instalado para um botão % funcional" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA lê a biblioteca{ph1}{ph2}Retorna o código do manipulador % " +"{ph3}{ph4}A função verifica o operador e utiliza a constante {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * o seu agente interpreta-o{ph1}{ph2}Explicar e reproduzir as " +"regras{ph3}{ph4}Verifique o ramo com a fonte da Microsoft e, em seguida, " +"tente + e elimi acima.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Veja o código real e como a resposta foi verificada" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Inspeccionado com REA 4.1.0: Calculadora Windows 11.2508.4.0, x64. O resumo " +"legível utiliza nomes da fonte pública da Microsoft para explicar o ramo " +"recuperado." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Percentagem de execução{ph1} · {ph2}Casos de teste da Microsoft{ph3} · " +"{ph4}Guia de configuração nativo{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Sua primeira investigação" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Tente REA em um pequeno aplicativo." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Baixe nosso exemplo de notas, Rastreie sua exportação CSV e verifique uma " +"entrada alterada." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Experimente o exemplo guiado" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Quer se aprofundar?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Diga ao seu agente o que você quer entender ou construir. Com REA, você pode" +" trabalhar junto em qualquer coisa de {ph0}Clonagem deste website{ph1} para " +"{ph2}reconstruir um jogo a partir do seu executável.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemplo de pedido * Sítio Web" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Sim, esta." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Exemplo de prompt * reconstrução do " +"jogo" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para reconstruir este jogo a partir do seu " +"executável. Recupere a lógica de jogo em C e teste-a contra o " +"original.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Ver estudo de caso DX-Ball{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "Para as etapas de configuração e análise, escolha o seu destino:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Programas de código de máquina" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Inspecione funções, strings, referências e relações de chamada de função em " +"executáveis e bibliotecas." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Análise do Guia de programas de código de máquina" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Mapeie módulos, rotas, IPC e dependências nativas de uma pasta de aplicativo" +" ou arquivo ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Fluxos de trabalho da aplicação" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Atividade do navegador e do tempo de execução" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Capture a atividade selecionada do navegador ou do processo e compare os " +"resultados entre as execuções." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Guia de observação do navegador" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Alguma dúvida?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Leia as perguntas frequentes{ph1}, {ph2}fale connosco em Discord {ph3}," +" ou {ph4}abrir um problema GitHub{ph5} para bugs e solicitações de recursos." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Participe da comunidade" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Compartilhe investigações e obtenha ajuda de outros usuários do REA no " +"Discord . Siga REA em X para atualizações do projeto." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-engenharia reversa para o seu agente de codificação" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Engenharia reversa de aplicativos, binários e comportamento do navegador com" +" seu agente de codificação. Siga guias claros e experimente exemplos " +"interativos com REA ." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Copiar o aviso de instalação do REA" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Comando Copiar configuração" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Siga a análise manual da calculadora" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Pergunta percentual da calculadora de cópia" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Mini-jogo de dinossauros. Use o botão de salto ou pressione espaço enquanto " +"o jogo está focado." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Copie o alerta da análise do dinossauro" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Escolha o cálculo" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Cópia Calculadora análise prompt" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Copiar pedido de Projecto do website" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Copiar o prompt de reconstrução do jogo" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Casa{ph1} / {ph2}Vitrines{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Estudo de caso · autenticador Aegis" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Como é que um autenticador{ph0}gerar um código de login?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Um código de seis dígitos muda a cada 30 segundos. Use REA para encontrar o " +"cálculo em um APK Android, em seguida, reconstruí-lo com um relógio que você" +" pode controlar." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * lançamento oficial APK * 6.9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Ver Aegis em GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "De um APK a um código que pode reproduzir" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * localizar a funcionalidade{ph1}{ph2}3.077 classes de métodos " +"geradores{ph3}{ph4} O REA procura o pacote e traça o código utilizado pelas " +"acções de apresentação e cópia.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * ler o cálculo{ph1}{ph2}Hora + chave da conta{ph3}{ph4} REA retorna" +" os métodos e padrões. O agente explica como se encaixam.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * reconstrução e verificação{ph1}{ph2}Muda o relógio. Cuidado com o " +"código.{ph3}{ph4}Uma nova demonstração do navegador reproduz a regra e " +"verifica-a em relação a casos de referência públicos.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "Neste estudo de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Pergunte ao seu agente{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Experimente o gerador de código{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Encontre o código com REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Leia o cálculo{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Verificar a reconstrução{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Inspecione você mesmo o APK{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Pergunte ao seu agente" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"O aplicativo mostra um código de login em mudança. Queremos encontrar {ph0}o" +" que o faz mudar{ph1} e reproduzir esse comportamento." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Um exemplo de prompt para o APK baixado, com a análise Android do REA " +"configurada. {ph0}Obter o APK e a configuração de análise{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Experimente o gerador de código" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"O aplicativo agrupa o tempo em {ph0}Blocos de 30 segundos.{ph1} Ele combina " +"o número do bloco com a chave da conta para gerar um código. A mesma chave e" +" bloco produzem o mesmo código." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Mova o relógio em 60 segundos" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Tempo" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "segundos" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Nosso exemplo de relógio ajustável" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "Bloco de 30 segundos" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Bloco" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 segundos{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Código gerado" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Chave de conta + bloco7 seis dígitos" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Tempo de exemplo, em segundos" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 segundos" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 segundos" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"Aos 59 segundos: {ph0}287082.{ph1} Aos 60 segundos: {ph2}359152.{ph3} Mover-" +"se dentro de um bloco deixa o código inalterado." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"A chave é fixa, pública {ph0}Dados do ensaio RFC 6238{ph1}. A demonstração " +"implementa o cálculo recuperado do APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"O diagrama mostra o resultado em 59 segundos. Habilite o JavaScript para " +"alterar o relógio." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Encontre o código com REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Reduzir o APK a três classes" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} é o candidato ao cálculo; os outros dois dizem respeito à barra de " +"progresso e às contas importadas. TOTP significa uma senha de uso único " +"baseada no tempo." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Ligue o gerador ao ecrã da aplicação" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA identifica a sobrecarga de carimbo de data / hora e encontra os " +"chamadores do método base. Inspecção {ph0} em seguida, mostra o visor " +"chamando {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"As solicitações mostram um caminho de entrada reduzido. Os nomes das classes" +" de resultado omitem o comum {ph0} prefixo." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Leia o cálculo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA devoluções {ph0}a conversão do relógio, as configurações padrão e os " +"métodos de geração.{ph1} Os construtores definem um intervalo de 30 segundos" +" e seis dígitos; o método timestamp transforma segundos em um número de " +"bloco." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Bloco de tempo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Chave + bloco" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Seis dígitos" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}O tempo escolhe o bloco.{ph1} Os segundos 30 a 59 dão o bloco 1. Aos 60" +" segundos, o bloco torna-se 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}A chave também é importante.{ph1} O gerador combina a chave da conta " +"com o bloco. Uma conta com uma chave diferente pode mostrar um código " +"diferente ao mesmo tempo." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Mantenha seis dígitos.{ph1} O restante após a divisão por 1.000.000 é " +"preenchido com zeros quando necessário, portanto, um código pode começar com" +" 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Excertos de vários métodos inspeccionados, com quebra de linhas para " +"exibição. O painel da direita é um Resumo Explicativo. {ph0} O código Aegis " +"é GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Dentro do gerador" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"O APK lançado coloca {ph0} em {ph1}. REA segue a chamada de {ph2} e retorna" +" este corpo; a fonte original chama o ajudante {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"O último byte hash seleciona uma posição. Quatro bytes nessa posição " +"fornecem um número positivo de 31 bits; a formatação reduz-o ao número de " +"dígitos solicitado. O último argumento do construtor seleciona a ramificação" +" de formatação de código introduzida pela compilação." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Comparar com a fonte de lançamento correspondente{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Verificar a reconstrução" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Reunimos os métodos Java retornados pelo REA selecionados em um pequeno " +"programa de teste. A sua produção correspondeu a uma reconstrução " +"independente em {ph0}133 casos de ensaio{ph1}, incluindo limites de bloqueio" +" de tempo e códigos que começam com zero." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Tempo de exemplo" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Código de seis dígitos" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 segundos" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 segundos" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"O gerador também corresponde aos seis casos de referência SHA-1 publicados " +"em {ph0}RFC 6238{ph1}. Verifique a implementação do navegador contra eles:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Executar verificações de referência" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Leia o cálculo da demonstração" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"Os casos de referência utilizam oito dígitos. O controlo verifica igualmente" +" os seus resultados de seis dígitos." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"A verificação executa métodos Java extraídos e a nova demonstração. O " +"Android APK foi inspeccionado estaticamente." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Inspecione você mesmo o APK" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Configurar REA {ph1} em macOS ou Linux, faça o download desses dois " +"arquivos na mesma pasta. Em Windows, use um ambiente Linux, como WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"A análise do Android precisa de um JDK 17 completo ou posterior. Selecione-o" +" com {ph0} ou {ph1}. Este caso utilizou o JDK 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Aponte REA para o ficheiro do fornecedor e inspecione o APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"O seu agente pode continuar através do REA do CLI utilizando o aviso acima. " +"Para MCP , adicionar {ph0} para o ambiente do servidor REA e reconecte-o." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Uma próxima pergunta: {ph0}o que acontece quando uma conta utiliza oito " +"dígitos ou um intervalo de tempo diferente?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Fontes" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Versão oficial do Aegis 3.4.3{ph1} · {ph2}Confirmação de origem " +"correspondente{ph3} · {ph4}Licença GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" +"{ph0}RFC 6238 casos de referência{ph1} · {ph2}Dados do teste de " +"demonstração{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Inspeccionado com o REA 6.1.0 em 9 de outubro de 2026. Trechos descompilados" +" são creditados ao Aegis; o diagrama, o resumo legível e a reconstrução do " +"navegador são novos materiais didáticos." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK engenharia reversa: códigos de Login-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Inspecione o Aegis Android APK com REA, recupere seu cálculo de código de " +"login de seis dígitos e tente uma reconstrução com um relógio ajustável." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK estudo de caso" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Copiar o prompt de exemplo Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Siga o cálculo do código de login" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Copiar comando de inspecção APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Casa{ph1} / {ph2}Vitrines{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Estudo de caso * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Encontre a bandeira em{ph0}um binário CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Use REA para inspecionar um pequeno verificador de bandeiras, transformar " +"suas regras em equações e encontrar uma entrada que faça o programa original" +" imprimir {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "" +"verificador Mascarado da bandeira dos quadrados * fácil * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Veja o desafio original" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "De um binário para uma resposta verificada" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * encontrar o cheque{ph1}{ph2}Cadeias de caracteres " +"extraterritoriais{ph3}{ph4} REA encontra o prompt, suas referências e o " +"código que aceita ou rejeita uma entrada.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * extrair as regras{ph1}{ph2}36 caracteres * 26 somas{ph3}{ph4} REA " +"retorna as instruções e os dados por trás de cada verificação. O Agente os " +"transforma em equações.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * resolver e executar{ph1}{ph2}Bandeira recuperada valuetech " +"Correct!{ph3}{ph4}Um script Python resolve as equações. REA captura o " +"programa original aceitando o resultado.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"O desafio é de joseph, publicado no repositório oficial da DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "Neste estudo de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Encontrar o código de verificação{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Leia uma máscara{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Montagem em código legível{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Resolver as equações{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Verifique a resposta{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Experimente você mesmo{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Encontrar o código de verificação" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"O folheto é um executável de 15 KB. Pede uma bandeira, depois imprime {ph0} " +"ou {ph1}. Comece com um simples pedido ao seu agente." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para analisar ms_flag_checker e encontrar o " +"sinalizador. Explique como funcionam as verificações e, em seguida, " +"verifique a resposta com o programa original.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Um exemplo de alerta, com o desafio baixado disponível localmente e uma " +"análise do provedor de programas de código de máquina conectado." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Siga o prompt de entrada para sua função" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"A referência dá ao Agente um local para investigar, mesmo que os nomes das " +"funções originais do executável tenham sido removidos." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Leia o verificador e seus dois ajudantes" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"O primeiro ciclo copia códigos de 36 caracteres. O ciclo de verificação " +"descodifica uma máscara, soma os códigos seleccionados e compara o resultado" +" com um número memorizado. Sua {ph0}- passos byte através {ph1} bytes dar 26" +" máscaras." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Estes são resultados seleccionados de uma nova análise REA. O caminho de " +"destino local é encurtado para exibição; os endereços referem-se à imagem " +"importada de REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Uma verificação revela um carácter" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"O verificador organiza o input numa grelha de 6-6. Uma máscara escolhe quais" +" células contribuem para uma soma. Sua codificação compacta usa números " +"negativos para pular células e números positivos para selecioná-los." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" +"A sétima verificação selecciona apenas uma posição. {ph0}Figura aberta{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Leia a máscara e seu alvo a partir do binário" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"A instrução {ph0} lê bytes de máscara como valores assinados. É por isso que" +" {ph1} meios -21. O alvo é um número inteiro little-endian. Juntos, esses " +"bytes informam ao agente que {ph2}, então esse personagem é {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Das instruções a um controlo legível" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Selecione uma etapa para conectar o Auxiliar de soma e seu chamador à mesma " +"regra em C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Comece" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Seleccionar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Adicionar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Adiantamento" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Comparar" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * instruções originais selecionadas" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "C · resumo de uma verificação legível" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * Comece em zero.{ph1} {ph2} detém a soma corrente." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * Verifique a célula da máscara.{ph1} Um valor zero ignora o " +"caractere; um valor diferente de zero o inclui." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * adicionar um código de caracteres.{ph1} O número inteiro da " +"entrada no mesmo deslocamento é adicionado à soma." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * passar para a célula seguinte.{ph1} O loop original avança quatro " +"bytes por inteiro e visita seis linhas de seis células." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * comparar com o alvo armazenado.{ph1} O chamador recebe a soma em " +"{ph2}. Uma incompatibilidade salta para {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"As instruções vêm do Auxiliar de Somação e do seu interlocutor. O C é um " +"Resumo Explicativo com nomes descritivos e um loop de 36 células achatado." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Resolva as 26 equações" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"A maioria das máscaras seleciona várias células. Por exemplo, a primeira " +"verificação adiciona 16 códigos de caracteres e requer um total de 1441. As " +"seleções sobrepostas fornecem equações que um pequeno script Python pode " +"resolver juntos." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python * trecho do solver" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 é um solucionador que encontra valores que satisfazem essas equações. " +"Este excerto utiliza as verificações extraídas e assume uma {ph0} bandeira " +"com letras, dígitos, sublinhados e chaves. O download completo inclui todas " +"as 26 Máscaras e alvos." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Baixe o solucionador completo" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Verifique a resposta com o programa original" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"A captura de processo do REA regista o executável original que aceita o " +"sinalizador resolvido. Alterar um carácter seleccionado de {ph0} para {ph1} " +"faz a primeira soma 1440 em vez de 1441, e o programa rejeita-a." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Entrada" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Resultados observados" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Código de saída" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Bandeira do Solver" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Um caractere alterado" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Mostrar o sinalizador recuperado e a saída capturada" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * saída original do programa" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Copiar bandeira" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"O valor recuperado também corresponde ao sinalizador nos metadados do " +"Desafio publicados pelos organizadores, verificados após a resolução do " +"binário." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Fonte, identidade do alvo e dados de análise" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Nova análise e duas capturas de processo em 8 de outubro de 2026, utilizando" +" REA 4.1.0 com Ghidra 12.1.4 em Linux x64. O binário é um Elf x86-64 " +"despojado, 15.248 bytes." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"As referências, funções e constantes das cadeias de caracteres foram " +"inspecionadas antes da leitura da fonte ou solução dos organizadores. O " +"solucionador Python e o diagrama foram construídos a partir desses " +"resultados REA." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Compare com a fonte dos organizadores{ph1} · {ph2}Metadados do Desafio " +"e sinalizador{ph3} · {ph4} REA notas de prova{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Experimente você mesmo" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Baixe o desafio original e o solucionador em uma pasta. Use o prompt acima " +"para investigar com seu agente ou execute o script incluído." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Terminal * resolver e executar" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"O script imprime um sinalizador candidato; cole-o no prompt do programa. " +"Resolvendo necessidades Python e {ph0}. A execução do executável original " +"Precisa de Linux x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Configurar REA com o seu agente de codificação" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "" +"Engenharia reversa de CTF: Verificador Da Bandeira de DownUnderCTF-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Use REA para resolver o verificador de bandeira de quadrados mascarados do " +"DownUnderCTF. Encontre as funções de verificação, extraia as máscaras e " +"compare uma bandeira recuperada com o programa original." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "Estudo de caso CTF flag-checker" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Copiar o prompt de exemplo do CTF" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "Equação da máscara CTF; rolar horizontalmente em telas menores" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"A sétima máscara Pula 21 células, seleciona a posição 21 e, em seguida, Pula" +" 14. Só essa célula contribui para a soma. Seu código de caracteres exigido " +"é 55, o que significa que o caractere é 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Siga a verificação do CTF" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Copiar montagem CTF" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Cópia de verificação CTF legível" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Copiar trecho do solucionador CTF" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Copiar bandeira recuperada" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Copiar comandos do solucionador CTF" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Casa{ph1} / {ph2}Vitrines{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Estudo de caso * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Reconstrução DX-Ball {ph0}do seu executável." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"O objetivo é uma versão c sustentável do jogo Windows de 1996. REA ajuda o " +"agente a inspecionar o original, uma função de cada vez." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 * C * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Uma função, do executável ao verificado C. REA fornece as instruções, os " +"chamadores e as leituras dos dados; o projecto de reconstrução implementa e " +"testa o resultado. {ph0}Figura aberta{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "Neste estudo de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}O projecto{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Som pan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Verificando o resultado{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Continuar o trabalho{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "funções C mantidas" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "comparações com o código original" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "funções com correspondência de bytes compilados" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Ponto de verificação do projeto: 7 de outubro de 2026. {ph0}Razão de " +"progresso{ph1} · {ph2}Cobertura do ensaio{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "O projecto até agora" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"O código recuperado abrange a manipulação de placas e recursos, batidas de " +"tijolos, animações, partículas e produção de bônus. As compilações atuais " +"fornecem utilitários de inspeção e uma biblioteca de análise. O trabalho no " +"jogo jogável continua com física de bola e remo, manipulação de power-up e " +"integração Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Determinação do cálculo da posição sonora esquerda/direita" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Quando um tijolo é atingido, a sua posição horizontal é passada para o " +"código sonoro. A investigação necessária para recuperar a forma como essa " +"coordenada de ecrã se torna um valor de panorâmica esquerda / direita." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use o REA para descobrir como o DX-Ball calcula o " +"posicionamento do som estéreo. Explique o cálculo e mostre o " +"código.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Um exemplo de prompt para o seu agente de codificação, com o executável " +"local disponível. A investigação que se segue mostra as questões REA e os " +"elementos de prova subjacentes à resposta." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"O agente usou REA para inspecionar a função, seguir seu chamador de tijolo e" +" ler as constantes do executável. Esses resultados forneceram a entrada e a " +"aritmética necessárias para escrever a função C abaixo." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"O primeiro resultado da função para {ph0} pseudocódigo incluído declarando " +"{ph1} e chamando {ph2}. Sua visão de instrução mostrou uma entrada de pilha " +"e operações de ponto flutuante. Essa discrepância deu ao Agente uma razão " +"concreta para continuar a investigar." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "A primeira vista decompiladora" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"A saída mostra uma chamada de conversão. A leitura das instruções abaixo " +"revela a entrada e o cálculo que alimentam essa chamada." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Três perguntas respondidas através de REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Recuperar a entrada em falta" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"O resultado da função inclui instruções juntamente com pseudocódigo e " +"chamadores. Aqui, {ph0} expõe a entrada inteira ausente da visualização " +"decompiler." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Siga o chamador para entender a entrada" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA identificou este autor da chamada no primeiro resultado. Escala das " +"instruções anteriores {ph0} por 30; adicionar 20 dá a coordenada da tela do " +"tijolo, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Ler os valores por detrás dos endereços de memória" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Os bytes retornados estabelecem as duas constantes aritméticas e a escala " +"pan inicial. O agente agora tem os valores necessários para a expressão C." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "Das conclusões do REA até C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Siga os cinco passos abaixo. Cada seleção destaca as instruções originais e " +"as linhas C que informaram." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Entrada" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Multiplicar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Subtrair" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Escala" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Retorno" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Original x86 * excerto" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Reconstrução C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * leia a entrada.{ph1} A visualização da instrução no resultado da " +"função do REA diz {ph2} e utilizações {ph3} para carregar o número inteiro. " +"Seguindo seu chamador através de REA estabelece o significado da coordenada " +"de tela do parâmetro C {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * multiplicar por 1,5625.{ph1} {ph2} lê o duplo em {ph3}. Os bytes " +"devolvidos por REA {ph4} descodificar para {ph5}; o C usa a mesma constante." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * subtrair 500.0.{ph1} {ph2} lê o duplo em {ph3}. O resultado do " +"byte de REA descodifica para {ph4}, deslocando o centro do cálculo para " +"coordenar a tela {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * aplicar a balança armazenada.{ph1} O segundo {ph2} lê {ph3}. Esse " +"global é nomeado {ph4} na fonte mantida. O segundo byte lido de REA " +"estabelece o seu valor inicial de {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * retorna um número inteiro.{ph1} A chamada em {ph2} alcances {ph3}," +" identificado nos resultados do receptor do REA. O C lança o resultado para " +"{ph4}; comparações originais-x86 verificam o valor devolvido." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"O excerto de montagem seleciona as instruções de entrada, aritmética e " +"retorno. A lista completa abaixo também inclui os armazenamentos " +"intermediários e a configuração e limpeza de funções." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Conjunto completo e elementos de prova de apoio" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA resultado · 0x406400-0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "O que o chamador fornece" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"A função brick-hit em {ph0} dimensiona sua coordenada de bloco em 30, " +"adiciona 20 e, em seguida, empurra-a antes da chamada:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "O que os dados indicam" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA Byte lê, decodificado como Little-Endian duplica" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Endereço" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Valor" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Usado para" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Primeira multiplicação" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Subtração" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} inicialmente" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Escala armazenada da bandeja" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Gravado com REA 4.1.0 Para o alvo DX-Ball 1.07 fixado por hash. As notas de " +"investigação conexas conservam os IDs dos elementos de prova." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Fonte mantida{ph1} · {ph2}Notas de investigação e referências de " +"elementos de prova{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Verificação da função recuperada" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"A função recuperada passa por duas verificações: seus valores de retorno " +"correspondem ao original e seus bytes compilados correspondem ao executável." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3.205 casos de comportamento" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Os testes executam a função x86 original e comparam o seu valor de retorno " +"com o C mantido.cobrem todas as posições inteiras de 0 a 640 em cinco " +"escalas pan: 0, 0,5, 1, 20 e -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 bytes correspondentes" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"A função C é compilada com o conjunto de ferramentas VC4.0 fixado. O replay " +"do compilador corresponde à função completa após aplicar as relocações " +"revisadas e verificar as constantes referenciadas." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"Em uma escala de 1, o cálculo recuperado retorna -500 na borda esquerda, 0 " +"no centro e 500 na borda direita. A próxima parte do trabalho de áudio é " +"integrar esse valor com o back-end de som do jogo." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Leia os detalhes do replay do compilador{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Prosseguir o inquérito" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"A mesma abordagem está a ser utilizada para actualizações de partículas, " +"filas de explosão e geração de bónus: inspeccionar as funções relevantes, " +"recuperar o seu estado e dependências e, em seguida, comparar a " +"implementação com a original." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Para inspecionar você mesmo a função sound-pan, siga as instruções de " +"configuração do projeto DX-Ball e forneça seu alvo original correspondente. " +"Em seguida, execute:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "No checkout DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} Repositório DX-Ball{ph1}{ph2}Fonte actual, progresso e configuração " +"local.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} Fluxo de trabalho de análise REA{ph1}{ph2}Siga o cálculo e, em " +"seguida, use a mesma abordagem com seu próprio binário.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Partículas e produção de bónus{ph1}{ph2}Uma investigação maior sobre " +"Estado, filas e gravações de pixel.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball engenharia reversa: panorâmica sonora-REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Siga uma reconstrução DX-Ball da análise binária através de REA para C " +"mantido, testes originais-x86 e correspondência de bytes de função " +"compilados." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball sound-Pan investigation; deslocar horizontalmente em ecrãs mais " +"pequenos" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.A função EXE 0x00406400 é inspeccionada com REA . Um chamador brick-" +"hit fornece 20 mais 30 vezes tile_x. instruções carregue x, multiplique por " +"1,5625, subtraia 500,0, aplique pan_scale e retorne um inteiro. O C mantido " +"é verificado independentemente em relação ao x86 original em 3.205 casos e " +"por repetição do compilador VC4.0 correspondente a 63 bytes." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "Estudo de caso de reconstrução DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Copiar exemplo de pedido" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Seguir o cálculo da posição sonora esquerda/direita" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Copiar o excerto original da montagem" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Função de cópia de som-pan" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Copiar o conjunto completo da bandeja de som" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Copiar comando de análise DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Casa{ph1} / Vitrines" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA estudos de caso." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, Jogos, Electron e um desafio CTF, com código, números e resultados " +"verificados." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android * análise APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Como um autenticador gera um código de login" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Encontre o cálculo do código de seis dígitos do Aegis no seu APK lançado . " +"Rastreie os métodos de geração com REA e, em seguida, mova um relógio de " +"demonstração para ver por que o código muda a cada 30 segundos." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Leia o estudo de caso do Android" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * Análise de programas de código de máquina" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Resolver um verificador de bandeira CTF" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Inspecione um desafio DownUnderCTF fácil com REA . Encontre suas funções de " +"verificação, transforme Máscaras e somas em equações e verifique o " +"sinalizador resolvido com o programa original." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Leia o estudo de caso do CTF" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Nativo * Reconstrução" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball cálculo da posição sonora esquerda/direita" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Recupere um cálculo da posição sonora esquerda/direita de um jogo Windows de" +" 1996. As instruções do REA, as referências do chamador e as constantes " +"numéricas conduzem a uma pequena função C, verificada em relação ao " +"comportamento original e a todos os 63 bytes compilados." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Leia o estudo de caso DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * rastreio de características" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Como Notion copia texto e HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Rastreie uma API voltada para a página através do pacote Notion do " +"JavaScript . Siga seus wrappers IPC até a área de transferência do sistema e" +" veja como um pequeno marcador HTML mantém os dados de bloco ricos " +"conectados a uma cópia." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Leia o estudo de caso Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 dos * reconstrução" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Como TH04 aponta um anel de balas" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Inspecione o auxiliar angular de 16 bits original com REA . Combine suas " +"operações de multiplicação, divisão e coordenação com C++ legível e veja " +"como elas produzem um anel voltado para o jogador." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Leia o estudo de caso TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Guias passo a passo" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Os guias percorrem um cálculo nativo, uma exportação Electron e uma " +"solicitação do navegador. Cada um começa com um objectivo imediato e um " +"objectivo Concreto." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Leia os guias" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Estudos de caso de engenharia reversa-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Siga as investigações do REA por meio de código, figuras e demonstrações: um" +" autenticador Android, DX-Ball , Notion , TH04 e um verificador de " +"sinalizador DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Casa{ph1} / {ph2}Vitrines{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Estudo de caso * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Como cópias Notion{ph0}texto e HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Rastreie uma chamada da área de transferência da API da página do Notion, " +"através do processo de pré-carregamento e principal, até o gravador da área " +"de transferência do Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion Desktop 7.6.1 · JavaScript * REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "A ponte dentro do pacote de desktop do Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * API Virada Para página{ph1} {ph2}{ph3}{ph4} {ph5}O preload expõe " +"um método chamável.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * invólucro de pré-carga{ph1} {ph2}{ph3}{ph4} {ph5}O wrapper envia o" +" canal e os argumentos.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * manipulador do processo principal{ph1} {ph2}{ph3}{ph4} {ph5}O " +"destinatário verifica qual página o Enviou.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * área de transferência do sistema{ph1} {ph2}{ph3}{ph4} {ph5} " +"Electron escreve o texto fornecido e HTML.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Um canal une os dois lados: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"O código empacotado usa o mesmo canal na pré-carga e no processo principal. " +"A resolução dos invólucros revela as chamadas Electron por trás desses " +"nomes." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "Neste estudo de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Siga a Ponte da área de transferência{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Manter a estrutura de um bloco{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Mais exemplos e fontes{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Para onde vai a operação de cópia?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"A página vê um método chamado {ph0}. Sua implementação na pré-carga é um " +"invólucro. A questão útil é o que esse wrapper envia e qual código o recebe." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para rastrear como Notion copia texto e HTML para a " +"área de transferência do sistema. Mostre o código em cada " +"etapa.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Um exemplo de prompt com o pacote de aplicativos locais do Notion disponível" +" para o seu agente de codificação." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA descobre por onde começar a ler" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"A análise da pré-carga da guia com REA localiza a API exposta à página e a " +"chamada que envia uma solicitação IPC. Ambas as descobertas vêm com " +"intervalos de origem no pacote reduzido:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA constatações intesti dois lugares a abrir" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Campos seleccionados de um novo {ph0} resultado da pré-carga de tabulação do" +" Notion, registado com o REA 4.1.0. As posições usam a linha do pacote " +"original e a coluna baseada em zero." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"O agente abre esses locais, localiza o membro da área de transferência na " +"API montada e lê {ph0}. Seu local de chamada fornece {ph1}. Esse nome dá ao " +"agente algo preciso para procurar no pacote principal. Os quatro trechos " +"abaixo mostram a rota que liga." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Quatro pequenos pedaços de código" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Simplificado a partir do pacote JavaScript, com nomes de variáveis legíveis." +" Os membros independentes são omitidos." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Comece na API exposta à página" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Este membro fornece o nome do canal. A aplicação do {ph0} diz-nos como o " +"pedido sai do processo da página." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Resolver o wrapper da pré-carga" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"A função devolvida encaminha os argumentos através do IPC de pedido e " +"resposta do Electron. Podemos agora procurar {ph0} do lado do processo " +"principal." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Verificar como o recetor está registado" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"O processo principal utiliza outro invólucro. Sua {ph0} o método regista uma" +" {ph1} receptor para esse canal." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Encontre a gravação e a verificação do remetente" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Este é o destino. Depois de verificar o remetente, o manipulador passa os " +"dados fornecidos para a API da área de transferência do Electron. O canal e " +"os dois wrappers resolvidos conectam o método exposto a esta chamada." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Como é que um bloco copiado mantém a sua estrutura?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"O editor web do Notion envia texto e HTML através de {ph0}. Ele mantém os " +"dados do bloco localmente e coloca um ID no HTML copiado para conectá-los." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "Links HTML para dados de bloco salvos" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Leia o ID HTML" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Encontre o mesmo ID local" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Restaurar dados do bloco Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Texto ilustrativo e ID. O teste do módulo gravado restaura os dados do bloco" +" quando os IDs correspondem; uma entrada obsoleta retorna apenas texto e " +"HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"Ao colar, Notion procura o ID HTML e verifica-o em relação à cópia salva. Os" +" IDs correspondentes restauram os dados do bloco." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Formato da área de transferência gravado a partir de ativos da web " +"armazenados em cache em 13 de julho de 2026." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Mais exemplos e fontes" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Outro exemplo: tabelas de remarcação" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion analisa Markdown em dados de bloco. Este exemplo mostra como uma " +"tabela se torna cabeçalho e linhas de dados." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Uma tabela através do analisador Markdown do Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Saída gravada de um analisador Markdown extraído. A tabela torna-se linhas e" +" células." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Outro caminho: a conexão SQLite offline" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Pedidos do renderizador Notion {ph0} através do IPC. O processo principal " +"cria um canal de mensagem e fornece uma porta ao renderizador e a outra a um" +" processo utilitário SQLite. Os lotes de declaração subsequentes e os " +"resultados percorrem esse Porto." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"Após esta transferência, explica onde o trabalho do banco de dados é " +"executado e por que o rastreamento apenas da solicitação IPC inicial perde a" +" conversa posterior." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Fontes e como ler os excertos" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"A Ponte da área de transferência vem do Notion Desktop 7.6.1 {ph0}: a pré-" +"carga do separador e {ph1}. Os excertos expandem nomes de variáveis " +"minimizados e omitem código não relacionado; o auxiliar sender-check é " +"mostrado com seu subjacente {ph2} telefona." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Os exemplos de prancheta virtual e Markdown vêm de ativos da web armazenados" +" em cache em 13 de julho de 2026, incluindo módulos {ph0}, {ph1}, {ph2} e " +"{ph3}. Esses activos têm a sua própria versão. As sondas salvas executaram " +"módulos extraídos e pequenos chicotes de fios; suas saídas descrevem essas " +"sondas em vez de uma sessão de interface do usuário da área de trabalho " +"capturada." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"O resultado REA mostrado aqui é uma análise focada da pré-carga de tabulação" +" guardada, registada com o pacote REA 4.1.0 publicado. Ele localiza a API e " +"invoca a operação. O membro da área de transferência e o receptor " +"correspondente são conectados lendo suas implementações de wrapper no " +"Pacote." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"O exemplo Markdown usa o módulo parser {ph0}. Os testes de Módulo salvos " +"mostram que os filtros de página e de bate-papo preservam essa tabela. Os " +"analisadores paste/import, structured Markdown e AI/chat têm pontos de " +"entrada separados e formatos intermédios." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} Guia de Aplicação JavaScript{ph1}{ph2}Siga o recurso de exportação de " +"um pequeno aplicativo Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} Reconstrução DX-Ball{ph1}{ph2}Siga as instruções nativas para uma " +"função C verificada.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron engenharia reversa: prancheta-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Siga a API da área de transferência do Notion através da pré-carga do " +"Electron, invólucros IPC e processo principal, com trechos de código curtos " +"e uma olhada em seu Rico formato de área de transferência." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron estudo de caso" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Copiar o pedido de análise Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Copiar trecho de pré-carga Notion" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Copiar Notion invocar o excerto do Invólucro" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Copiar o excerto do invólucro do manipulador Notion" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Cópia Notion clipboard receiver excerto" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Restaurando dados ricos da área de transferência na pasta" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Ir para o conteúdo" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Casa{ph1} / {ph2}Vitrines{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Estudo de caso · Touhou 4: História da Lotus Land" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Reconstrução de TH04{ph0}padrões de bala." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Um anel de balas começa com um cálculo de ângulo curto. Use REA para " +"inspecionar a função DOS original e, em seguida, siga suas instruções em " +"C++legível." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 · 16-bit DOS * C++ e montagem" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Ver a reconstrução TH04" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Das instruções originais à fonte verificada" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * jogo Original{ph1}{ph2}Principal.EXE{ph3}{ph4}O executável PC-98 e" +" seu auxiliar de ângulo de bala.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * inspeccionar com REA {ph1}{ph2}Instruções + " +"referências{ph3}{ph4}Verifique o código dos carregado e leia o cálculo do " +"ângulo do executável.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * leia o c++{ph1}{ph2}Espaço * objectivo * rotação{ph3}{ph4}Ligar " +"cada operação à reconstrução mantida.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * verificar a fonte{ph1}{ph2}2.139 bytes correspondentes{ph3}{ph4}As" +" verificações do compilador gravadas cobrem o código de geração de " +"marcadores que contém este auxiliar.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA retorna o código original e sua evidência de análise. O projeto TH04 " +"fornece as verificações de origem e compilador mantidas." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "Neste estudo de caso" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}O anel bala{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}O que REA retorna{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Montagem Em C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Verificação da fonte{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}O projecto completo{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Como um anel visa o jogador" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"O ataque de Elly solicita um anel apontado Com uma contagem inicial de 16. " +"Um auxiliar calcula a direção de cada bala. O mesmo anel pode estar voltado " +"para uma direção fixa ou virar em direção ao jogador." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}O seu agente de codificação" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Copiar" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para descobrir como TH04 cria um anel de balas e o " +"aponta para o jogador. Explique o cálculo e mostre o código.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Um exemplo de prompt, com o executável original e o checkout de reconstrução" +" disponíveis localmente." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 armazena uma volta completa no sentido horário em 256 unidades do " +"ângulo. Para 16 marcadores, cada índice adiciona 16 unidades: {ph0}. " +"Adicionar a direção do jogador gira essas posições juntas." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Uma ilustração da matemática do ângulo recuperado para a contagem 16, " +"direção do jogador 40 e rotação do Modelo 0. {ph0}Figura aberta{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "O modelo de disparo na fonte recuperada" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Elly's ring attack * trecho da fonte" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Essas linhas selecionam o padrão antes da dificuldade e do ajuste de " +"desempenho. {ph0}Leia a fonte do ataque{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "O que REA retorna" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Nós inspecionamos {ph0}, a função que define a velocidade e o ângulo de cada" +" bala. REA retorna suas instruções, pseudocódigo e referências. Três partes" +" desse resultado explicam o padrão." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Verifique a imagem do DOS antes de ler seu código" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"A verificação vincula o código carregado e os registros de realocação ao " +"executável fornecido. O caminho acima é encurtado para exibição." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Leia o anel multiplicar e dividir" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} mantém o índice de marcadores. O deslocamento o multiplica por 256, " +"então a divisão usa a contagem lida de {ph1}. Os nomes de origem mantidos " +"nesse campo {ph2}. A sequência completa é apresentada abaixo." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Encontre onde o padrão gira em direção ao jogador" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Os operandos de instrução expõem duas diferenças de coordenadas e um " +"auxiliar de direção. O seu valor de retorno é adicionado ao ângulo relativo " +"do anel. Os nomes de origem tornam esses endereços legíveis; REA permite que" +" o agente verifique as operações originais por trás deles." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Da montagem ao C++legível" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Selecione uma etapa para corresponder às instruções originais com o cálculo " +"do ângulo. Este resumo segue a trajectória do anel visado; a fonte completa " +"também lida com spreads, stacks e padrões aleatórios." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Índice" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Espaço" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Objectivo" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Rodar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Loja" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * instruções originais de 16 bits" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "C++ legível · resumo do anel direcionado" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * leia o índice do marcador.{ph1} O argumento stack é carregado em " +"{ph2}. Num anel de 16 marcadores, este índice de membros vai de 0 a 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Espaço as direções em torno de uma volta completa.{ph1} {ph2} " +"multiplicado por 256. A contagem é zero-estendida em uma palavra, então " +"{ph3} divide o produto por essa contagem. Para a contagem 16, cada Índice " +"avança 16 unidades angulares." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * adicione a direção do jogador.{ph1} As duas subtrações formam " +"coordenadas Jogador-menos-origem. O Auxiliar de direção retorna um ângulo em" +" {ph2}; adicionando-o vira todo o anel em direção ao jogador." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * adicionar a rotação do padrão.{ph1} {ph2} adiciona o ângulo do " +"modelo. O modelo inicial de Elly o define como zero; outros padrões podem " +"usar o mesmo auxiliar com uma rotação." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * mantenha o ângulo final em um byte.{ph1} A loja escreve {ph2} para" +" o campo spawn-angle. Valores wrap após 255, assim como o elenco unsigned-" +"byte faz. A fonte circundante também converte este ângulo e velocidade em " +"velocidade." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"O conjunto selecciona a ramificação do anel de mira, o cálculo da mira e o " +"armazenamento final. O C++ acima é um resumo legível. As verificações do " +"compilador abaixo se aplicam à fonte mantida no projeto vinculado." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Leia o anel mantido e aim fonte" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Anel macro{ph1} · {ph2}Alvo e fonte de velocidade{ph3} · " +"{ph4}Representação do ângulo{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Verificação da fonte mantida" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"As verificações registadas do projecto TH04 compilam o código de geração de " +"marcadores, incluindo este auxiliar, com a sua cadeia de ferramentas Turbo " +"C++ 4.0 j fixada." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2.139 bytes correspondentes" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"O código compilado de geração de marcadores corresponde a uma seção de 2.139" +" bytes do executável original." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Duas construções limpas" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Duas compilações separadas produzem os mesmos bytes correspondentes. Os " +"hashes de entrada gravados correspondem à fonte mantida mostrada aqui." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Gravado em 3 de outubro de 2026. {ph0}Leia as verificações do " +"compilador{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Identidade-alvo e âmbito de análise" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Alvo Original" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156.258 bytes, dos MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Entrada auxiliar" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} na imagem carregada de REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Deslocamento do ficheiro Original" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, devolvido por {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Inspecção do Código registado" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 de outubro de 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"As verificações do compilador cobrem a seção completa do código de adição de" +" marcadores, incluindo este auxiliar. Eles também comparam a contribuição do" +" mapa e a deslocalização sobreposta." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA verificou a imagem estática de Carga Dos no segmento de carga {ph0}. Os " +"seus endereços descrevem essa imagem de análise. O resultado da função " +"reporta 503 bytes de corpo em dois intervalos num intervalo de 517 bytes; as" +" instruções seleccionadas acima situam-se nesses intervalos comunicados." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Os nomes de origem e as verificações do compilador vêm do ponto de " +"verificação TH04 {ph0}. As observações de reconstrução anteriores utilizaram" +" os próprios scripts de análise do projecto; esta página inclui uma nova " +"inspecção REA do mesmo alvo original. A identidade do jogo fornecido é " +"fixada por seu manifesto de repositório, com proveniência independente de " +"despejo intocado ainda aberta." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"A figura ilustra o cálculo do ângulo. Os controlos completos do jogo, a " +"temporização e o comportamento do hardware PC-98 têm verificações de tempo " +"de execução separadas no projecto de reconstrução." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "A reconstrução completa do TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"O projeto constrói os quatro produtos DOS do jogo a partir de C++ e assembly" +" mantidos. Além da geração de marcadores, a fonte abrange estágios, chefes, " +"renderização, entrada, menus, finais e manipulação de pontuação." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Explore o repositório TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Fonte de geração de marcadores{ph1}{ph2}O auxiliar completo, outros " +"tipos de padrões e ajuste de modelos.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}Guia de construção e execução do DOS{ph1}{ph2}Construa a fonte e " +"teste-a no fluxo de trabalho do emulador PC-98 do projeto.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Estado actual do projecto{ph1}{ph2}Verificação DOS e a porta x64 nativa" +" separada.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "Engenharia reversa de TH04: testes padrões da bala do DOS-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Inspeccionar o código DOS original de 16 bits do TH04 com o REA . Siga a " +"montagem e recuperou C++ para ver como um anel de balas é espaçado e apontou" +" para o jogador." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "Nesta página" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "Estudo de caso com padrão de marcadores TH04" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Copiar o prompt de exemplo TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 anéis de bala fixos e apontados; deslocar horizontalmente em ecrãs mais" +" pequenos" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Dois diagramas de um anel de 16 balas. O anel fixo começa no ângulo zero. " +"Adicionar uma direção de Jogador de 40 gira todas as direções na mesma " +"quantidade; o primeiro marcador destacado aponta para o jogador. Ambos " +"mantêm um espaçamento de 16 unidades de ângulo, ou 22,5 graus." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Copiar modelo de disparo TH04" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Siga o cálculo do anel direcionado TH04" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Copiar o excerto do conjunto TH04" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Cópia legível cálculo do anel destinado" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Voltar ao topo" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Copiar" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Copiados" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Seleccionado" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Código copiado para a área de transferência." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Código seleccionado. Use o teclado para copiá-lo." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA em GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Distância {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Bata em um cacto. Tente outra velocidade." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Espaço ou salto" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Jogar novamente" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Jogar" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Pausa" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Pressione Play e, em seguida, salte sobre o cacto." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Bata em um cacto. Pressione Play novamente ou altere a velocidade e " +"reinicie." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "A correr. Espaço ou salto limpa um cacto." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Parou. Prima Play para continuar." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Velocidade fixa: {speed}. Espaço ou salto limpa um cacto." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Velocidade fixa: {speed}. Pressione Play para tentar." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Regra recuperada: comece em 6, depois aumente para 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Velocidade fixa: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Repetiu a regra recuperada. Todos os quatro valores correspondem à " +"verificação do jogo original controlada quando arredondados para três casas " +"decimais." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"O replay difere dos valores registados no jogo original. Compare a regra de " +"velocidade e as configurações acima." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} segundos" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} segundos, bloco de tempo {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"O cálculo interativo não está disponível neste navegador. O exemplo mostra o" +" código em 59 segundos." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Controlo…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} controlos aprovados (seis casos de referência, com seis e" +" oito algarismos)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "" +"Não foi possível efectuar os controlos de referência. Tente outra vez." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Um analista a pensar num computador" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Uma verificação revela um carácter" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"A sétima máscara selecciona apenas a posição 21 na grelha de entrada seis " +"por seis. Seu código de caracteres deve ser igual a 55, portanto, o " +"caractere é 7. As outras máscaras selecionam posições diferentes e fornecem " +"outras equações." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "" +"A sétima verificação. Os rótulos das células são posições de entrada, a " +"partir de 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Máscara codificada: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Pular 21 células. Seleccionar 1. Saltar 14. Pare em 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Apenas uma célula contribui para esta soma" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "A posição 21 do pavilhão deve conter 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Seleccionado: uma célula" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 máscaras dão 26 equações." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Resolva-os juntos para encontrar a bandeira." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball sound - Pan investigação" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA fornece a instrução, o chamador e a evidência de leitura de bytes para " +"uma função DX-Ball. Uma entrada de pilha é multiplicada por 1,5625, " +"compensada por 500, dimensionada e convertida em um número inteiro. C " +"mantido é verificado em 3.205 casos originais-x86 e uma repetição separada " +"do compilador de 63 bytes." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Pilha" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "entrada x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "Inteiro" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "retorno" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Função reconstruída" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "C reconstruído" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Na colisão" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Código original" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "comparação" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3.205 testes" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Build VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 bytes iguais" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA fluxo de investigação" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Faça uma pergunta sobre um alvo local. O REA inspeciona e rastreia por meio" +" de adaptadores de análise locais, retorna evidências e suporta perguntas de" +" acompanhamento conforme o agente explica, implementa e testa." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Pergunte" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Agente + arquivo local" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "App / arquivo / navegador" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Analise e rastreie" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Leia as evidências" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Código / referências /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "incógnitas" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Aplique" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Seu agente" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Explique / crie / teste" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Ferramentas RE" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Adaptadores locais" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Próxima pergunta" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: espaçamento e mira de um anel de balas" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Uma volta completa no sentido horário tem 256 unidades de ângulo. Dezesseis " +"balas começam em ângulos zero, dezesseis, trinta e dois, até 240. " +"Adicionando um exemplo de direção do jogador de quarenta voltas todas as " +"dezesseis direções juntas; os primeiros pontos de bala para o jogador. A " +"rotação do modelo é zero." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Anel fixo" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Primeira bala: ângulo 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Anel destinado" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Primeira bala: direção do jogador" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Centro" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Jogador" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Mesmo espaçamento: 256 16 = 16 unidades angulares = 22,5" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Casos práticos" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Começar" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Guias" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Código-fonte" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Licença MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Participe da comunidade" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Siga no X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * fonte de script seleccionada" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Código-fonte" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Saída esperada do formatador" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Instruções" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Chamador" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Constantes" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Função C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Botão" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "API de pré-carregamento" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "Ficheiro CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "O seu clique" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Pedido capturado" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Script de exportação" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA resultado * resumo.excerto do ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "Trecho de instrução REA * 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "Trecho do chamador REA * 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "Resultados do byte REA * interpretados como duplos little-endian" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Excerto c * recuperado" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Veja como o REA funciona ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Guia de instalação" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Apresenta →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Definições seleccionadas a partir do script inspeccionado" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Resumo legível do manipulador %" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * instruções originais selecionadas" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "IDs do operador * fonte da Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Siga @reatools em X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Agente REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA extraterritorial * resultados seleccionados" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA7AGENTE * métodos e chamadores" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * java descompilado selecionado" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Resumo legível * interpretação do agente" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * gerateotp, corpo completo" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Baixar Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Baixar Android analysis provider" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Agente REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA extraterritorial * resultados seleccionados" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA7 agente * instruções seleccionadas" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Agente REA * read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA7agente * sétima entrada" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Executável Original * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Baixe o desafio original" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Baixar solver" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA resultado * excerto de pseudocódigo" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agente REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA7 agente * excerto de instruções" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA extraterritorial * excerto do autor da chamada" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Agente REA * dois {ph0} pedidos" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "Resultados do byte REA * descodificados como duplos" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Comece com o seu próprio alvo" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Gerar código" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Regra recuperada" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Relógio ajustável" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Binário" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Código de verificação" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Equações" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Correcto!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Executável" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "Conclusões do REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Recuperado C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Validação" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Aplicação empacotada" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "API exposta" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "Invólucros IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Área de transferência" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Código DOS Original" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "Instruções REA" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Cálculo do ângulo" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Anel bala" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "API da página exposta" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Chamada IPC do renderizador" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Enviado para a área de transferência do sistema" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Salvo localmente por Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Entrada de redução" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Saída do analisador estruturado * excerto" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Analise seu próprio aplicativo" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Agente REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA extraterritorial * campos seleccionados" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Agente REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA7 agente * excerto de instruções" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Resultado da mesma função * trecho aim" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "C++mantido correspondente" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Macro do anel * ramificação TH04, excerto" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Ângulo e velocidade * excerto da fonte" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Prima % para ver o que acontece com 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% de 200 é 20. Pressione = para adicioná-lo." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "Para multiplicação, 10 torna-se 0,1. Pressione = para multiplicar." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"A tradução está a ser actualizada. Leia esta página em inglês por enquanto." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para analisar {ph3} e explicar como exporta dados. " +"Mostrar o código relevante e os locais de origem.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Instale o REA e conecte-o a este agente de programação " +"usando {ph3}. Mostre primeiro as alterações propostas e espere minha " +"aprovação. Depois, verifique a instalação.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}Baixar {ph3} em uma nova pasta de exemplo e descompacte-a. " +"Use REA para encontrar o que acontece quando clico em Exportar notas. " +"Mostrar onde {ph4} está escrito, quais os campos que contém e os ficheiros e" +" linhas relevantes.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Instale o REA e conecte-o a este agente de programação " +"usando {ph3}. Mostre primeiro as alterações propostas e espere minha " +"aprovação. Depois, verifique a instalação.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Instale o REA e conecte-o a este agente de programação " +"usando {ph3}. Mostre primeiro as alterações propostas e espere minha " +"aprovação. Depois, verifique a instalação.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Use REA para inspecionar {ph3}. Clonar este site para " +"mim.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Reconstrução * {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"Com {ph0} e npm disponíveis, execute a configuração, escolha o seu agente de" +" codificação e revise as alterações propostas." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Um exemplo fornecido * {ph0} e npm * seu agente de codificação" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Use um agente de codificação como Claude Code, Codex ou Cursor. Você vai " +"precisar {ph0} e npm; o {ph1}guia de configuração lista as versões " +"suportadas{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Página · {ph1}{ph2}{ph3}Notas de exportação{ph4}{ph5}Chamadas " +"{ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Ponte · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Envia uma mensagem nomeada para o" +" processo principal.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Handler · {ph1}{ph2}{ph3}Escrever {ph4}{ph5}{ph6}Chama o formatador em " +"{ph7} e escreve o ficheiro.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * linhas 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Prever o CSV para uma nota com id 1 e título {ph3}. Em " +"seguida, execute o exemplo {ph4} formatador com {ph5} para verificar. " +"Mostrar a previsão e o resultado real.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"O título permanece num campo entre aspas; cada aspa é duplicada. Isso " +"verifica o formatador diretamente com {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV formatador" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Você vai precisar {ph0} 22 (22.19+), 24 (24.11+) ou 26+. npm vem com {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "Não tem {ph0}, ou não tem certeza?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Se {ph0} imprime v22. 19+, v24.11+ ou v26+, está pronto. Se imprimir uma " +"versão mais antiga ou\" não reconhecido \" / \"comando não encontrado\", " +"instale {ph1} 24 LTS:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * exemplo de excerto da fonte" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Abra o exemplo{ph1} · {ph2}Baixar {ph3}{ph4} · {ph5}Baixar {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * fonte de exemplo" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Baixe o exemplo e descompacte-o. O arquivo contém o arquivo completo {ph0} " +"pasta. Analise-o com {ph1} e npm; Electron não é necessário para este " +"exemplo." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Primeira vez, ou ausente {ph0} ou um agente de codificação? {ph1}Siga o Guia" +" de configuração passo-a-passo7{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "Por exemplo: {ph0}por que a calculadora retorna 220 para {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizar REA para inspecionar Windows Calculadora. Por que " +"{ph3} dão 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * carregado {ph0} * linhas seleccionadas" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Vimos porquê {ph0}{ph1} dá 220.{ph2} Agora vamos recuperar as regras tanto " +"para + quanto para7ivi, e testá-las." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA lê {ph1}{ph2}{ph3}Ele lança o aplicativo " +"Calculadora{ph4}{ph5}O código abre {ph6}. Em seguida, o agente seleciona a " +"biblioteca do aplicativo instalado.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Utilizar REA inspeccionar o aegis-v3. 4.{ph3}. Descubra como" +" ele gera o código de login de seis dígitos, explique por que ele muda a " +"cada 30 segundos e reconstrua uma pequena demonstração onde posso alterar o " +"tempo.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view / {ph0} * membro da API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view / {ph0} * IPC helper" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "principal/{ph0} * handler helper" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "principal/{ph0} * receptor da área de transferência" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Reconstrução * dino-speed.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Com Node.js e npm disponíveis, execute a configuração, escolha o seu agente " +#~ "de codificação e revise as alterações propostas." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Um exemplo fornecido * Node.js e npm * seu agente de codificação" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Use um agente de codificação como Claude Code, Codex ou Cursor. Você vai " +#~ "precisar Node.js e npm; o {ph0}guia de configuração lista as versões " +#~ "suportadas{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Página * renderizador.js{ph1}{ph2}Notas de exportação{ph3}{ph4}Chamadas" +#~ " {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Ponte * pré-carga.js{ph1}{ph2}{ph3}{ph4}{ph5}Envia uma mensagem nomeada" +#~ " para o processo principal.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Manipulador * principal.js{ph1}{ph2}Escreva notas.csv{ph3}{ph4}Chama o " +#~ "formatador em {ph5} e escreve o ficheiro.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Prever o CSV para uma nota com id 1 e título Olá, \"REA\". " +#~ "Em seguida, execute o formatador toCsv do exemplo com Node.js para " +#~ "verificar. Mostrar a previsão e o resultado real.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "O título permanece num campo entre aspas; cada aspa é duplicada. Isso " +#~ "verifica o formatador diretamente com Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV formatador" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Você precisará de Node.js 22 (22.19+), 24 (24.11+) ou 26+. npm vem com " +#~ "Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "Não tem Node.js, ou não tem certeza?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Se {ph0} imprime v22. 19+, v24.11+ ou v26+, está pronto. Se imprimir uma " +#~ "versão mais antiga ou\" não reconhecido \" / \"comando não encontrado\", " +#~ "instale Node.js 24 LTS:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Abra o exemplo{ph1} · {ph2}Baixar exportação.js{ph3} · {ph4}Baixar " +#~ "notas.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Baixe o exemplo e descompacte-o. O arquivo contém o arquivo completo {ph0} " +#~ "pasta. Analise-o com Node.js e npm; Electron não é necessário para este " +#~ "exemplo." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Primeira vez, ou ausente Node.js ou um agente de codificação? {ph0}Siga o " +#~ "Guia de configuração passo-a-passo7{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "" +#~ "Por exemplo: {ph0}por que a calculadora retorna 220 para 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilizar REA para inspecionar Windows Calculadora. Por que " +#~ "200 + 10% dão 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Vimos porquê {ph0}200 + 10% dá 220.{ph1} Agora vamos recuperar as regras " +#~ "tanto para + quanto para7ivi, e testá-las." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA lê calc.exe{ph1}{ph2}Ele lança o aplicativo " +#~ "Calculadora{ph3}{ph4}O código abre {ph5}. Em seguida, o agente seleciona a " +#~ "biblioteca do aplicativo instalado.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilizar REA inspeccionar o aegis-v3. 4.3.apk. Descubra como" +#~ " ele gera o código de login de seis dígitos, explique por que ele muda a " +#~ "cada 30 segundos e reconstrua uma pequena demonstração onde posso alterar o " +#~ "tempo.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view / preload.js * membro da API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view / preload.js * IPC helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "principal / índice.js * handler helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "principal / índice.js * clipboard receiver" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "principal.js * linhas 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "exportação.js * exemplo de trecho de origem" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "renderizador.js * fonte de exemplo" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "pré-carga.js * fonte de exemplo" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "principal.js * fonte de exemplo" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * índice carregado.js * linhas seleccionadas" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilizar REA analisar / absolute/path/to / app e explicar " +#~ "como exporta dados. Mostrar o código relevante e os locais de " +#~ "origem.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instalar REA e conecte-o a este agente de codificação usando" +#~ " npx rea-agents @ configuração mais recente. Mostre-me o plano de instalação" +#~ " para aprovação e, em seguida, verifique a instalação.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Baixar https://rea.tools/examples/notes-example.zip em uma " +#~ "nova pasta de exemplo e descompacte-a. Utilizar REA para descobrir o que " +#~ "acontece quando clico em Exportar notas. Mostrar onde as notas.o csv é " +#~ "escrito, quais os campos que contém e os ficheiros e linhas " +#~ "relevantes.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instalar REA e conecte-o a este agente de codificação usando" +#~ " npx rea-agents @ configuração mais recente. Mostre-me o plano de instalação" +#~ " para aprovação e, em seguida, verifique a instalação.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Instalar REA e conecte-o a este agente de codificação usando" +#~ " npx rea-agents @ configuração mais recente. Mostre-me o plano de instalação" +#~ " para aprovação e, em seguida, verifique a instalação.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Utilizar REA para inspecionar https://rea.tools/. Clonar " +#~ "este site para mim.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "código[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr " constantinople_escala" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA {ph1} {ph2}engenharia reversa de qualquer coisa{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/ru/messages.po b/website/locales/ru/messages.po new file mode 100644 index 000000000..1d2374e28 --- /dev/null +++ b/website/locales/ru/messages.po @@ -0,0 +1,13494 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Главная{ph1} страница / Блог" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Блог." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Мысли о реверс-инжиниринге." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Реконструкция игры{ph0}Сочинение" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "Промышленная революция в области реверс-инжиниринга" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"Чему меня научило руководство по обновлению и реконструкции TH08, TH095 и " +"TH04 об агентах, проверке и знаниях, которые используются в разных проектах." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Прочтите статью" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Автор: N0zoM1z0 · 10 октября 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Топ" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "Блог REA — Мысли о реверс-инжиниринге" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Размышления о реверс-инжиниринге, основанные на практическом опыте работы с " +"REA и агентами искусственного интеллекта." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA — Узнайте, как работает программное обеспечение. Обратное проектирование" +" с помощью вашего программиста." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Главная REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Основная навигация" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA на GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Присоединиться к REA в Discord" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Подписаться на REA в X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Главная{ph1} страница / {ph2}Блог{ph3} / Реконструкция Тохоу" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Эссе · Реконструкция Тохоу" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "Промышленная революция в области реверс-инжиниринга." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Автор: N0zoM1z0 · 10 октября 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Главное" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Предоставьте агентам самостоятельность в проведении расследования.{ph1}" +" Установите четкую цель и критерии приемлемости, а затем позвольте агенту " +"решить, что делать дальше." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Используйте репозиторий и Git в качестве рабочей памяти.{ph1} " +"Сохраняйте логику в коде. Контрольные точки Git позволяют продолжить " +"следующий сеанс после завершения диалога." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Позвольте доказательствам решить, что вы утверждаете.{ph1} Убедительное" +" объяснение все еще нуждается в проверке. “Неизвестно” - это правильный " +"ответ, когда доказательства неполны." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Проверьте также ссылку для проверки (oracle).{ph1} Попробуйте варианты," +" которые он должен отклонить. Если ошибка не обнаружена, просмотрите " +"предыдущие результаты, которые зависели от нее." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Мы находимся на заре промышленной революции в RE.{ph1} Методы все еще " +"разрабатываются. Нам еще многое предстоит изучить." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Как опыт соединяет" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Управление{ph1} персоналом · Цель и критерии приемлемости" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Самостоятельность" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Агент" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Выберите эксперимент.{ph0}Выдвиньте гипотезу." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Проверка" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Эталон проверки" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Тестирование на{ph0}конкретные ссылки." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Репозиторий" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Рабочая память" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Кодекс, доказательства,{ph0}проверки и уроки." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Несоответствие{ph0}{ph1}Пересмотрите гипотезу{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Лучше{ph0}{ph1}отправная точка{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Повторное использование" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Пройти{ph1} · Сохранить результат и его доказательства" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Каждый следующий проект становится лучшей отправной точкой. Это включает в " +"себя исправление проверок, когда мы обнаруживаем пробелы." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "В этой статье" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Август 2026 года{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08 : продолжение{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Два подхода{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095 : рецептура{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04 : различные архитектуры{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}От точного к удобочитаемому{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Промышленный сдвиг{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Что становится возможным{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Что изменилось в августе 2026 года" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"До этой работы я много занимался обратным проектированием вручную. Я " +"проверял функцию до тех пор, пока не находил объяснение, а затем тестировал " +"это объяснение в программе. Продвигаясь дальше, я тратил больше своего " +"времени на следующую функцию. Это также означало, что я держал в голове все " +"более объемную картину." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"Большая часть моей работы связана с играми. Я реконструирую их, чтобы можно " +"было понять их поведение и в конечном итоге перенести в программный порт или" +" мод. Именно этот опыт лежит в основе этой статьи. Этот метод может быть " +"полезен в других областях, но в каждой области необходимо установить, что " +"можно проверить с помощью надежных ссылок." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"В августе 2026 года я начал серьезно изучать RE, управляемый агентами. Я " +"хотел посмотреть, как далеко может продвинуться агент, имея доступ к " +"программе и обычным инструментам разработки. Touhou reconstruction " +"предоставила мне значительный проект, в котором я мог это выяснить." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Первые результаты были поразительными. Расследование могло бы продолжаться " +"без моего участия в выборе каждого отдельного шага. Неудачное сравнение " +"могло бы отправить агента к другому абоненту. Можно было бы написать " +"небольшую диагностику и использовать результат, чтобы решить, что делать " +"дальше. Предоставление этой свободы изменило ситуацию к лучшему: я смог " +"уделять больше внимания направлению проекта и тому, заслуживают ли доверия " +"его проверки." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"В первую очередь мое внимание привлек темп. Затем я начал задумываться о " +"том, что останется после текущего проекта. Будет ли в следующей игре полезно" +" все, что мы только что узнали?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08 : опора на человеческий труд" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08{ph1} , \"Вечная ночь\", начинался как продолжение " +"{ph2}реконструкции{ph3} GensokyoClub. Их открытый источник дал мне " +"существенную основу. Это пришло вместе со знанием конструкции и историей " +"вклада, которую я сохранил в продолжении." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"Импортированная история заканчивается на общедоступной контрольной точке 10 " +"августа. Мое самостоятельное продолжение началось 13 августа. К 19 августа в" +" журнале были зарегистрированы исходные данные для всех 1107 " +"идентифицированных игровых функций." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Играбельный порт реконструкции Linux был выпущен 24 августа, примерно через " +"одиннадцать дней после начала работы над продолжением. Затем была выпущена " +"веб-версия. 64-разрядная версия Linux для собственной версии вышла 30 " +"августа." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Что меня поразило, так это то, что в результате работы была создана " +"программа, которую могли запускать люди. Чтобы достичь этого, потребовалось " +"решить проблемы, выходящие за рамки отдельной функции. Даже если две функции" +" выглядели корректно по отдельности, они могли случайно использовать " +"отдельные копии state, которые должны были быть общими." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Это сделало проверку ссылок центральной в работе. Я называю их " +"{ph0}проверочными ссылками (оракулами){ph1}. Сравнение кода может сказать " +"нам, воспроизводит ли восстановленная функция исходные инструкции. Проверка " +"во время выполнения может сказать нам, достигает ли реализованный маршрут " +"ожидаемого состояния. Агент предлагает объяснение и проверяет его; " +"несоответствие дает ему возможность исследовать что-то конкретное." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Точное совпадение с неправильной константой" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Ссылка для проверки (oracle) - это программное обеспечение, которое кто-то " +"написал. TH08 дал мне четкое напоминание о том, как много может зависеть от" +" этого программного обеспечения." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"В сентябре ошибка, о которой сообщил порт коммутатора, снова привела к " +"автоматическому сбору предметов. В восстановленном источнике мощность " +"проигрывателя была проверена на уровне {ph0}. В оригинале использовалось " +"значение {ph1} - порог максимальной мощности." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"Нормальная мощность неотрицательна, поэтому проверка восстановленной " +"мощности фактически всегда выполнялась. Выше линии сбора игра могла " +"привлекать предметы, не требуя максимальной мощности. Другие исключения из " +"условия были верными. Эта константа изменила поведение." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}Тем не менее, функция уже прошла точное сравнение.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"При перестроении константа может быть помещена по другому адресу. Инструмент" +" сравнения учитывал это, корректируя адреса в скомпилированных инструкциях " +"перед их сравнением с исходными. Но он никогда не проверял значение с " +"плавающей запятой, сохраненное по указанному адресу." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Это оставило пробел в проверке. Это могло привести к тому, что " +"восстановленная команда указывала на исходное значение {ph0}, в то время как" +" в источнике по-прежнему указывалось {ph1}. Байты инструкции совпали. " +"Источник имел в виду что-то другое." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"Исправление, выпущенное {ph0}2 сентября, исправило{ph1} исходный код и " +"заставило при сравнении проверять фактические байты константы, на которую " +"ссылается ссылка. Затем был проведен более {ph2}широкий аудит{ph3}, в ходе " +"которого было проанализировано 1548 ссылок на константы с плавающей запятой." +" Было обнаружено еще двенадцать неправильных ссылок в пяти принятых " +"функциях." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"При сравнении теперь проверяется каждая такая константа с плавающей запятой." +" В тестах используются заведомо неверные значения, чтобы убедиться, что они " +"отклонены. Нам также пришлось пересмотреть результаты, которые прошли более " +"слабую проверку." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}Ссылка для проверки (oracle) также нуждалась в восстановлении.{ph1} Ее " +"исправление было частью обновления игры." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Это важно, когда команда состоит в основном из одного человека, работающего " +"с агентами. Я не могу лично проверять каждую строку, которую они создают, " +"поэтому во многом я доверяю их проверкам. \"Слепое пятно\" в системе общего " +"контроля (oracle) может повлиять на многие расследования, прежде чем я его " +"замечу. Я должен понять, что на самом деле проверяет средство проверки, и " +"протестировать его на предмет случаев, которые должны завершиться неудачей." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"По мере продолжения работы эти проверки становились частью репозитория. Так " +"же как и причины изменений исходного кода и примечания, которые позволяли " +"более позднему сеансу продолжить работу с того места, на котором " +"остановилась предыдущая сессия. {ph0}Репозиторий исходного кода становился " +"рабочей памятью проекта.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Успешный запуск пакета позволил нам восстановить код и улучшить среду " +"для следующего пакета.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Две разные идеи реконструкции" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"{ph0}Публичный сайт GensokyoClub явно выражает{ph1} свое несогласие с такого" +" рода работой. В уведомлении сообщается, что дальнейшая разработка будет " +"вестись в частном порядке до завершения. В одном отрывке говорится:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"Рост числа мошенников (декомпиляторов и портаторов искусственного " +"интеллекта) в этой области, основанный на нашей работе, создает плохую " +"картину для будущих усилий по декомпиляции…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"В уведомлении также описывается психологическая нагрузка на сопровождающих. " +"Их политика в отношении вкладов исключает запросы на перенос, сделанные в " +"основном с помощью искусственного интеллекта. Они посвятили свое свободное " +"время сложной работе, и эта работа помогла мне продолжить работу. Я уважаю " +"усилия, которые стоят за этим. Разногласия, которые я хочу обсудить, " +"касаются того, как должна проходить реконструкция и как следует оценивать " +"вклад." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"В привычном мне ручном рабочем процессе разработка понимания функции и ее " +"реконструкция обычно возлагались на одного и того же человека. Проект в " +"значительной степени зависел от опыта этого человека. Доверие к разработчику" +" имело значение, потому что большая часть рассуждений возникала во время его" +" работы." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Существующие проекты уже сохраняют знания в своих исходных текстах и " +"инструментах для создания. Что изменилось для меня, так это то, что агент " +"может использовать эти знания для проведения следующего расследования " +"самостоятельно." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"В своем продолжении я определяю цель и стандарт принятия результата. У " +"агента есть широкая свобода в проведении расследования. Затем предлагаемая " +"реконструкция должна пройти соответствующие проверки. Я хочу, чтобы другой " +"человек мог проанализировать, почему мы выбрали ту или иную реализацию, даже" +" если большую часть работы выполнил агент." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Это может быть трудным переходом. Годы тщательной работы могут стать основой" +" для дальнейшего развития, которое будет продвигаться гораздо быстрее. В " +"связи с этим возникают серьезные вопросы о кредитоспособности. Это также " +"меняет то, что необходимо знать разработчикам, прежде чем принимать вклад." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"Аналогия с промышленностью помогает мне задуматься над этим. В ремесле " +"большая часть процесса зависит от мастерства человека, который его " +"выполняет. Оборудование меняется там, где требуется этот навык. Кто-то все " +"равно должен разрабатывать процесс и распознавать, когда его результаты " +"неверны. Различные сообщества могут выбирать, какую часть этих изменений они" +" хотят взять на себя." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Мой выбор - продолжать открыто, с учетом унаследованной работы и сохранением" +" ее истории. Я хочу, чтобы новая работа была доступна для рецензирования. " +"Это дает нам возможность оценить, насколько далеко может зайти этот подход, " +"и извлечь уроки из того, что на этом пути идет не так." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Источник: {ph0}Уведомление GensokyoClub на README{ph1}, проверенное 10 " +"октября 2026 года, и его {ph2}политика в отношении взносов{ph3}. Цитата " +"является сокращенной выдержкой. {ph4}Титры и происхождение{ph5} TH08 " +"указывают на границу продолжения." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095 : опыт начинает накапливаться" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095{ph1}, Shoot the Bullet, значительно упростил восприятие этого " +"опыта. 29 августа началось его обновление с нулевыми подтвержденными " +"игровыми функциями в реестре. Нам все еще предстояло изучить игру. Но мы уже" +" знали гораздо больше о том, как начать реконструкцию и как поддерживать ее " +"в рабочем состоянии." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"К 7 сентября все 697 идентифицированных игровых функций имели исходный код. " +"К 8 сентября 696 были приняты в качестве точных сравнений. 9 сентября вся " +"программа была подключена. Реконструкция Windows i386 была отмечена как " +"играбельная 10 сентября, примерно через двенадцать дней после инициализации." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Я нашел это более захватывающим, чем скорость первого проекта. Новая цель " +"могла бы извлечь выгоду из работы над другой игрой. Опыт уже присутствовал в" +" инструментах и в том, как был организован проект." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Например, TH08 научил нас обращать внимание на собранную программу с самого " +"начала. Если несколько восстановленных функций зависят от одного и того же " +"состояния, их изолированное сравнение оставляет открытым важный вопрос. Нам " +"нужно увидеть, как они работают вместе. Этот урок помог нам сформулировать " +"подход к построению всей программы TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Урок, который остается у меня в голове, полезен, пока я там нахожусь. Как " +"только он становится проверкой, что можно запустить другой сеанс, он может " +"продолжать помогать и после того, как я перейду дальше. Следующий агент " +"может использовать результат, не повторяя расследование, которое привело к " +"нему." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Ошибка, связанная с константой с плавающей запятой, также относится к этой " +"памяти. Это объясняет, почему проверка ссылки также требует проверки данных," +" которые за ней стоят. Сохранение этого исправления в коде помогает " +"последующим проектам избежать \"слепого пятна\" старой проверки." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}Этот метод становится частью исходного материала для следующей " +"игры.{ph1} В следующем проекте мы можем потратить больше усилий на то, чтобы" +" внести что-то действительно новое в его цель." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Те же преимущества доступны для тех, кто присоединится позже. Они могут " +"просмотреть решение и повторно выполнить его проверку, прежде чем продолжить" +" работу. Им не нужно восстанавливать всю историю проекта, чтобы выяснить, " +"почему исходный код выглядит именно так." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "" +"TH04 : рабочий процесс функционирует в соответствии с другой архитектурой" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04{ph1}, разработчик Lotus Land Story, перенес эту работу в эпоху " +"PC-98 для DOS. Теперь целью была 16-разрядная среда с четырьмя " +"взаимодействующими программами. Для понимания поведения аппаратного " +"обеспечения требовались другие данные, полученные из игр Windows. " +"Существующая {ph2}работа{ph3} по ReC98 также дала нам ценные знания и " +"исходные материалы." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"Восстановление DOS теперь работает. В ходе моего ручного тестирования я " +"воспроизвел все обычные маршруты до их окончаний и проверил сохранения. В " +"настоящее время используется собственный 64-разрядный порт. При установке " +"рабочей версии DOS сначала указывается ссылка на этот порт." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"Архитектура изменила то, что нам нужно было исследовать. Это также изменило " +"компилятор и среду выполнения, с помощью которых мы проверяли нашу работу. " +"Но агент по-прежнему мог довести вопрос до результата и использовать этот " +"результат для следующего эксперимента." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Рассмотрим переход от игрового процесса к завершению. Нам нужно знать, какое" +" состояние переходит через эту границу и какая программа за это отвечает. " +"Это то, что мы можем исследовать на примере продукта DOS. Как только " +"доказательства и чеки будут доступны, агент сможет проработать вопрос во " +"многом так же, как это было с заголовком Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"Вот почему TH04 важен для нашего аргумента. Существенное изменение платформы" +" не заставило нас начать все сначала с нового способа работы. Архитектура " +"определила проблему; рабочий процесс по-прежнему давал нам возможность ее " +"решить." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Что касается 64-разрядного порта, то теперь мы можем сравнить новую " +"реализацию с поведением, уже восстановленным в DOS. Знания, полученные в " +"результате реконструкции, дают порту основу для дальнейшего развития." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Состояние проекта на 10 октября 2026 года: {ph0}реконструкция DOS и ручное " +"тестирование{ph1} · {ph2}64-разрядный порт{ph3}. Порт находится в " +"разработке." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "От точного кода к читаемому коду" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Как только реконструкция завершится, я хочу, чтобы кто-то еще смог это " +"понять." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Для меня ассемблер и необработанные смещения кажутся старыми друзьями. Я " +"понимаю, что это несколько необычное определение слова “читаемый”. " +"Большинство людей предпочли бы следовать логике игры, не держа в голове " +"расположение исполняемого файла в памяти." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"Именно здесь требуется {ph0}семантическая реконструкция{ph1}. " +"Восстановленное поле все еще может быть известно в основном по его смещению." +" Мы следим за тем, как оно используется в игре, пока не сможем объяснить его" +" роль. Затем мы можем дать ему осмысленное название и тип, который " +"соответствует доказательствам. Мы приводим доводы в соответствии с " +"источником, чтобы следующий человек мог понять, откуда взялась эта " +"интерпретация." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Это становится особенно важным для программного порта. Абсолютный адрес " +"указывает мне, где что-то находилось в старом исполняемом файле. Это мало " +"помогает 64-разрядной реализации решить, какому объекту должно принадлежать " +"это состояние. Чтобы безопасно изменить поведение, нам нужно восстановить " +"связь, стоящую за старым доступом к памяти." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "Порядок, который я сейчас использую, таков:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Восстановите точную базовую линию.{ph1} Скомпилируйте восстановленные " +"фрагменты с помощью исторического компилятора. Сравните соответствующий код " +"и данные с исходным исполняемым файлом. Запишите неразрешенные различия, " +"чтобы у следующего этапа была четкая отправная точка." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Создайте и играйте в нее на оригинальной платформе.{ph1} Объедините эти" +" фрагменты в реальную программу, используя оригинальную архитектуру и " +"компилятор. Используйте важные элементы геймплея. Именно здесь мы можем " +"обнаружить проблемы с общим состоянием или инициализацией, которые были " +"пропущены при сравнении изолированных функций." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Реконструируйте семантику в соответствии с обеими ссылками.{ph1} " +"Выделите одну связную часть игры за раз и выясните, что означает " +"восстановленный источник. Улучшите ее представление, сохранив точные " +"сравнения и воспроизводимую историческую структуру." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Создайте современный порт.{ph1} Перенесите устоявшееся поведение в " +"новую среду, например, в собственную 64-разрядную сборку. Реконструированная" +" игра на оригинальной платформе остается эталоном для сравнения поведения " +"порта." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"Воспроизводимая сборка, полученная на втором этапе, становится {ph0}второй " +"ссылкой для проверки (oracle){ph1} на третьем этапе. Первая ссылка для " +"проверки (oracle) проверяет, по-прежнему ли наш измененный исходный код " +"воспроизводит соответствующий исходный код и данные. Второй проверяет, что " +"восстановленная программа по-прежнему строит и ведет себя корректно в " +"соответствии с выбранными нами путями." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Они выявляют различные ошибки. Изменение типа может привести к изменению " +"сгенерированных инструкций. Смена владельца может привести к тому, что две " +"части игры будут использовать разные копии state. Если обе проверки будут " +"доступны, агенту не удастся провести расследование, прежде чем проводить " +"дальнейший рефакторинг." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Название само по себе требует подтверждения. Точное сравнение не может " +"сказать нам, действительно ли поле означает “время неуязвимости”. Мы должны " +"установить это по тому, как игра его записывает и использует. Если значение " +"остается неопределенным, нейтральное название будет более полезным для " +"следующего читателя, чем уверенное предположение." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Мы изучили этот порядок в ходе работы над проектами. У TH08 уже были " +"доступные для воспроизведения порты до некоторых более поздних проверок " +"исторических платформ. Это затрудняло выявление некоторых дефектов. " +"{ph0}Текущий рабочий процесс фабрики{ph1} ставит сборку исходной платформы " +"на первое место, поэтому semantic work может использовать ее в качестве " +"справочного материала перед началом переноса." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}Точная реконструкция дает нам ссылку. Семантическая реконструкция " +"позволяет использовать восстановленные знания.{ph1} Затем порт может " +"использовать и то, и другое." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Что делает это промышленным сдвигом" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Эти проекты изменили направление моего внимания. Как только агенты получили " +"возможность проводить большую часть расследований, улучшение их рабочей " +"среды стало одной из самых полезных вещей, которые я мог сделать. Более " +"совершенный инструмент мог бы помочь в любой последующей работе, которая в " +"нем нуждалась." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"Здесь важна самостоятельность. Полезный следующий шаг часто становится " +"понятен только после неудачного эксперимента. Агенту нужна достаточная " +"свобода, чтобы добиться результата в неожиданном месте. Если ему приходится " +"ждать, пока я назначу каждый шаг, большая часть работы остается в моем " +"распоряжении." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Я ожидаю, что агент выдвинет неверные гипотезы. Важно то, сможем ли мы " +"проверить их и извлечь уроки из результата. Неудачная проверка должна помочь" +" ему понять ошибку достаточно хорошо, чтобы повторить попытку. Мне все еще " +"нужно решить, соответствуют ли собранные данные этапу проекта." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA предоставляет агенту доступ к инструментам анализа. Вопрос о вызывающем " +"объекте функции может привести непосредственно к проверке этого вызывающего " +"объекта. Проект реконструкции предоставляет компилятор и свои собственные " +"проверки ссылок. Агент может использовать их, чтобы протестировать " +"предлагаемый им источник и посмотреть, соответствует ли его объяснение " +"действительности." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"Ошибка TH08 показывает, почему эти проверки сами по себе заслуживают " +"внимания инженеров. Когда одно и то же сравнение используется в сотнях " +"функций, пробел в нем может распространиться гораздо дальше, чем ошибка в " +"одной реализации. Тестирование средства проверки улучшает обратную связь, " +"доступную для всей последующей работы." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"Промышленная аналогия имеет здесь полезный исторический пример. {ph0}В 1796 " +"году Боултон и Уатт представили индикатор для паровой машины, который " +"помогал регулировать клапаны двигателя{ph1}. Версия для записи давления " +"отслеживала ход поршня. Это сделало доступным для контроля внутреннее " +"состояние двигателя. Наши инструменты сравнения служат той же цели: они " +"позволяют нам изучать, что делает оборудование, и одновременно " +"совершенствовать его." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Мы находимся на ранней стадии этого промышленного сдвига.{ph1} Большая " +"часть инфраструктуры все еще находится в стадии разработки. Агенты могут " +"работать быстрее, чем это предусмотрено нашими чеками, поэтому процесс " +"должен развиваться параллельно с ними. Когда мы обнаруживаем дефект в общем " +"инструменте, мы должны устранить его и пересмотреть результаты, на которые " +"он повлиял. Следующий проект может унаследовать более мощный инструмент." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Также существует практический предел для любого отдельного диалога. Он " +"завершится до завершения масштабной реконструкции. Хранилище исходного кода " +"должно обеспечивать возможность продолжения следующего сеанса без потери " +"причины, по которой было принято последнее решение." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"Проект {ph0}Touhou Reconstruction Factory{ph1} вырос из этой потребности. Он" +" дает проектам возможность совместно проводить проверки и извлекать уроки. " +"Работа над одной игрой может улучшить стартовые условия для другой." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"Именно это делает аналогию с промышленностью значимой для меня. Опыт " +"становится частью инструментов, которые могут использовать другие. " +"Совершенствование этих инструментов влияет на то, как много может сделать " +"следующий человек — или следующий агент." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Проекты, которые мы теперь можем рассмотреть" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Темп важен, потому что он меняет решение о начале работы. Игра может быть " +"увлекательной для реинжиниринга и все равно требовать от меня больше " +"внимания, чем я мог бы ей уделить. Многие проекты так и останутся идеями." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Теперь я вижу способ продвинуть такой проект с помощью повторных " +"исследований. Получение работающей реконструкции делает порт программного " +"обеспечения более практичным. Восстановление читаемой семантики облегчает " +"кому-то еще изучение мода. Усилия, затраченные на понимание игры, могут " +"окупиться после запуска первой версии." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Теперь я смотрю на незнакомую программу и спрашиваю: {ph0}какой доступ, " +"обратная связь и накопленные знания позволили бы агенту надежно работать с " +"ней?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Этот вопрос заставляет меня задуматься о проектах, которые я раньше оставил " +"бы в покое. Каждый из них может улучшить наш подход к следующему. Я хочу " +"продолжать изучать, как далеко это может нас завести." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Основные этапы и источники реализации проекта" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Даты описывают зарегистрированные контрольные точки проекта, сверенные с " +"общедоступной историей GitHub на 10 октября 2026 года. Прошедшее время - это" +" календарное время между фиксациями. Наличие исходного кода, точные " +"сравнения, сборка и результат выполнения - все это указывает на разные " +"этапы." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08:{ph1} {ph2}продолжение от 13 августа{ph3}, {ph4}исходный код от " +"19 {ph5}августа, порт Linux{ph6} от 24{ph7} августа, {ph8}веб-версия от 26 " +"августа{ph9} и {ph10}64-разрядный релиз Linux от 30 августа{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} исходная бухгалтерская книга за {ph2}29 августа, " +"{ph3}исходная бухгалтерская{ph4} книга за 7 сентября{ph5}, {ph6}сравнения за" +" 8 сентября{ph7}, {ph8}привязка за 9 сентября{ph9} и {ph10}запись о создании" +" игры за 10 сентября{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}передача от 10 октября{ph3} фиксирует восстановление " +"рабочей DOS, полное тестирование разработчиком обычного маршрута и текущую " +"64-разрядную фазу." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} Исправление TH08 verification reference (oracle):{ph1} {ph2}ошибка " +"автоматического сбора данных, {ph3}исправление{ph4} исходного кода и " +"сравнения{ph5}, а {ph6}также полный аудит констант с плавающей запятой{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Семантическая реконструкция:{ph1} {ph2}руководство по " +"удобочитаемости{ph3} TH08, {ph4}заводской порядок этапов и два пути " +"проверки{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Промышленная история:{ph1} в {ph2}архиве Группы научных музеев, " +"посвященном индикаторам паровых двигателей{ph3}, описывается введение в " +"эксплуатацию в 1796 году и механизм регистрации давления." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Метод:{ph1} в документах Factory по {ph2}автономии агентов{ph3} и " +"{ph4}знаниям о кросс-играх{ph5} сохраняются принципы работы и уроки." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "" +"{ph0}Дополнительные статьи{ph1} · {ph2}Ознакомьтесь с исследованием " +"TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Промышленная революция в области реверс—инжиниринга - REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 рассказывает о ручном реинжиниринге, реконструкции Touhou с помощью" +" агентов искусственного интеллекта и о том, как знания объединяются в TH08, " +"TH095 и PC-98, TH04 ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Опыт, накопленный в период между проектами" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Эссе о реконструкции Тохоу" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Главная{ph1}{ph2} страница/{ph3}Лаборатория скорости динозавров" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Проверить → перестроить → изменить" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Восстановите скоростное правило динозавра." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Чтобы воссоздать ускорение игры, сначала найдите правило, управляющее ее " +"скоростью. {ph0}REA вернул запущенный скрипт;{ph1} мы использовали его " +"правило для создания этой мини-игры с {ph2}регулируемой скоростью.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "На этой странице" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Играйте и меняйте скорость{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Прочтите восстановленное правило{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Проверьте реконструкцию{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Попробуйте провести анализ{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Играйте и меняйте скорость" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Нажмите Play, затем перепрыгните через кактус. Переместите ползунок " +"скорости, чтобы выбрать более медленную или быструю игру; она переключится " +"на фиксированную скорость. Выберите восстановленное правило, чтобы начать с " +"6 и постепенно увеличивать скорость снова." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Играть в воссозданную версию" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Играть" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Прыжок ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Начать заново" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Скорость" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Используйте правило восстановленного ускорения" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Первоначальное правило: начинайте с 6, затем увеличивайте до 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Перемещайте ползунок, чтобы установить собственную скорость. Пробел или " +"прыжок убирают кактус." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Включите JavaScript для воспроизведения реконструкции. Приведенный выше код " +"и пояснения остаются читаемыми." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Прочитал возвращенный скрипт REA" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Мы проверили {ph0}версию браузера wayou, основанную{ph1} на Chromium, с " +"помощью REA. Она вернула загруженный {ph2} index.js, включив эту ветку в " +"функцию обновления игры:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Заданы следующие параметры: {ph0}, {ph1} и МАКСИМАЛЬНАЯ {ph2}. Игра " +"запускает эту ветку в обновлении без каких-либо коллизий." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Используйте то же правило в новой игре" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Копировать" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Мини-игра использует эту функцию для автоматического ускорения. Перемещение " +"ползунка обеспечивает фиксированную скорость. Рисование, физика прыжков и " +"проверка столкновений с прямоугольниками - это новый код для этой обучающей " +"игры; его симуляция обновляется со скоростью 60 раз в секунду." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}Скачайте правила скорости{ph1} · {ph2}Прочитайте код игры{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Проверьте реконструкцию" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Мы запустили функцию обновления оригинальной игры с отключенными " +"препятствиями и автоматическим планированием. Сравните эти записанные " +"скорости с воспроизведением восстановленного правила." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Обновления" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Оригинальная игра" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Реконструированное правило" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Запустите проверку скорости" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Значения округлены до трех знаков после запятой. Ветвление проверяет перед " +"добавлением, поэтому конечное приращение может быть чуть выше 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Попробуйте провести анализ самостоятельно" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Настройте REA{ph1} с помощью вашего агента по кодированию." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Выполните {ph0}действия по подключению к браузеру{ph1}, используя {ph2} в " +"качестве URL-адреса страницы." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Укажите своему агенту URL страницы и локальную конечную точку отладки, затем" +" скопируйте это приглашение." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы ознакомиться с этой игрой про " +"динозавров. Почему она стала быстрее? Покажите правило скорости, а затем " +"создайте уменьшенную версию с регулируемой скоростью.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Задайте следующий вопрос: {ph0}“Где рассчитывается высота прыжка? Добавьте " +"элемент управления высотой прыжка в новую версию”.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Источник: {ph0}проверенный код скорости{ph1}, авторы Chromium. " +"{ph2}Авторское право и лицензия BSD{ph3}. REA 4.1.0 проверил запущенную " +"версию HTTP в Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome Игра про динозавров: перестроить правила скорости — REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Прочитайте правила скорости в игре про динозавров с помощью REA, перестройте" +" их, затем измените скорость и играйте." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Реконструкция скорости динозавра" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Мини-игра про динозавров. Используйте кнопку перехода или нажмите пробел, " +"пока игра сосредоточена." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Скопируйте восстановленное правило скорости" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Запрос на копирование результатов анализа динозавров" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Главная{ph1} страница / Часто задаваемые вопросы" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ по REA." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Настройка, обновления, анализ и устранение неполадок." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Темы" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Настройка и обновления{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Анализ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Диагностика{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Данные и обмен ими{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Настройка и обновления" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Как установить REA?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Терминал · настройка агента" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Копировать" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"Настройка регистрирует MCP-подключение REA и устанавливает соответствующий " +"навык анализа. После завершения перезапустите агента и передайте ему путь к " +"файлу и вопрос. Требования и шаги первого анализа описаны в {ph0}руководстве" +" по настройке{ph1}." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Какие агенты кодирования могут использовать REA?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Любой агент, поддерживающий локальные серверы MCP. Установка включает в себя" +" Claude Code, Claude для настольных компьютеров, Codex, Cursor, Gemini CLI, " +"Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot CLI , Command Code , " +"Grok Build , OMP и VS Code . Коннектор Grok-бота добавлен из его чата." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Подключите свой кодирующий агент{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Как обновить REA?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA релизы часто, включая исправления ошибок. Если вы установили CLI с npm:" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Терминал · установлен CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Выполните команду обновления настроек, указанную в обновлении. Если вы " +"настраиваете свой агент через {ph0}, запустите:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Терминал · настройка агента обновления" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Проверьте изменения и перезапустите агента. Подключение к REA использует " +"фиксированную версию пакета. Повторите настройку, чтобы агент перешёл на " +"новую версию. Для разового вызова CLI добавьте нужную команду после {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Устанавливается навык из навыков.этого достаточно?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"Навык предоставляет вашему агенту инструкции по расследованию. Запустите " +"{ph0}программу установки{ph1} REA, чтобы подключить сервер MCP и установить " +"соответствующий навык, затем перезапустите свой агент, чтобы он мог вызвать " +"инструменты." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Анализ" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "Что я могу проанализировать с помощью REA?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Начните с того программного обеспечения, которое у вас есть:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Собственные исполняемые файлы и библиотеки{ph1}: функции, сборка, " +"псевдокод и ссылки." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Приложения JavaScript и Electron{ph1}: модули, импорт, IPC и " +"расположение источников." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Страницы браузера{ph1}: скрипты, запросы и наблюдения во время " +"выполнения." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA также поддерживает рабочие процессы для управляемых сборок, приложений " +"APK для Android, встроенного ПО и упакованных ресурсов. {ph0}Смотрите " +"примеры проведенных исследований{ph1}." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Нужен ли мне Hopper, Ghidra или IDA?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"Для глубокого анализа программ с машинным кодом используется один из них. " +"Статический JavaScript и .NET inspection работают с предоставленными файлами" +" и не требуют анализа движка программ с машинным кодом." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Подключите существующую установку Ghidra или IDA или позвольте программе " +"установки обнаружить Hopper и предложить установку. Ваш хост и целевой " +"сервер определяют, какого провайдера можно использовать. {ph0}Настройте " +"анализ программ с машинным кодом{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Могу ли я использовать REA без кодирующего агента?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Да. В CLI используются те же рабочие процессы анализа. Для локального " +"приложения JavaScript или Electron:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Терминал · статический анализ приложений" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Замените путь на папку с извлеченным приложением или файл ASAR. " +"{ph0}Используйте CLI{ph1} для параметров установки." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "Какой код возвращает REA?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"Анализ машинного кода возвращает ассемблер и псевдокод, а также вызовы " +"функций, ссылки и нужные константы. Анализ JavaScript возвращает модули, " +"связи между ними и расположение в исходном коде." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Ваш агент использует эти результаты для объяснения поведения или написания и" +" тестирования реализации. {ph0}Расчет{ph1} DX-Ball и {ph2}проверка флага " +"CTF{ph3} показывают, как работает этот процесс." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "Что спросить у помощника?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Задайте ему локальную цель и одно поведение для изучения. Для приложения " +"JavaScript или Electron:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Замените путь на целевой. В {ph0}руководствах{ph1} приведены подсказки для " +"примеров в native, Electron и браузере." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Диагностика" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Почему мой агент не может видеть инструменты REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Перезапустите или повторно подключите свой агент после настройки. Проверьте " +"его регистрацию REA в {ph0}; для Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Терминал · проверьте одного клиента" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Замените {ph0} на свой идентификатор клиента, например, {ph1} или {ph2}. " +"Если в отчете отображается отсутствие или устаревшая регистрация, запустите " +"программу установки для этого клиента:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Терминал · исправление настроек одного клиента" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Просмотрите его план и перезапустите клиент. Если регистрация прошла " +"успешно, но инструменты по-прежнему отсутствуют, проверьте ошибку " +"подключения клиента MCP. {ph0}Дополнительная диагностика настройки{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Нужно ли мне сначала запускать Hopper?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA запускает Hopper, когда это необходимо для выполнения операции. На macOS" +" перед автоматическим анализом выполните первый запуск, выбрав " +"демонстрационный режим или активацию лицензии. {ph0}Смотрите раздел " +"Настройка собственного провайдера{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Что делать, если я нашёл ошибку?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Обновите REA{ph1} , перезапустите свой агент и повторите ту же задачу. " +"Возможно, проблема уже устранена в недавнем выпуске." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Если {ph0}проблема{ph1} не устраняется, укажите версию REA, операционную " +"систему, тип устройства, шаги для воспроизведения и вывод ошибки. Укажите " +"имя поставщика, если проблема связана с анализом программ с машинным кодом." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Данные и обмен ими" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "Загружает ли REA мое приложение?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA анализирует цели на вашем компьютере. Ваш агент получает результаты, и к" +" этим результатам применяется политика в отношении данных, установленная его" +" поставщиком моделей." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Как я могу поделиться примером или внести свой вклад?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"У вас есть полезный пример REA? Мы были бы рады его увидеть. Поделитесь " +"целью, своим вопросом, результатами и тем, как вы их проверили, в сообщении " +"о {ph0}проблеме{ph1} или {ph2}запросе{ph3} на обновление. Короткие выдержки " +"из кода и цифры помогают другим следить за ходом расследования." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Также приветствуются сообщения об ошибках, запросы функций, документация и " +"улучшения кода. Вы также можете обсудить пример в {ph0}сообществе{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "" +"Часто задаваемые вопросы по REA: Настройка, обновления и устранение " +"неполадок" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Ответы на распространенные вопросы REA: установка, обновления, инструменты " +"анализа, средства программирования, устранение неполадок и обмен примерами." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Часто задаваемые вопросы о REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Скопировать установочную команду REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Скопировать команду обновления REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Команда обновления настройки агента копирования" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Скопировать команду анализа REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Запрос на копирование примера анализа" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Скопировать команду диагностики клиента" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Команда настройки в области копирования" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Главная{ph1} / Ваше первое расследование" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Узнайте, куда отправляются{ph0}экспортированные заметки." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Используйте REA для проверки небольшого приложения, нажмите на кнопку " +"\"Экспорт заметок\" и проверьте одну деталь самостоятельно." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "В этом упражнении" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Настройка{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Спросите об экспорте{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Следуйте ответу{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Проверьте прогноз{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Задайте еще один вопрос{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Подключите своего агента к REA." + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Копировать" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Или запустите эту команду в своем терминале:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Ознакомьтесь с планом, одобрите настройку, затем перезапустите свой агент. " +"Вы уже подключены? Продолжение ниже." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Спросите, где записан CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"Примером может служить приложение Electron, состоящее из шести файлов, с " +"кнопкой {ph0}экспорта заметок{ph1}. Ваш агент может проверить его код, не " +"устанавливая и не запуская Electron." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Ваш агент загружает файлы и передает распакованную папку REA для проверки." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Пример загрузки ZIP-файла{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Если ваш агент не может загрузить файлы, распакуйте этот архив " +"самостоятельно. Укажите путь к папке {ph0} и задайте тот же вопрос об " +"экспорте." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Следуйте ответу обратно к коду" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Ищите краткое объяснение со ссылками на файлы и строки:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Кнопка отправляет сообщение {ph0}. Основной процесс форматирует заметки как " +"CSV и записывает {ph1} в папку загрузок пользователя. Это столбцы {ph2} и " +"{ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "От кнопки до устройства записи файлов" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"Статический анализ REA сопоставляет сообщение с его обработчиком. Адресат " +"считывается из кода." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Путь к файлу, средство форматирования и вызов записи находятся в этом " +"обработчике вместе. Попросите вашего агента показать эти строки, если в его " +"ответе они отсутствуют." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" +"{ph0}Посмотрите полную трассировку кода и записанный результат{ph1} REA." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Проверьте прогноз" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Столбцы CSV разделены запятой. Что происходит, когда заголовок заметки сам " +"по себе содержит запятую или кавычки?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Проведите проверку самостоятельно" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Откройте терминал в распакованной папке {ph0}:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Эта команда использует оболочку с поддержкой here-document, такую как Bash " +"или Zsh. Ваш агент может запустить тот же JavaScript в оболочке вашей " +"платформы." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Задайте еще один вопрос" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Попробуйте продолжить тот же разговор:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"Что произойдет, если файл не может быть записан? Вернитесь на страницу, " +"указанную в сообщении об ошибке." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Или предоставьте своему агенту собственное приложение и спросите об одной " +"кнопке, файле или поведении." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Как Notion копирует текст и HTML{ph1}{ph2} с помощью функции буфера " +"обмена в встроенном приложении Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Как DX-Ball рассчитывает расположение стереозвука{ph1}{ph2}, читайте в " +"оригинальных инструкциях и проверках реконструкции.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Устраните неполадки в программе установки или аналитическом{ph1}{ph2} " +"обновлении REA и проверьте соединение, если оно не работает.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Ваше первое исследование в области реверс—инжиниринга - REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Попробуйте REA в небольшом приложении для заметок. Настройте свой агент, " +"спросите, куда отправляются экспортированные заметки, и проверьте " +"форматирование CSV с примером заголовка." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "Ваше первое расследование REA" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Скопировать запрос на установку REA" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Команда настройки копирования" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Запрос на копирование заметок для расследования" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Скопировать запрос проверки CSV" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Команда проверки форматирования копии" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Главная{ph1} страница / Начало работы" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Настройте REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Подключите REA к вашему программисту или проверьте локальное приложение с " +"вашего терминала." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Откройте терминал и проверьте:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Терминал" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Копировать" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Оболочка PowerShell Windows" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Введите Y, если вас попросят принять условия. Закройте PowerShell, откройте " +"его снова, затем запустите {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Если позже PowerShell сообщит, что {ph0}\"запуск сценариев в этой системе " +"отключен\"{ph1}, когда вы запустите {ph2}, запустите это один раз и " +"повторите попытку:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Если вы используете Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Иначе:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Закройте терминал, откройте его снова, затем:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"Для установки потребуется {ph0} и {ph1} файл (в Debian/Ubuntu: {ph2}). " +"Закройте терминал, откройте его снова, затем:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Собственный пакет {ph0} вашего дистрибутива часто старше версии 22.19, " +"поэтому проверьте {ph1}, если вы используете его вместо этого." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Предпочитаете обычный установщик? Загрузите версию LTS с сайта " +"{ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Параметры настройки" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Подключите свой кодирующий агент{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Используйте CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Настройка анализа программ с машинным кодом{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Получение помощи{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Подключите свой кодирующий агент" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Запустите программу установки, чтобы подключить REA к вашему программисту. " +"Среди доступных клиентов Claude Code, Codex, Cursor, Gemini CLI, Windsurf, " +"Grok Build и другие поддерживаемые клиенты MCP. Коннектор Grok-бота добавлен" +" из его чата." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Новичок в кодировании агентов?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Программист - это помощник с искусственным интеллектом, который работает на " +"вашем компьютере, а не на вкладке браузера. Он может читать файлы и " +"выполнять команды, а также запрашивает их, прежде чем вносить изменения. " +"REA предоставляет ему инструменты для обратного проектирования." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Если у вас его еще нет, выберите его, перейдите на страницу установки и " +"войдите в систему:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code{ph2}{ph3} от Anthropic . Требуется платный тарифный " +"план Claude." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex{ph2}{ph3} с помощью OpenAI . Войдите в свою учетную запись " +"ChatGPT." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode{ph2}{ph3} , с открытым исходным кодом. Подключите " +"поставщика модели по вашему выбору." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Затем откройте его и скопируйте в него приведенное ниже приглашение. Прежде " +"чем что-либо изменить, агент запустит настройку REA и покажет вам план." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Или запустите программу настройки самостоятельно" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Как мне открыть терминал?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} откройте меню \"Пуск\", введите {ph2}PowerShell{ph3} и " +"нажмите Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} нажмите {ph2} {ph3}, введите {ph4}Terminal{ph5} и нажмите" +" Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0} Linux :{ph1} нажмите {ph2} {ph3} {ph4} на большинстве настольных " +"компьютеров." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Введите команду с помощью {ph0} {ph1} ( macOS : {ph2} {ph3}; Linux для " +"терминалов: {ph4} {ph5} {ph6}), затем нажмите Enter." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Выберите свой клиент и ознакомьтесь с планом настройки. REA добавляет " +"подключение MCP и соответствующий навык исследования, сохраняя резервную " +"копию существующей конфигурации. Перед применением изменений программа " +"запрашивает доступ." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "После завершения установки перезагрузите клиент." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Как мне перезапустить мой клиент?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Приложения для настольных{ph1} компьютеров (Claude для настольных " +"компьютеров, Cursor, Windsurf , VS Code ): полностью закройте приложение, " +"затем откройте его снова. Закрыть окно недостаточно. На macOS нажмите {ph2} " +"{ph3}; на Windows также завершите работу с помощью значка в трее, если он " +"есть." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Терминальные агенты{ph1} ( Claude Code , Codex , Gemini CLI ): выйдите " +"из сеанса и запустите его снова." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Укажите своему агенту целевой путь и задайте конкретный вопрос. Для " +"приложения JavaScript или Electron вы можете начать с:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Посмотрите на {ph0} и узнайте, как он экспортирует данные. Укажите точки " +"входа, вызовы и зависимости, а также исходные местоположения для ваших " +"результатов." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Замените путь на ваш локальный целевой объект." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Как мне получить полный путь к папке?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} в проводнике щелкните правой кнопкой мыши папку и " +"выберите \"{ph2}Копировать как путь{ph3}\". На Windows 10, удерживая Shift, " +"щелкните правой кнопкой мыши." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} в Finder щелкните правой кнопкой мыши папку, удерживайте " +"опцию и выберите {ph2}Копировать \"...\" в качестве пути{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Любая система:{ph1} перетащите папку в окно терминала, и появится путь " +"к ней." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "В терминале заключите путь, содержащий пробелы, в кавычки." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Используйте CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Проанализируйте папку приложения JavaScript или Electron или архив ASAR, не " +"запуская приложение:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Статический анализ приложений" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Замените путь на каталог вашего извлеченного приложения или файл {ph0}. В " +"Windows здесь работает путь, например {ph1}." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Где мне найти asar-файл приложения?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Приложения Electron обычно хранят его в папке {ph0}:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (щелкните правой кнопкой мыши приложение и выберите" +" {ph3}Показать содержимое пакета{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} часто {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Некоторые приложения устанавливаются в другом месте. Найдите в папке " +"приложения {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Результат идентифицирует приложение, показывает соединения между модулями и " +"указывает местоположение их источников. В результате отмечаются соединения, " +"которые REA не может разрешить." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Если вы хотите, чтобы в вашей оболочке была постоянная команда {ph0}:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Установите CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Продолжайте читать руководство по применению JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Настройка анализа программ с машинным кодом" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Программам с машинным кодом требуется локальный инструмент анализа. Выберите" +" и настройте один из приведенных ниже инструментов, затем укажите REA свой " +"исполняемый файл или библиотеку." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Выберите инструмент: Ghidra, Hopper или IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Используйте существующую версию Ghidra 12.1.x и 64-разрядную версию JDK 21 " +"или новее на Linux или macOS , на x64 или arm64. Для установки Ghidra " +"требуется собственный декомпилятор для архитектуры вашего хоста. Задайте " +"пути перед запуском программы установки:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Подключите вашу установку Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Подключение Ghidra · macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Замените оба пути на ваши существующие установки. Программа установки " +"проверяет их и записывает корректные настройки для выбранного вами клиента. " +"В Linux arm64 вам может потребоваться отдельно собрать собственный " +"декомпилятор Ghidra." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Подключите Ghidra к Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 имеет экспериментальную поддержку только для чтения собственных " +"приложений x86 и x64 PE и библиотек DLL на фиксированных локальных дисках " +"NTFS. Используйте существующую установку Ghidra 12.1.x и 64-разрядную версию" +" JDK 21 или новее:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Подключение Ghidra · Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Замените эти два пути вашими установками, затем просмотрите план установки." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Подключите Hopper к macOS или Linux. Запустите приведенную выше команду " +"установки; она обнаружит существующую установку или предложит план установки" +" для вашего одобрения." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"На macOS перед автоматическим анализом выполните первый запуск Hopper, " +"выбрав демонстрационный режим или активацию лицензии." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"В проверенных настройках IDA используется Windows с существующей " +"регистрацией MCP для подключенного графического интерфейса пользователя или " +"безголовой базы данных. Анализ Linux и macOS без учета данных остается " +"непроверенным." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Подключите существующую регистрацию IDA MCP" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Сохраните рабочую {ph0} вышестоящего сервера, {ph1} и необязательный {ph2} в" +" файле JSON. Также принимается существующий {ph3}объект mcpServers с записью" +" {ph4}. Укажите REA в этом файле перед установкой:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "Подключение IDA · Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"В прикрепленном профиле используются устаревшие инструменты версии 1.4.0, а " +"исходный двоичный файл уже открыт в IDA . В профиле headless используется " +"вышестоящий API database-supervisor и регистрация в {ph0}; для реальной " +"проверки используется супервизор IDA 9.3 Windows x64. Врач проверяет " +"регистрацию, не запуская IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Укажите REA исходный путь к исполняемому файлу с помощью {ph0} в запросе " +"CLI. Для агента включите {ph1} в среду регистрации REA и выберите IDA при " +"открытии двоичного файла." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "Для существующей настройки Ghidra проверьте функцию с помощью:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Функциональный анализ" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "Замените {ph0} на имя функции или адрес, который вы хотите проверить." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "Как работают сеансы анализа программ с машинным кодом" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Каждая команда CLI импортирует и анализирует двоичный файл, а затем " +"закрывает свой сеанс. Запросы MCP вашего агента повторно используют " +"импортированный двоичный файл, пока этот сеанс открыт." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Следуйте примеру анализа программ с машинным кодом{ph1}, чтобы увидеть," +" как результат функции приводит к восстановленному вычислению." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Получение помощи" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Если ваш агент не видит REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Перезапустите или повторно подключите клиент после установки. Проверьте его " +"REA-соединение с {ph0}; для Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Проверьте одного клиента" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Если поставщик услуг нуждается во внимании" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Проверьте, каким провайдером вы пользуетесь. Для Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Проверьте одного поставщика" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" +"В отчете содержится информация о неудачной проверке и предлагаемый следующий" +" шаг." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0}REA задаваемые{ph1}{ph2} вопросы по обновлениям, агентам и " +"анализу.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Выберите руководство по исследованию{ph1}{ph2} и примеры для двоичного " +"файла, приложения Electron и браузера.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Проблемы{ph1}{ph2} GitHub Сообщают о проблеме с командой и " +"диагностикой.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} REA Вопросы сообщества{ph1}{ph2}, расследования и текущая работа.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Установите REA и настройте Свой кодирующий агент" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Подключите REA к вашему программисту или воспользуйтесь локальным " +"приложением JavaScript или Electron с терминала. Настройка, первые вопросы и" +" инструкции для местных провайдеров." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Скопируйте проверку версии Node.js" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Скопируйте команду установки Node.js для Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Скопировать команду политики выполнения PowerShell" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Скопировать команду установки Homebrew Node.js" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Скопируйте команду установки fnm для macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Скопируйте 24 команды Node.js для macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Скопируйте команду установки fnm для Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Скопируйте 24 команды Node.js для Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA руководство по началу работы" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Скопировать запрос на установку REA" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Команда настройки агента копирования" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Скопировать команду анализа JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Скопировать команду установки CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Скопировать соединение с ghidra · macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Скопируйте подключение Ghidra для Windows PowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Скопируйте подключение IDA для Windows PowerShell" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Скопировать команду анализа собственной функции" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Скопировать команду диагностики клиента" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Команда диагностики поставщика копирования" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Главная{ph1} страница / {ph2}Руководства{ph3} / Обзор браузера" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Посмотрим, что произойдет{ph0}когда вы нажмете." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Используйте небольшое браузерное приложение для подключения действия, его " +"сетевого запроса и JavaScript, который создает загрузку." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "В этом руководстве" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Приведенный пример{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Откройте браузер{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Спросите своего агента{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Захват из CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Прочитайте запрос и скрипт{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Что происходит, когда вы нажимаете кнопку Экспортировать?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"В {ph0}примере браузера Notes{ph1} есть кнопка {ph2}экспорта заметок{ph3}. " +"При нажатии на нее загружается файл {ph4}, две заметки форматируются как CSV" +" и начинается загрузка." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "От клика до загрузки CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 · Вы{ph1}{ph2} нажимаете кнопку Экспорт заметок{ph3}{ph4} и " +"выполняете это действие в своем браузере во время выполнения записи.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 · REA{ph1}{ph2} Запишите запрос{ph3}{ph4}, захватите URL-адрес " +"запроса, статус ответа и структуру JSON с выбранной страницы.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 · Ваш агент{ph1}{ph2} прочитал экспортный код{ph3}{ph4}, " +"подключающий наблюдаемый запрос к {ph5} в {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Запустите запись, прежде чем нажать кнопку Экспортировать заметки." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Откройте Chrome с удаленной отладкой" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Откройте размещенный на хостинге пример Notes, используя отдельный профиль " +"браузера и локальный порт для отладки. На Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Запустите примерный браузер" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Копировать" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Используйте путь к исполняемому файлу вашего установленного браузера в macOS" +" или Windows . Вы можете заменить URL-адрес страницы на другую страницу, " +"которую хотите просмотреть." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA подключается к этому существующему браузеру. Вы сохраняете контроль над " +"страницей, выполняете действие и по завершении закрываете браузер." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Попросите своего агента посмотреть одно действие" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы просмотреть эту страницу, пока я " +"нажимаю \"Экспортировать заметки\". Какой запрос она отправляет и как " +"устроен CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Пример запроса. Укажите вашему агенту конечную точку отладки, {ph0} и URL-" +"адрес страницы. Пусть он запустит запись до того, как вы нажмете." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Ваш агент обнаруживает целевую страницу, запускает окно просмотра и " +"считывает полученные данные. Затем он может проверить сценарий, лежащий в " +"основе экспорта." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Или захват с терминала" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Найдите целевой идентификатор страницы:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Найдите нужную страницу" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Выберите целевой объект с помощью URL-адреса, приведенного в примере Notes. " +"Замените {ph0} ниже на его идентификатор, затем запустите:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Запечатлейте следующие десять секунд" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Дайте команде подключиться в течение нескольких секунд, затем нажмите " +"\"{ph0}Экспортировать заметки{ph1}\" в этом браузере. Результат появится " +"после завершения просмотра." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Полученный результат включает выбранную страницу, сетевую активность в " +"течение этого окна и форму ответа в формате JSON. Предыдущие запросы не " +"входят в этот список." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Прочитайте запрос и экспортируйте скрипт" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Записано с помощью REA 4.1.0 на примере local Notes" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Зафиксированный факт" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Ценность" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Запрос" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Ответ" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Инициатор запроса" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} · сценарий" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Структура ответа" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} с полями {ph1} и {ph2}" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Прочитайте загруженные скрипты" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"Запрос идентифицирует источник данных, и REA записывает export.js {ph0} " +"качестве инициатора запроса. Прочитайте захваченный исходный код сценария, " +"чтобы увидеть, как используются данные:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"Загрузка выполняется на странице с использованием ответа в формате JSON. Шаг" +" форматирования CSV выполняется из скрипта; сетевой анализ показывает, что " +"при этом щелчке запрашивался файл {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Найдите скрипт, который запрашивает файл {ph0}. Как он экранирует заголовки," +" содержащие запятые или кавычки?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Для установленного приложения JavaScript или Electron продолжайте работать с" +" рабочим {ph0}процессом приложения{ph1}, чтобы отслеживать файлы и границы " +"процессов." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Анализ браузера и сети — REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Наблюдайте за экспортом заметок с помощью REA: выберите страницу браузера, " +"зафиксируйте щелчок, просмотрите запрос и следуйте сценарию экспорта." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Наблюдение в браузере" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Скопируйте и запустите пример браузера" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Запрос на копирование примера" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Скопируйте найденную страницу" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Скопируйте запись на следующие десять секунд" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Копировать читать загруженные скрипты" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Главная{ph1} страница / Путеводители" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "Направляющие REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Проанализируйте встроенную функцию, экспорт Electron или запрос браузера. " +"Каждое руководство содержит подсказку, код и результаты." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Первое расследование" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Настройка REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Подключите свой кодировщик или используйте REA с терминала." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Начните работу с REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Программы с машинным кодом" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Восстановление расчета положения звука слева/справа" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Начните с исполняемого файла игры Windows. Ознакомьтесь с инструкциями, " +"следуйте за вызывающим пользователем, прочитайте числовые константы и " +"проверьте восстановленный C." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Руководство по анализу программ с машинным кодом" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript и Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Следите за экспортом CSV" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Небольшое приложение Notes объединяет в себе функции рендеринга, " +"предварительной загрузки и основного процесса. Используйте REA для " +"подключения API, IPC-канала и средства записи файлов." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "Руководство по JavaScript и Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Чтобы создать более крупное упакованное приложение, воспользуйтесь " +"{ph0}мостом буфера{ph1} обмена Notion." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Поведение браузера" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Наблюдайте за щелчком" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Откройте пример working Notes, запишите запрос на экспорт и найдите код, " +"который преобразует его ответ в загрузку." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Руководство по наблюдению за браузером" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Руководства по реверс—инжинирингу - REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Изучите REA на кратких примерах: собственные вычисления, экспорт Electron, " +"CSV и запрос из браузера." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "" +"{ph0}Главная{ph1} страница / {ph2}Руководства{ph3} / JavaScript и Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Проследите экспорт Electron {ph0} CSV." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Выполните нажатие кнопки на странице API, через Electron IPC, для записи " +"файлов CSV." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "В этом руководстве" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Приведенный пример{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Спросите своего агента{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Отслеживание экспортного кода{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Попробуйте на примере{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Проверьте устройство записи CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "Куда девается “Экспорт заметок”?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"В этом руководстве используется небольшое приложение Electron. При нажатии " +"кнопки {ph0}Экспортировать заметки{ph1} вызывается API на странице, " +"выполняется переход к основному процессу и записывается CSV . Поведение " +"распределено по нескольким файлам." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "Экспорт CSV в рамках процессов Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Средство визуализации → предварительная " +"загрузка{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} вызывает API, предоставляемый с " +"помощью {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Примечания: При экспорте предварительной загрузки вызывается IPC-канал:" +" именованное сообщение для основного процесса{ph1}{ph2}{ph3}{ph4}{ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Основной процесс{ph1}{ph2} - обработчик экспорта{ph3}{ph4}{ph5} main.js" +" обрабатывает этот канал и вызывает CSV writer.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} форматирует заметки → {ph1} записывает файлы для {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA сопоставляет буквальный IPC-вызов с его обработчиком и идентифицирует " +"открытый API. Путь выводится из кода; при перехвате во время выполнения " +"можно проверить, что выполняется." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Спросите об экспорте CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Подключите свой агент к REA{ph1} и передайте ему каталог приложений или" +" файл ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Копировать" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы узнать, что происходит, когда я " +"экспортирую заметки в это приложение. Где создан CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "Пример запроса. Укажите абсолютный путь к папке приложения или {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA считывает файлы приложения и создает карту точек входа, модулей и границ" +" процессов. Ваш агент использует эту карту, чтобы сузить область поиска до " +"функции экспорта." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Отслеживание экспортного кода" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "Страница вызывает небольшой API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"Странице известно имя метода. Реализация находится в предварительной " +"загрузке, которая предоставляет ее в распоряжение средства визуализации." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA записывает {ph0} и буквенный канал {ph1}. Он связывает этот вызов с " +"единственным соответствующим обработчиком в основном процессе." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"Чтение обработчика дает ответ на исходный вопрос: {ph0} заметки " +"форматируются, и основной процесс записывает файл {ph1} в папку загрузок " +"пользователя." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Записано с помощью REA 4.1.0 на примере, который можно загрузить ниже. " +"Расположение исходных текстов соответствует выводам API, канала и " +"обработчика." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Проанализируйте этот пример самостоятельно" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Пример загрузки ZIP-файла{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Просмотрите шесть исходных файлов" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Статический анализ приложений" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Замените путь на папку, которую вы распаковали. Вы должны найти один IPC-" +"канал и один соответствующий обработчик в {ph0}. Местоположения источников " +"указаны в {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Для вашего собственного приложения используйте ту же команду, указав его " +"каталог или путь к ASAR. Агент может использовать буквенную строку, имя API " +"или IPC-канал с помощью инструментов отслеживания функций REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Проверьте устройство записи CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Следуйте {ph0} в его обработчик. Какие входные данные поступают в CSV writer" +" и что произойдет, если запись файла завершится неудачей?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Используйте расположение источников для проверки этих сведений. Имена " +"вычисленных каналов и неоднозначные обработчики могут оставаться " +"неразрешенными; наблюдения во время выполнения дают вам другой способ их " +"изучения." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Воспользуйтесь мостом обмена{ph1} Notion и {ph2}примените тот же подход" +" к пакетному приложению Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Понаблюдайте, как браузер при экспорте{ph1}{ph2} фиксирует реальный " +"клик, и посмотрите, какой запрос он делает.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Выполнение нативной функции{ph1}{ph2} продолжается в двоичном формате, " +"когда функция зависит от нативного кода.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "Анализ JavaScript и Electron — REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Проследите экспорт Notes CSV с помощью API-интерфейса визуализации, " +"предварительной загрузки и обработчика IPC с помощью REA. Включает " +"загружаемые файлы примеров и проверенный результат анализа." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript и Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Запрос на копирование примера" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Копирование статического анализа приложения" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Главная{ph1} страница / {ph2}Руководства{ph3} / Анализ программ с " +"машинным кодом" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "Восстановить данные DX-Ball{ph0}расчет положения звука слева/справа." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Просмотрите исходные инструкции, определите входные данные и константы, " +"затем проверьте восстановленный C." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "В этом руководстве" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Приведенный пример{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Спросите своего агента{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Ознакомьтесь с результатами REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Восстановите и проверьте{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Используйте свой собственный двоичный файл{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Рассчитать расположение стереозвука слева / справа" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"В DX-Ball удар кирпича задает горизонтальное положение экрана. Звуковой код " +"преобразует его в значение поворота влево/вправо." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"Начальная функция, {ph0}, выдает короткий результат декомпиляции: вызов " +"функции {ph1}. REA также возвращает свои инструкции и вызывающие " +"устройства, которые дают агенту возможность найти недостающую арифметику." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Вы знакомы с этими условиями?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Инструкции:{ph1} шаги, выполняемые процессором, отображаются в " +"удобочитаемой форме, такой как {ph2} или {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Результат декомпиляции / псевдокод:{ph1} попытка инструмента анализа " +"преобразовать инструкции обратно в C-подобный код. В нем могут отсутствовать" +" отдельные части, как в этом примере." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Вызывающая функция:{ph1} функция, которая вызывает эту функцию. Она " +"показывает, какие значения передаются." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Адрес:{ph1} местоположение в программе, записанное в шестнадцатеричном " +"формате, например, {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Константы:{ph1} фиксированные числа, хранящиеся в программе, " +"считываемые как необработанные байты и декодируемые." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Три улики, один расчет" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 · Инструкции{ph1}{ph2} Целочисленный ввод{ph3}{ph4}, считываемый " +"стеком, предоставляет значение, используемое инструкциями с плавающей " +"запятой.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 · Вызывающий абонент{ph1}{ph2} - Экранная координата{ph3}{ph4}, по " +"которой вызывающий абонент, ударившийся кирпичом, проходит {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 · Байты данных{ph1}{ph2} Числовые константы{ph3}{ph4}, на которые " +"ссылаются байты, декодируются как {ph5}, {ph6} и масштабное значение.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA предоставляет инструкции, связь между вызовами функций и байты. Агент " +"интерпретирует их вместе." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Спросите о поведении" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"После {ph0}подключения REA к вашему агенту{ph1} и {ph2}настройки инструмента" +" анализа программ с машинным кодом{ph3} предоставьте локальный исполняемый " +"файл и вопрос:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Какой инструмент анализа мне следует использовать?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA нужен один из них для чтения собственных программ:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper{ph1} ( macOS или Linux ): Программа установки REA обнаруживает " +"его или предлагает установить. На macOS откройте Hopper один раз и выберите " +"демонстрационный режим или активируйте лицензию перед первым анализом." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra{ph1} ( macOS или Linux ; экспериментальная версия Windows ): " +"бесплатен, но требует существующей установки Ghidra 12.1.x и 64-разрядной " +"версии JDK 21 или новее." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA{ph1} ( Windows ): для существующей настройки IDA с регистрацией " +"MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Инструкции по настройке анализа программ с машинным кодом приведены в " +"разделе {ph0}Настройка анализа программ с машинным кодом{ph1}." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Копировать" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы узнать, как DX-Ball рассчитывает " +"расположение стереозвука. Объясните расчет и покажите код.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Пример запроса. Укажите своему агенту путь к локальному исполняемому файлу " +"DX-Ball 1.07. REA не включает DX-Ball, поэтому используйте свою собственную" +" копию или задайте такой же вопрос о другой небольшой программе Windows, " +"которая у вас есть." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Как мне получить полный путь к файлу?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} в проводнике щелкните файл правой кнопкой мыши и " +"выберите \"{ph2}Копировать как путь{ph3}\". На Windows 10, удерживая Shift, " +"щелкните правой кнопкой мыши." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} в Finder щелкните файл правой кнопкой мыши, удерживайте " +"опцию и выберите {ph2}Копировать \"...\" в качестве пути{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Любая система:{ph1} перетащите файл в окно терминала, и появится путь к" +" нему." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Ознакомьтесь с результатами REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Прочитайте входные данные" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Инструкции загружают целочисленный аргумент и преобразуют его в арифметику с" +" плавающей запятой. Это входные данные, отсутствующие в первом представлении" +" псевдокода." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Следуйте за звонящим" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA идентифицирует объект, на который упал кирпич. В предыдущих инструкциях " +"координата плитки умножалась на 30; добавление {ph0} (20) дает положение " +"кирпича на экране." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Прочитайте указанные константы" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"Арифметика ссылается на эти адреса. Считывание байтов позволяет получить " +"фактические значения; порядок команд сообщает агенту, как они используются." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Запишите и проверьте восстановленную функцию" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"При масштабе 1,0 позиции экрана 0, 320 и 640 преобразуются в -500, 0 и 500 " +"до преобразования в целое число. При вычислении центр экрана оказывается в " +"центре стереополя." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"Агент использовал результаты REA для написания кода C. Отдельные проверки " +"сравнили 3205 входных данных с исходной функцией x86 и воспроизвели все 63 " +"скомпилированных байта полной функции." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}Смотрите полное исследование и сравнение сборки с C{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Попробуйте это с вашим собственным двоичным кодом" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Подключите поставщика программ для анализа машинного кода{ph1}, затем " +"предоставьте своему агенту локальный исполняемый файл или библиотеку и " +"функцию для изучения. Полезные начальные вопросы включают в себя “Как " +"обрабатывается этот файл?” или “Какая функция выполняет это действие в " +"меню?”." + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Если вы уже знаете название функции или адрес, вы можете запросить его из " +"терминала. Для настроенной установки Ghidra:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Функциональный анализ" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Замените целевой путь и {ph0} на свое собственное имя функции или адрес. " +"Каждый вызов CLI импортирует и анализирует двоичный файл, а затем закрывает " +"свой сеанс. Запросы вашего агента MCP повторно используют импортированный " +"двоичный файл, пока этот сеанс открыт." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Прочтите псевдокод вместе с инструкциями и ссылками. Если в результате " +"остается нерешенным вопрос о вызове или значении, используйте это " +"местоположение в качестве следующего вопроса." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Собственный бинарный анализ — REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Восстановите собственные вычисления с помощью REA: просмотрите инструкции, " +"следуйте за вызывающим пользователем, считывайте константы и проверяйте " +"восстановленный C." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Анализ программ с машинным кодом" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Запрос на копирование примера" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Анализ функции копирования" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Настройка REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Настройка REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}Что такое ОГОНЬ?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Как помогает REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Игра в динозавров{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Калькулятор{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Попробуйте REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Узнать больше{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Помощь и обратная связь{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Сообщество{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Обратное проектирование с помощью вашего агента по кодированию" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Узнайте, как{ph0}работает программа." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA даёт вашему ИИ-помощнику инструменты для исследования программы и " +"объяснения её поведения." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "Уже знакомы с RE? {ph0}Перейти к руководствам по анализу →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Хотите копнуть глубже? {ph0}Читать блог →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Вставьте этот запрос в своего ИИ-помощника для программирования:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Копировать" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Или выполните эту команду в терминале:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "Проверьте и одобрите план изменений, затем перезапустите помощника." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Что такое обратная разработка?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Изучение того, как работает программа, через {ph0}исследование самой " +"программы.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"Цель: понять функцию достаточно хорошо, чтобы {ph0}объяснить ее{ph1}, " +"{ph2}изменить{ph3} или {ph4}перестроить заново.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "До REA · Вы исследуете {ph0}самостоятельно{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Декодирование ветвей" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Отслеживание вызовов" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Восстановите правило" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Оригинальные выбранные инструкции для x64 ·{ph1}{ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 · В каком филиале?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Два перехода в одно и то же место. Что это за " +"операторы?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Найдите идентификаторы команд, затем пометьте ветвь." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Разделить ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Умножить ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Что делают вызываемые функции?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"“100 - это чисто. Вызовы - это просто адреса. {ph0}Какой из них делится? " +"Какое значение входит в?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Проверьте вспомогательные функции и проследите сохраненные значения." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Делить" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 · Каково это правило?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"“Этот путь умножается на другие входные данные. Таким образом, {ph0}10% " +"означает 10% от 200{ph1} после +”." + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "Назовите операнды и проверьте оба пути к операторам." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Наглядное рассуждение эксперта" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Вы расшифровываете инструкции, выполняете вызовы функций и " +"восстанавливаете вычисления.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "С REA · Вы спрашиваете {ph0}своего помощника{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Всего один запрос." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Задайте помощнику вопрос {ph0}обычными словами.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Пример подсказки · Калькулятор" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Пример ответа · основан на результатах исследования" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "" +"После + кнопка % выводит {ph0}процентное значение от первого числа.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA предоставляет" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Инструкции обработчика, декомпилированный код и вызовы." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Помощник объясняет" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "Какая ветвь применяется, что она вычисляет и как ее перестроить." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Выберите сборку из установленной библиотеки DLL Calculator. Соображения и " +"ответ иллюстрируют полученные результаты. {ph0}Продолжим с примером с " +"калькулятором ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Давайте рассмотрим два примера.{ph1} Измените скорость игры, затем " +"вернитесь в калькулятор и перестройте его кнопку %." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Пример 01 · Игра в динозавров Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Почему динозавр ускоряется?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Цель" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Перестраивайте игру с {ph0}регулируемой скоростью.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Зачем его перепроектировать?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Чтобы воспроизвести его ускорение, нам нужно {ph0}правило в бегущей " +"игре{ph1}: как быстро оно начинается, насколько увеличивается и когда " +"прекращается." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Играть в воссозданную версию" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Играть" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Прыжок ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Начать заново" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Скорость" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Используйте правило восстановленного ускорения" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Первоначальное правило: начинайте с 6, затем увеличивайте до 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Перемещайте ползунок, чтобы установить собственную скорость. Пробел или " +"прыжок убирают кактус." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Включите JavaScript для воспроизведения реконструкции. Приведенный выше код " +"и пояснения остаются читаемыми." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA вернул" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Скрипт, фактически запущенный на странице.{ph1} Агент считывает свою " +"функцию обновления и настройки скорости, а затем использует это правило в " +"новой игре." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Пример подсказки · Игра в динозавров" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы ознакомиться с этой игрой про " +"динозавров. Почему она стала быстрее? Покажите правило скорости, а затем " +"создайте уменьшенную версию с регулируемой скоростью.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Проверенная цель: {ph0}версия браузера wayou, основанная{ph1} на Chromium." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Начните с 6.{ph1} Добавляйте 0,001 при каждом обновлении без сбоев, " +"пока скорость ниже 13.{ph2}{ph3}{ph4}{ph5}" + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Откройте лабораторию скорости →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Что делает каждая часть" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 · REA{ph1}{ph2} Считывает скрипт запущенной игры{ph3}{ph4} и " +"возвращает его действительный код и настройки агенту.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 · Ваш агент{ph1}{ph2} перестроит правило, добавит элемент " +"управления{ph3}{ph4} и использует восстановленное ускорение в небольшой игре" +" с ползунком скорости.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 · Вы{ph1}{ph2} меняете скорость и играете{ph3}{ph4} с оригинальным " +"ускорением, затем выбираете свой собственный темп.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Ознакомьтесь со сценарием, проверками и тем, как попробовать анализ" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA проверил версию HTTP-браузера через локальное отладочное соединение и " +"вернул загруженный {ph0}, включая его исходный код и дайджест." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Мы запустили функцию обновления оригинальной игры в контролируемой " +"браузерной проверке, отключив препятствия и автоматическое планирование. " +"После 4000 обновлений скорость составила 10,0; после 10 000 - 13,0, " +"округленная до одного знака после запятой." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"В новой мини-игре сохранено это правило скорости. Ее код для рисования, " +"прыжков и столкновений - это небольшая обучающая реализация. {ph0}Откройте " +"лабораторию{ph1}, чтобы ознакомиться с новым кодом и выполнить ту же " +"проверку скорости." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Чтобы самостоятельно проверить целевой объект, выполните {ph0}действия по " +"подключению к браузеру{ph1}, используя {ph2}страницу dinosaur{ph3}. Укажите " +"своему агенту URL этой страницы и локальную конечную точку отладки, затем " +"скопируйте приведенное выше приглашение." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Проверенный код скорости{ph1} · {ph2}Авторы Chromium · Лицензия " +"BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Пример 02 · Калькулятор Windows" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Воссоздайте кнопку % калькулятора." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"Создайте небольшой калькулятор, который {ph0}корректно обрабатывает как +, " +"так и ×.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Одна и та же кнопка использует {ph0}разные правила после + и ×.{ph1} Мы " +"проверяем установленное приложение, чтобы определить, к какому числу " +"применяется процентное соотношение." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Попробуйте произвести расчет" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Сбросить" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% от 200 = 20. Тогда 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Интерактивная иллюстрация проверяемого процентного правила." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Одна ветвь делится на 100. Другая также умножается на первое " +"число.{ph1} Агент использует обе ветви для воссоздания кнопки %." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "В этом примере {ph0}, а {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Пример подсказки · Перестроить " +"кнопку %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA для проверки кнопки % в калькуляторе " +"Windows. Восстановите правила после + и ×, затем создайте небольшой " +"калькулятор, который использует оба параметра.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "С +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Возьмем 10% от первого числа.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "С ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Превратите 10% в 0,1200{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "От установленного приложения к рабочей кнопке %" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 · REA считывает библиотеку{ph1}{ph2}, возвращает код обработчика " +"%{ph3}{ph4}, функция проверяет оператор и использует константу {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 · Ваш агент интерпретирует это{ph1}{ph2}, объясняет и воспроизводит " +"правила{ph3}{ph4}, сверяет ветвь с исходным кодом Microsoft, затем " +"попробуйте + и ×, указанные выше.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Посмотрите реальный код и то, как был проверен ответ" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Проверено с помощью REA 4.1.0: Windows Calculator 11.2508.4.0, x64. В " +"доступной для чтения сводке используются имена из общедоступного источника " +"Microsoft для описания восстановленной ветви." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Процент реализации{ph1} · {ph2}Тестовые примеры Microsoft{ph3} · " +"Руководство по {ph4}встроенной настройке{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Ваше первое расследование" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Попробуйте REA в небольшом приложении." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Загрузите наш пример Notes, проследите его экспорт CSV и проверьте один " +"измененный ввод." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Попробуйте руководствоваться приведенным примером" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Хотите разобраться глубже?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Расскажите своему агенту, что вы хотите понять или доработать. С REA вы " +"можете работать вместе над чем угодно - от {ph0}клонирования этого веб-" +"сайта{ph1} до {ph2}воссоздания игры по ее исполняемому файлу.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Пример запроса · Веб-сайт" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Да, вот этот." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Пример подсказки · Реконструкция " +"игры" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы воссоздать эту игру по ее " +"исполняемому файлу. Восстановите логику игрового процесса на C и сравните ее" +" с оригиналом.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Смотрите тематическое исследование DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "" +"Для выполнения этапов настройки и анализа выберите свой целевой объект:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Программы с машинным кодом" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Проверяйте функции, строки, ссылки и связи между вызовами функций в " +"исполняемых файлах и библиотеках." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Руководство по анализу программ с машинным кодом" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript и Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Отображайте модули, маршруты, IPC и собственные зависимости из папки " +"приложения или архива ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Рабочие процессы приложений" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Активность в браузере и во время выполнения" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Фиксируйте активность выбранного браузера или процесса, а затем сравнивайте " +"результаты в разных запусках." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Руководство по наблюдению за браузером" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Есть вопросы?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Ознакомьтесь с часто{ph1} задаваемыми вопросами, {ph2}пообщайтесь с " +"нами по Discord{ph3} или {ph4}откройте выпуск{ph5} GitHub, чтобы узнать об " +"ошибках и запросах функций." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Вступить в сообщество" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Делитесь результатами исследований и получайте помощь от других " +"пользователей REA на Discord. Следите за обновлениями проекта REA на X." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA — Реверс-инжиниринг для Вашего программиста" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Выполняйте реинжиниринг приложений, двоичных файлов и поведения браузера с " +"помощью вашего coding agent. Следуйте четким инструкциям и попробуйте " +"интерактивные примеры с REA." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Скопировать запрос на установку REA" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Команда настройки копирования" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Следуйте инструкциям ручного калькулятора для анализа" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Процентный вопрос калькулятора копирования" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Мини-игра про динозавров. Используйте кнопку перехода или нажмите пробел, " +"пока игра сосредоточена." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Запрос на копирование результатов анализа динозавров" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Выберите способ расчета" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Запрос на анализ с помощью калькулятора копирования" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Запрос на копирование проекта веб-сайта" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Запрос на копирование реконструкции игры" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Главная{ph1} страница / {ph2}Витрины{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Практический пример · Аутентификатор Aegis" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Откуда Аутентификатор{ph0}генерировать код авторизации?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Шестизначный код меняется каждые 30 секунд. Используйте REA, чтобы найти " +"вычисления в Android APK , а затем перестройте их с помощью часов, которыми " +"вы можете управлять." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 · Android · Официальный релиз APK · 6,9 МБ" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Посмотреть Aegis на GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "От APK до кода, который вы можете воспроизвести" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 · Найдите функцию{ph1}{ph2} 3077 классы → методы генерации{ph3}{ph4}" +" REA выполняет поиск в пакете и отслеживает код, используемый для " +"отображения и копирования действий.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 · Прочитайте время расчета{ph1}{ph2} + ключ учетной записи → " +"шестизначный{ph3}{ph4} REA возвращает методы и значения по умолчанию. Агент " +"объясняет, как они сочетаются друг с другом.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 · Перестройте и установите флажок{ph1}{ph2} \"Изменить время\". " +"Ознакомьтесь с кодом.{ph3}{ph4}Новая демонстрация браузера воспроизводит " +"правило и проверяет его на соответствие общедоступным ссылкам.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "В этом тематическом исследовании" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Спросите своего агента{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Попробуйте воспользоваться генератором кода{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Найдите код с помощью REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Ознакомьтесь с расчетом{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Проверьте реконструкцию{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Проверьте APK самостоятельно{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Спросите своего агента" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"Приложение показывает изменяющийся код для входа в систему. Мы хотим " +"выяснить, {ph0}что заставляет его меняться{ph1}, и воспроизвести это " +"поведение." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Копировать" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Пример запроса для загруженного APK с настроенным анализом REA для Android. " +"{ph0}Получите APK и настройки анализа ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Попробуйте воспользоваться генератором кода" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"Приложение группирует время в {ph0}30-секундные блоки.{ph1} Для генерации " +"кода номер блока объединяется с ключом учетной записи. Один и тот же ключ и " +"блок генерируют один и тот же код." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Переведите стрелки часов на 60 секунд вперед" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Время" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "секунд" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Наши регулируемые примерные часы" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30-секундный блок" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Блок" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 секунд{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Сгенерированный код" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Ключ учетной записи + блокировка → шесть цифр" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Примерное время, в секундах" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 секунд" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 секунд" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"На 59 секунде: {ph0}287082.{ph1} На 60 секунде: {ph2}359152.{ph3} При " +"перемещении в пределах одного блока код остается неизменным." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"Ключ является фиксированным, общедоступные {ph0}тестовые данные RFC " +"6238{ph1}. В демонстрации реализован расчет, восстановленный из APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"На диаграмме показан результат за 59 секунд. Включите JavaScript, чтобы " +"изменить время." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Найдите код с помощью REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Сократите APK до трех классов" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} расчета используется TotpInfo; два других параметра относятся к " +"индикатору выполнения и импортированным учетным записям. TOTP означает " +"одноразовый пароль, основанный на времени." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Подключите генератор к дисплею приложения" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA определяет перегрузку временной метки и находит вызывающих базовый " +"метод. При проверке {ph0} на дисплее отображается вызов {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Запросы показывают сокращенный путь ввода. В именах результирующих классов " +"отсутствует распространенный префикс {ph0}." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Ознакомьтесь с расчетом" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA возвращает {ph0}преобразование часов, настройки по умолчанию и методы " +"генерации.{ph1} Разработчики установили 30-секундный интервал и шесть цифр; " +"метод временной метки преобразует секунды в номер блока." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}Временной блок 01{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Клавиша + блок" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Шесть цифр" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Время выбирает блок.{ph1} Все секунды с 30 по 59 дают блок 1. Через 60 " +"секунд блок становится 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}Ключ тоже имеет значение.{ph1} Генератор объединяет ключ учетной записи" +" с блоком. Учетная запись с другим ключом может одновременно отображать " +"другой код." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Оставьте шесть цифр.{ph1} Остаток после деления на 1 000 000 при " +"необходимости дополняется нулями, так что код может начинаться с 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Приведены выдержки из нескольких проверенных методов с переносом строк для " +"отображения. Правая панель представляет собой пояснительное резюме. " +"{ph0}Код Aegis соответствует GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Внутри генератора" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"Выпущенный APK переводит {ph0} в {ph1}. REA следует за вызовом из {ph2} и " +"возвращает это тело; исходный источник вызывает вспомогательный {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"Последний байт хэша выбирает позицию. Четыре байта в этой позиции дают " +"положительное 31-разрядное число; форматирование уменьшает его до требуемого" +" количества цифр. Последний аргумент конструктора выбирает ветвь " +"форматирования кода, введенную при компиляции." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Сравните с соответствующим источником выпуска{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Проверьте реконструкцию" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Мы собрали выбранные методы Java, возвращаемые REA, в небольшую тестовую " +"программу. Их результаты соответствовали независимой реконструкции {ph0}133 " +"тестовых примеров{ph1}, включая границы временных блоков и коды, " +"начинающиеся с нуля." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Примерное время" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Шестизначный код" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 секунд" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 секунды" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Генератор также соответствует шести опубликованным ссылочным вариантам SHA-1" +" в {ph0}RFC 6238{ph1}. Проверьте их реализацию в браузере:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Выполнять проверку ссылок" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Ознакомьтесь с демонстрационным расчетом" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"В контрольных случаях используются восьмизначные значения. Проверка также " +"подтверждает их шестизначные результаты." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Для проверки используются извлеченные методы Java и новая демонстрация. " +"Android APK был проверен статически." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Проверьте APK самостоятельно" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Настройте REA{ph1} на macOS или Linux , затем загрузите эти два файла в" +" одну папку. В Windows используйте среду Linux, такую как WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Для анализа Android требуется полный JDK 17 или более поздней версии. " +"Выберите его с помощью {ph0} или {ph1}. В данном случае использовался JDK " +"21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Наведите курсор REA на файл поставщика и проверьте APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Ваш агент может продолжить работу через CLI от REA, воспользовавшись " +"приведенной выше инструкцией. Для MCP добавьте {ph0} в среду сервера REA и " +"повторно подключите его." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Следующий вопрос: {ph0}что происходит, когда в учетной записи используются " +"восемь цифр или другой интервал времени?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Источники" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Официальный релиз Aegis 3.4.3{ph1} · {ph2}Соответствующий исходный{ph3}" +" код · {ph4}Лицензия GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" +"{ph0}Справочные примеры RFC 6238{ph1} · {ph2}Демонстрационные тестовые " +"данные{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Проверено с помощью REA 6.1.0 9 октября 2026 года. Декомпилированные " +"фрагменты добавлены в Aegis; диаграмма, читаемое резюме и реконструкция " +"браузера являются новым учебным материалом." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK Обратный инжиниринг: Коды для входа — REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Проверить Aegis Андроид APK с REA, восстановить его шестизначный логин-код " +"расчетов и попробовать реконструкция с регулируемым часы." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Тематическое исследование Aegis APK" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Скопировать запрос в качестве примера Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Следуйте инструкциям по вводу регистрационного кода" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Скопировать команду проверки APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Главная{ph1} страница / {ph2}Витрины{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Тематическое исследование · DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Найдите флаг в{ph0}двоичном формате CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Используйте REA для проверки небольшого средства проверки флагов, " +"преобразуйте его правила в уравнения и найдите входные данные, которые " +"{ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "" +"устройство для проверки флажков в маскированных квадратах · Простое · Linux " +"x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Просмотрите оригинальную задачу" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "От двоичного кода к проверенному ответу" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 · Найдите строки проверки{ph1}{ph2} → функции{ph3}{ph4} проверки REA" +" находит запрос, ссылки на него и код, который принимает или отклоняет " +"вводимые данные.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 · Извлеките правила{ph1}{ph2} из 36 символов · 26 сумм{ph3}{ph4} REA" +" возвращает инструкции и данные, стоящие за каждой проверкой. Агент " +"преобразует их в уравнения.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 · Решите и запустите{ph1}{ph2} восстановленный флаг → " +"Исправить!{ph3}{ph4}Уравнения решаются скриптом на Python. REA фиксирует " +"исходную программу, принимающую результат.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"Задача написана Джозефом и опубликована в официальном репозитории " +"DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "В этом тематическом исследовании" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Найдите проверочный код{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Прочитайте одну маску{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Сборка в читаемый код{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Решите уравнения{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Проверьте ответ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Попробуйте сами{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Найдите проверочный код" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Раздаточный материал представляет собой исполняемый файл размером 15 КБ. Он " +"запрашивает флажок, затем выводит \"{ph0} или \"{ph1}. Начните с простого " +"запроса к вашему агенту." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Копировать" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA для анализа ms_flag_checker и поиска флага." +" Объясните, как работают проверки, затем проверьте ответ с помощью исходной " +"программы.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Пример запроса с загруженной задачей, доступной локально, и подключенным " +"поставщиком программ для анализа машинного кода." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Следуйте инструкциям по вводу для перехода к его функции" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"Ссылка дает агенту возможность провести расследование, даже несмотря на то, " +"что исходные имена функций исполняемого файла были удалены." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Ознакомьтесь с программой проверки и двумя ее помощниками" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"Первый цикл копирует коды из 36 символов. Цикл проверки расшифровывает " +"маску, суммирует выбранные коды и сравнивает результат с сохраненным числом." +" Его шаги размером {ph0} байт по {ph1} байт дают 26 масок." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Это выбранные результаты нового анализа REA. Путь к локальному целевому " +"объекту сокращен для отображения; адреса относятся к импортированному " +"изображению REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Одна проверка выявляет один символ" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Программа проверки упорядочивает входные данные в виде сетки размером 6×6. " +"Маска определяет, какие ячейки участвуют в сумме. В компактном кодировании " +"используются отрицательные числа для пропуска ячеек и положительные числа " +"для их выбора." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" +"При седьмой проверке выбирается только одна позиция. {ph0}Откройте " +"рисунок{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Считайте маску и ее цель из двоичного файла" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"Команда {ph0} считывает байты маски как значения со знаком. Вот почему {ph1}" +" означает -21. Целью является целое число в порядке убывания. Вместе эти " +"байты сообщают агенту, что {ph2}, так что этот символ равен {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "От инструкций к удобочитаемому чеку" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Выберите шаг для подключения вспомогательного средства суммирования и " +"вызывающего его объекта к одному и тому же правилу в C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Начало" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Выберите" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Добавить" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Продвижение" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Сравнить" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA · выбранные оригинальные инструкции" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Читаемая сводка C · one-check" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 · Начните с нуля.{ph1} {ph2} содержит текущую сумму." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 · Проверьте ячейку маски.{ph1} Нулевое значение пропускает символ; " +"ненулевое значение включает его." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 · Добавьте символьный код.{ph1} К сумме добавляется целое число, " +"полученное при вводе с тем же смещением." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 · Переход к следующей ячейке.{ph1} Исходный цикл продвигается по " +"четыре байта на целое число и посещает шесть строк по шесть ячеек." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 · Сравнить с сохраненным целевым значением.{ph1} Вызывающий абонент " +"получает сумму в {ph2}. Несоответствие становится {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Инструкции поступают от помощника по суммированию и вызывающего его " +"устройства. C - это пояснительная записка с описательными названиями и " +"сглаженным циклом из 36 ячеек." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Решите 26 уравнений" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"В большинстве масок выбирается несколько ячеек. Например, при первой " +"проверке добавляется 16 кодов символов, и требуется в общей сложности 1441. " +"Перекрывающиеся выборки дают уравнения, которые может решить небольшой " +"скрипт на Python." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Отрывок из Python · solver" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 - это программа-решатель, которая находит значения, удовлетворяющие этим " +"уравнениям. В этом фрагменте используются извлеченные проверки и " +"используется {ph0} с буквами, цифрами, символами подчеркивания и фигурными " +"скобками. Полная загрузка включает все 26 масок и целевых объектов." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Загрузите полный решатель" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Проверьте ответ с помощью оригинальной программы" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"Программа захвата процесса REA записывает исходный исполняемый файл, " +"принимающий флаг solved. Изменение одного выбранного символа с {ph0} на " +"{ph1} приводит к получению первой суммы 1440 вместо 1441, и программа " +"отклоняет ее." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Ввод" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Наблюдаемый результат" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Код выхода" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Флаг решателя" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Один персонаж изменен" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Отобразить восстановленный флаг и захваченные выходные данные" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA · исходный программный результат" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Флаг копирования" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"Восстановленное значение также соответствует флагу в опубликованных " +"организаторами метаданных задачи, который был проверен после решения " +"двоичной задачи." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Идентификация источника, цели и детали анализа" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Новый анализ и две записи процессов, опубликованные 8 октября 2026 года, с " +"использованием REA 4.1.0 и Ghidra 12.1.4 на Linux x64. Двоичный файл " +"представляет собой урезанный x86-64 ELF, объемом 15 248 байт." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Ссылки на строки, функции и константы были проверены перед чтением исходного" +" кода или решения организаторов. На основе этих результатов REA были созданы" +" решатель на Python и диаграмма." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Сравните с источником, предоставленным организаторами{ph1} · " +"{ph2}Метаданные и флаг конкурса{ph3} · {ph4}Примечания к доказательствам " +"REA{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Попробуйте сами" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Загрузите исходную задачу и решение в одну папку. Воспользуйтесь приведенной" +" выше инструкцией, чтобы провести расследование с помощью своего агента, или" +" запустите прилагаемый сценарий." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Терминал · решить и запустить" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Скрипт выводит флаг кандидата; вставьте его в командную строку программы. " +"Для решения требуется Python и {ph0}. Для запуска исходного исполняемого " +"файла требуется Linux x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Настройте REA с помощью вашего агента по кодированию" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "Обратный инжиниринг CTF: проверка флага DownUnderCTF — REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Используйте REA для решения задачи проверки флагов маскированных квадратов в" +" DOWNDERCTF. Найдите функции проверки, извлеките маски и сравните " +"восстановленный флаг с исходной программой." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "Практический пример проверки флагов CTF" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Запрос на копирование примера CTF" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "" +"Уравнение маски CTF; прокрутка по горизонтали на экранах меньшего размера" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"Седьмая маска пропускает 21 ячейку, выбирает позицию 21, затем пропускает " +"14. Только эта ячейка вносит свой вклад в сумму. Ее обязательный код - 55, " +"что означает, что символ равен 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Выполните проверку CTF" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Скопируйте сборку CTF" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Копируемый чек CTF для чтения" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Скопируйте выдержку из CTF-решателя" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Копировать восстановленный флаг" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Копирование команд решателя CTF" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Главная{ph1} страница / {ph2}Витрины{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Тематическое исследование · DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Восстанавливаем DX-Ball {ph0}из его исполняемого файла." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"Целью является создание поддерживаемой версии игры Windows на языке C, " +"выпущенной в 1996 году. REA помогает агенту проверять оригинал, по одной " +"функции за раз." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows для i386 · с · REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Одна функция, от исполняемой до проверяемой C. REA предоставляет инструкции," +" вызывающие устройства и данные для чтения; проект реконструкции реализует и" +" тестирует результат. {ph0}Открыть рисунок{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "В этом тематическом исследовании" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Проект{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Звуковая панорама{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Проверка результата{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Продолжайте работу{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "поддерживаемые функции C" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "сравнение с исходным кодом" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "функции с соответствующими скомпилированными байтами" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Контрольная точка проекта: 7 октября 2026 года. {ph0}Журнал выполнения{ph1} " +"работ · {ph2}Тестовый охват{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Проект до сих пор" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Восстановленный код охватывает управление доской и ресурсами, удары " +"кирпичом, анимацию, частицы и получение бонусов. В текущих сборках доступны " +"утилиты проверки и библиотека анализа. Продолжается работа над игрой, в " +"которую можно играть, физикой мяча и весла, управлением усилениями и " +"интеграцией Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Определение положения звука слева/справа при расчете" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"При ударе по кирпичу его горизонтальное положение передается в звуковой код." +" В ходе исследования было необходимо восстановить, как эта координата экрана" +" преобразуется в значение поворота влево/вправо." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Копировать" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы узнать, как DX-Ball рассчитывает " +"расположение стереозвука. Объясните расчет и покажите код.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Пример запроса для вашего coding agent с доступным локальным исполняемым " +"файлом. В приведенном ниже исследовании показаны запросы REA и " +"доказательства, лежащие в основе ответа." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"Агент использовал REA для проверки функции, отслеживания ее вызывающего " +"устройства и считывания констант из исполняемого файла. Эти результаты " +"предоставили входные данные и арифметику, необходимые для написания функции " +"на языке Си, приведенной ниже." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"Первый результат функции для {ph0} включал псевдокод, объявляющий {ph1} и " +"вызывающий {ph2}. В окне команд отображался ввод данных из стека и операции " +"с плавающей запятой. Это несоответствие дало агенту конкретную причину " +"продолжить расследование." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "Первое представление декомпилятора" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"На выходе отображается вызов преобразования. При чтении приведенных ниже " +"инструкций можно увидеть входные данные и вычисления, которые используются " +"для этого вызова." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Ответы на три вопроса с помощью REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Восстановите недостающие входные данные" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"Результат работы функции включает инструкции наряду с псевдокодом и " +"вызывающими элементами. Здесь {ph0} предоставляет целочисленный ввод, " +"отсутствующий в представлении декомпилятора." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Следуйте за вызывающим абонентом, чтобы понять вводимые данные" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA идентифицировал этого вызывающего абонента в первом результате. В " +"предыдущих инструкциях tile_x масштабируется {ph0}на 30; добавление 20 дает " +"экранную координату кирпича, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Считайте значения, стоящие за адресами памяти" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Возвращаемые байты задают две арифметические константы и начальный масштаб " +"панорамирования. Теперь у агента есть значения, необходимые для выражения на" +" языке Си." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "От выводов REA до C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Выполните пять шагов, описанных ниже. В каждом выбранном элементе выделены " +"исходные инструкции и основные строки, которые они содержали." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}Вход 01{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Умножить" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Вычесть" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}Шкала 04{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Возвращение" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Оригинальная выдержка из x86 ·" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Реконструированный C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 · Считайте входные данные.{ph1} В окне команд в результате работы " +"функции REA отображается {ph2} и используется {ph3} для загрузки целого " +"числа. Отслеживание вызывающего абонента через REA устанавливает значение " +"экранной координаты параметра C {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 · Умножить на 1,5625.{ph1} {ph2} считывает удвоенное значение {ph3}." +" Байты, возвращаемые функцией REA's {ph4}, декодируются как {ph5}; C " +"использует ту же константу." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 · Вычтите 500,0.{ph1} {ph2} считывает двойное значение в {ph3}. " +"Результат в байтах REA расшифровывается как {ph4}, смещая центр вычисления " +"на экранную координату {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 · Примените сохраненную шкалу.{ph1} Второй {ph2} показывает значение" +" {ph3}. В поддерживаемом источнике этот глобал называется {ph4}. При чтении" +" второго байта REA его начальное значение равно {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 · Возвращает целое число.{ph1} Вызов по {ph2} 0x406430 достигает " +"значения {ph3}, указанного в результатах поиска вызываемого абонента REA. C " +"преобразует результат в {ph4}; исходные сравнения с x86 проверяют " +"возвращаемое значение." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"В приведенном ниже отрывке из сборки выбираются инструкции по вводу, " +"арифметике и возврату. В приведенный ниже полный список также включены " +"промежуточные хранилища, настройка и очистка функций." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Полная сборка и подтверждающие доказательства" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "Результат REA · 0x406400–0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Что предоставляет вызывающий абонент" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"Функция brick-hit в {ph0} масштабирует свою координату плитки на 30, " +"добавляет 20, а затем перемещает ее перед вызовом:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "То, что читают данные, устанавливает" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "Считывается байт REA, декодируемый как удвоение в порядке убывания" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Адрес" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Ценность" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Используется для" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Первое умножение" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Вычитание" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} изначально" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Сохраненные весы для поддонов" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Записано с помощью REA 4.1.0 для цели DX-Ball 1.07 с привязкой к хэшу. В " +"связанных материалах расследования сохраняются идентификаторы улик." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Поддерживаемый источник{ph1} · {ph2}Заметки о расследовании и ссылки на" +" доказательства{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Проверка восстановленной функции" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"Восстановленная функция проходит две проверки: ее возвращаемые значения " +"совпадают с исходными, а скомпилированные байты соответствуют исполняемому " +"файлу." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3 205 случаев нарушения поведения" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Тесты выполняют исходную функцию x86 и сравнивают возвращаемое ею значение с" +" сохраненным значением C. Они охватывают все целочисленные позиции от 0 до " +"640 в пяти масштабах панорамирования: 0, 0,5, 1, 20 и -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 совпадающих байта" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"Функция C компилируется с помощью закрепленной цепочки инструментов VC4.0. " +"Повторное воспроизведение компилятором соответствует полной функции после " +"применения рассмотренных изменений и проверки констант, на которые даны " +"ссылки." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"При шкале, равной 1, восстановленные вычисления возвращают значение -500 по " +"левому краю, 0 по центру и 500 по правому краю. Следующая часть работы со " +"звуком - это интеграция этого значения со звуковым сопровождением игры." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Ознакомьтесь с подробностями воспроизведения компилятором{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Продолжайте расследование" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"Тот же подход используется для обновления частиц, создания очередей с " +"расширением и генерации бонусов: проверьте соответствующие функции, " +"восстановите их состояние и зависимости, а затем сравните реализацию с " +"исходной." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Чтобы самостоятельно проверить функцию панорамирования звука, следуйте " +"инструкциям по настройке DX-Ball project и укажите соответствующую исходную " +"цель. Затем запустите:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "При оформлении заказа DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} Текущий источник репозитория{ph1}{ph2} DX-Ball, ход выполнения и " +"локальная настройка.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} Рабочий процесс анализа{ph1}{ph2} REA Завершается вычислением, затем " +"используйте тот же подход с вашим собственным двоичным файлом.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Создание частиц и бонусов{ph1}{ph2} - более масштабное исследование " +"состояния, очередей и записи пикселей.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball Обратный инжиниринг: Панорамирование звука — REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Выполните реконструкцию DX-Ball от бинарного анализа через REA до " +"поддерживаемых тестов на C, исходных x86 и сопоставления скомпилированных " +"байтов функций." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball sound-исследование панорамирования; горизонтальная прокрутка на " +"экранах меньшего размера" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.EXE функция 0x00406400 проверяется с помощью REA . Вызывающий " +"абонент, попавший в тупик, выдает значение tile_x в 20 и 30 раз больше. " +"Инструкции загружают x, умножают на 1,5625, вычитают 500,0, применяют " +"pan_scale и возвращают целое число. Поддерживаемый C проверяется независимо " +"от исходного x86 в 3205 случаях и с помощью компилятора VC4.0 " +"воспроизводится на соответствие 63 байтам." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "Тематическое исследование реконструкции DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Запрос на копирование примера" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Следите за расчетом положения звука слева/справа" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Скопируйте фрагмент оригинальной сборки" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Функция копирования звука-панорамирование" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Скопируйте полную сборку sound-pan" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Скопировать команду анализа DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Главная{ph1} страница / Витрины" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "Тематические исследования REA." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, игры, Electron и конкурс CTF с кодом, цифрами и проверенными " +"результатами." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android · Анализ APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Как аутентификатор генерирует код входа в систему" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Узнайте, как Aegis рассчитывает шестизначный код, в опубликованном APK . " +"Проследите за методами генерации с помощью REA, затем посмотрите на " +"демонстрационные часы, чтобы понять, почему код меняется каждые 30 секунд." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Ознакомьтесь с тематическим исследованием Android" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF · Анализ программ с машинным кодом" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Решите проблему с проверкой флага CTF" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Изучите простую задачу DOWNDERCTF с помощью REA. Найдите ее проверяющие " +"функции, преобразуйте маски и суммы в уравнения, затем проверьте флажок " +"\"решено\" с помощью исходной программы." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Ознакомьтесь с тематическим исследованием CTF" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Нативная · Реконструкция" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball рассчитывает положение звука слева/справа" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Восстановите расчет положения звука слева / справа из игры Windows 1996 года" +" выпуска. Инструкции REA, ссылки на вызывающий объект и числовые константы " +"приводят к созданию небольшой функции C, которая проверяется на соответствие" +" исходному поведению и всем 63 скомпилированным байтам." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Ознакомьтесь с тематическим исследованием DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron · Отслеживание объектов" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Как Notion копирует текст и HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Отследите API, работающий на странице, с помощью JavaScript, встроенного в " +"Notion. Проследите за его IPC-оболочками в системном буфере обмена, а затем " +"посмотрите, как маленький HTML-маркер связывает данные расширенного блока с " +"копией." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Ознакомьтесь с тематическим исследованием Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS · Реконструкция" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Как TH04 целится в кольцо из пуль" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Проверьте оригинальный 16-разрядный angle helper с помощью REA . Сопоставьте" +" его операции умножения, деления и координации с понятным C++, а затем " +"посмотрите, как они создают кольцо, направленное на игрока." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Ознакомьтесь с тематическим исследованием TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Пошаговые руководства" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"В руководствах описываются собственные вычисления, экспорт Electron и запрос" +" к браузеру. Каждое из них начинается с запроса и конкретной цели." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Ознакомьтесь с руководствами" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Тематические исследования по реверс—инжинирингу - REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Следите за расследованиями REA с помощью кода, рисунков и демонстраций: " +"Android authenticator, DX-Ball, Notion, TH04 и средства проверки флага " +"DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Главная{ph1} страница / {ph2}Витрины{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Тематическое исследование · Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Как Notion копирует{ph0}текст и HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Проследите вызов буфера обмена из API страницы Notion, через предварительную" +" загрузку и основной процесс, в программу записи буфера обмена Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Рабочий стол Notion 7.6.1 · JavaScript · REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Мост внутри настольного пакета Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 · {ph1}Буфер обмена API, ориентированный на страницу{ph2}{ph3}{ph4} " +"{ph5}Предварительная загрузка предоставляет вызываемый метод.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 · Предварительно загрузите оболочку{ph1} {ph2}{ph3}{ph4} " +"{ph5}оболочки отправляет канал и аргументы.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 · Обработчик основного процесса " +"ipcMain{ph1}.обработчик{ph2}{ph3}{ph4} {ph5}получателя проверяет, с какой " +"страницы он был отправлен.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 · Системный буфер{ph1} обмена {ph2}{ph3}{ph4} {ph5}Electron " +"записывает предоставленный текст и HTML-код.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Один канал соединяет две стороны: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Упакованный код использует один и тот же канал в процессе предварительной " +"загрузки и в основном процессе. При разрешении оболочек обнаруживаются " +"вызовы Electron, стоящие за этими именами." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "В этом тематическом исследовании" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Следуйте по мосту из буфера обмена{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Сохранение структуры блока{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Дополнительные примеры и источники{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Где выполняется операция копирования?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"На странице отображается метод под названием {ph0}. Его реализация в " +"предварительной загрузке является оболочкой. Полезный вопрос заключается в " +"том, что отправляет эта оболочка и какой код ее получает." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Копировать" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы проследить, как Notion копирует " +"текст и HTML в системный буфер обмена. Показывайте код на каждом " +"шаге.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Пример запроса с локальным пакетом приложений Notion, доступным вашему " +"программисту." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA находит, с чего начать чтение" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Анализ предварительной загрузки вкладок с помощью REA позволяет найти API, " +"доступный для страницы, и вызов, который отправляет запрос IPC. Оба " +"результата представлены с диапазонами исходных текстов в уменьшенном пакете:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA выводы → два места для открытия" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Выбранные поля из нового {ph0}результата применения " +"analyze_javascript_application в предварительной загрузке вкладки Notion, " +"записанного с помощью REA 4.1.0. Для позиций используются строка исходного " +"пакета и столбец, основанный на нуле." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"Агент открывает эти папки, находит элемент clipboard в собранном API и " +"считывает {ph0}. Его сайт вызова предоставляет {ph1}. Это имя дает агенту " +"точную информацию для поиска в основном пакете. В четырех приведенных ниже " +"выдержках показан маршрут, по которому он подключается." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Четыре коротких фрагмента кода" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Упрощенный по сравнению с пакетным JavaScript, с удобочитаемыми именами " +"переменных. Несвязанные элементы опущены." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Начните с API, доступного для этой страницы" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Этот участник предоставляет название канала. Реализация {ph0} сообщает нам, " +"как запрос завершает обработку страницы." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Устраните оболочку предварительной загрузки" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"Возвращаемая функция перенаправляет аргументы через IPC запроса и ответа " +"Electron. Теперь мы можем искать {ph0} на стороне основного процесса." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Проверьте, как зарегистрирован получатель" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Основной процесс использует другую оболочку. Его метод {ph0} регистрирует " +"{ph1} для этого канала." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Найдите запись и проверьте ее отправителя" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Это адресат. После проверки отправителя обработчик передает предоставленные " +"данные в API буфера обмена Electron. Канал и две разрешенные оболочки " +"подключают открытый метод к этому вызову." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Как скопированный блок сохраняет свою структуру?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Веб-редактор Notion отправляет текст и HTML-код через {ph0}. Он сохраняет " +"данные блока локально и вставляет идентификатор в скопированный HTML-код, " +"чтобы связать их." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "HTML-ссылки на сохраненные данные блоков" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Прочитайте HTML-идентификатор" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Найдите тот же локальный идентификатор" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Восстановить данные блока Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Иллюстративный текст и идентификатор. Записанный модульный тест " +"восстанавливает данные блока, если идентификаторы совпадают; устаревшая " +"запись возвращает только текст и HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"При вставке Notion ищет HTML-идентификатор и сравнивает его с сохраненной " +"копией. Совпадающие идентификаторы восстанавливают данные блока." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Формат буфера обмена, записанный из веб-ресурсов, кэшированных 13 июля 2026 " +"года." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Дополнительные примеры и источники" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Другой пример: таблицы уценки" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion преобразует Markdown в блочные данные. В этом примере показано, как " +"таблица преобразуется в заголовок и строки данных." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Таблица с помощью анализатора уценки Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Записанный вывод из извлеченного анализатора Markdown. Таблица преобразуется" +" в строки и ячейки." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Другой путь: автономное подключение к SQLite" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Программа визуализации Notion запрашивает {ph0} через IPC. Основной процесс " +"создает канал передачи сообщений и передает один порт программе " +"визуализации, а другой - служебному процессу SQLite. Последующие пакеты " +"инструкций и результаты передаются через этот порт." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"После этой передачи обслуживания объясняется, как выполняется работа с базой" +" данных и почему при отслеживании только первоначального IPC-запроса не " +"учитывается последующий диалог." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Источники и как читать выдержки" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Интерфейс буфера обмена взят из NotionNotion{ph0}: предварительная загрузка " +"вкладки и {ph1}. В приведенных выдержках приведены сокращенные имена " +"переменных и опущен несвязанный код; показан помощник для проверки " +"отправителя с базовым {ph2}вызовом isNotionWebContents." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Примеры виртуального буфера обмена и Markdown взяты из веб-ресурсов, " +"кэшированных 13 июля 2026 года, включая модули {ph0}, {ph1}, {ph2} и {ph3}. " +"У этих ресурсов есть своя версия. Сохраненные тесты запускали извлеченные " +"модули и небольшие модули управления; их выходные данные описывают эти " +"тесты, а не захваченный сеанс пользовательского интерфейса рабочего стола." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"Показанный здесь результат REA представляет собой целенаправленный анализ " +"сохраненной предварительной загрузки вкладок, записанный с помощью " +"опубликованного пакета REA 4.1.0. Он определяет местоположение API и " +"запускает операцию. Элемент буфера обмена и соответствующий приемник " +"подключаются путем считывания их реализаций-оболочек в пакете." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"В примере Markdown используется модуль синтаксического анализа {ph0}. Тесты " +"сохраненного модуля показывают, что и фильтры страницы, и фильтры чата " +"сохраняют эту таблицу. Парсеры вставки/импорта, структурированного Markdown " +"и AI/chat имеют отдельные точки входа и промежуточные форматы." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} Руководство по применению{ph1}{ph2} JavaScript Ознакомьтесь с " +"небольшой функцией экспорта приложения Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} Реконструкция{ph1}{ph2} DX-Ball Выполняется в соответствии с " +"собственными инструкциями для проверенной функции C.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron Обратный инжиниринг: Буфер обмена — REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Следуйте API буфера обмена Notion через предварительную загрузку Electron, " +"IPC-оболочку и основной процесс, с краткими выдержками кода и ознакомьтесь с" +" его богатым форматом буфера обмена." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Тематическое исследование Notion Electron" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Скопировать запрос на анализ Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Скопировать фрагмент предварительной загрузки Notion" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Скопировать фрагмент кода Notion для вызова оболочки" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Скопировать фрагмент оболочки обработчика Notion" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Скопировать фрагмент приемника из буфера обмена Notion" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Восстановление расширенных данных буфера обмена при вставке" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Перейти к содержанию" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Главная{ph1} страница / {ph2}Витрины{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Тематическое исследование · Тохоу 4: История земли лотосов" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Реконструкции TH04 с{ph0}узоры пули." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Набор маркеров начинается с вычисления короткого угла. Используйте REA для " +"проверки исходной функции DOS, затем следуйте ее инструкциям на " +"удобочитаемом C++." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 · 16-разрядная версия DOS · C++ и сборка" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Посмотреть реконструкцию TH04" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "От оригинальных инструкций к проверенному источнику" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 · Основная часть оригинальной игры{ph1}{ph2}.ЗАПУСТИТЕ " +"исполняемый{ph3}{ph4} файл PC-98 и его вспомогательный инструмент bullet-" +"angle.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 · Проверьте с помощью{ph1}{ph2} инструкций REA + ссылок{ph3}{ph4}, " +"проверьте загруженный код DOS и прочитайте расчет угла из исполняемого " +"файла.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 · Прочитайте пробел C++{ph1}{ph2} → aim → rotate{ph3}{ph4}, чтобы " +"связать каждую операцию с сохраняемой реконструкцией.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 · Проверьте исходные{ph1}{ph2} 2139 совпадающих байт{ph3}{ph4}, " +"записанных компилятором, проверки охватывают код генерации маркеров, " +"содержащий этот вспомогательный элемент.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA возвращает исходный код и результаты его анализа. Проект TH04 " +"предоставляет поддерживаемые проверки исходного кода и компилятора." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "В этом тематическом исследовании" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}Кольцо с пулями{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}Что возвращает REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Сборка на C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Проверка источника{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Полный проект{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Как кольцо нацеливается на игрока" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"Для атаки Элли требуется прицельное кольцо с начальным счетом 16. Один из " +"помощников рассчитывает направление полета каждой пули. Одно и то же кольцо " +"может быть направлено в фиксированном направлении или повернуто в сторону " +"игрока." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодирующий агент" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Копировать" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA, чтобы узнать, как TH04 создает кольцо из " +"пуль и направляет его на игрока. Объясните расчет и покажите " +"код.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Пример запроса с исходным исполняемым файлом и восстановлением, доступным " +"локально." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 сохраняет полный оборот по часовой стрелке в 256 угловых единицах. Для " +"16 пуль каждый индекс добавляет по 16 единиц.: {ph0}. При добавлении " +"направления движения игрока эти позиции меняются местами." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Иллюстрация восстановленного математического расчета угла для счета 16, " +"направления игрока 40 и поворота шаблона 0. {ph0}Открыть рисунок{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Шаблон запуска в восстановленном источнике" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Нападение Элли на кольцо · отрывок из источника" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"В этих строках выбирается шаблон перед настройкой сложности и " +"производительности. {ph0}Прочитайте источник атаки{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "Что возвращает REA" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Мы проверяем {ph0}, которые задают скорость и угол наклона каждой пули. REA" +" возвращает свои инструкции, псевдокод и ссылки. Три части этого результата " +"объясняют закономерность." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Проверьте образ DOS, прежде чем читать его код" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"Проверка привязывает загруженный код и записи о перемещении к " +"предоставленному исполняемому файлу. Путь, указанный выше, сокращен для " +"отображения." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Прочитайте надпись на кольце \"умножай и дели\"" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} записан общий индекс. При сдвиге значение умножается на 256, затем при" +" делении используется значение, считанное из {ph1}. Имена поддерживаемых " +"источников, которые указаны в поле {ph2}. Полная последовательность " +"приведена ниже." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Найдите, где рисунок поворачивается в сторону игрока" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Операнды команд предоставляют две разности координат и вспомогательное " +"значение направления. Возвращаемое значение добавляется к относительному " +"кольцевому углу. Имена источников делают эти адреса удобочитаемыми; REA " +"позволяет агенту проверять исходные операции, стоящие за ними." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "От ассемблера к удобочитаемому C++" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Выберите шаг, который соответствует первоначальным инструкциям по расчету " +"угла. В этом обзоре приведена схема прицельного кольца; полный исходный код " +"также содержит данные о разбросах, стопках и случайных моделях." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}Индекс 01{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Пространство" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Цель" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Вращать" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Магазин" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA · оригинальные 16-разрядные инструкции" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Читаемый C++ · краткое описание aimed-ring" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 · Считываем маркерный индекс.{ph1} Аргумент stack загружается в " +"{ph2}. В кольце из 16 маркеров этот индекс элемента находится в диапазоне от" +" 0 до 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 · Расставьте направления на полный оборот.{ph1} {ph2} 8 умножается " +"на 256. Число умножается на ноль и преобразуется в слово, затем {ph3} делит " +"результат на это число. Для числа 16 каждый индекс умножается на 16 угловых " +"единиц." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 · Добавьте направление движения игрока.{ph1} Два вычитания образуют " +"координаты игрока минус исходная точка. Вспомогательный инструмент direction" +" возвращает угол в {ph2}; при сложении все кольцо поворачивается к игроку." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 · Добавьте поворот шаблона.{ph1} {ph2} добавляет угол наклона " +"шаблона. В исходном шаблоне Elly он равен нулю; другие шаблоны могут " +"использовать тот же вспомогательный элемент с поворотом." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 · Сохраняйте конечный угол в одном байте.{ph1} Хранилище записывает " +"{ph2} в поле \"Угол появления\". Значения переносятся после 255, точно так " +"же, как это происходит при преобразовании беззнаковых байт. Окружающий " +"источник также преобразует этот угол и скорость в скорость вращения." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"В сборке выбирается ветвь aimed-ring, вычисление aim и конечное хранилище. " +"Приведенный выше текст на C++ представляет собой удобочитаемую сводку. " +"Приведенные ниже проверки компилятора применяются к поддерживаемому " +"исходному тексту в связанном проекте." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Ознакомьтесь с сохраняемым кольцом и прицелитесь в источник" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Кольцевой макрос{ph1} · {ph2}Цель и источник скорости{ph3} · " +"{ph4}Представление угла{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Проверка поддерживаемого источника" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"Записанные проверки проекта TH04 позволяют скомпилировать код для генерации " +"маркеров, включая этот помощник, с помощью закрепленного набора инструментов" +" Turbo C++ 4.0J." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 совпадающих байта" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Скомпилированный код генерации маркеров соответствует 2139-байтовому разделу" +" исходного исполняемого файла." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Две чистые сборки" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Две отдельные сборки генерируют одинаковые совпадающие байты. Записанные " +"входные хэши соответствуют показанному здесь сохраненному источнику." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Записано 3 октября 2026 года. {ph0}Ознакомьтесь с проверками " +"компилятора{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Идентификация цели и объем анализа" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Первоначальная цель" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0} , 156 258 байт, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Вспомогательная запись" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} в загруженном изображении REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Смещение исходного файла" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, возвращаемый параметром {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Проверка записанного кода" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 · 7 октября 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Проверки компилятора охватывают весь раздел кода для добавления маркеров, " +"включая этот вспомогательный инструмент. Они также сравнивают его вклад в " +"отображение и перекрывающееся перемещение." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA проверил статический загрузочный образ DOS в сегменте загрузки {ph0}. " +"Его адреса описывают этот аналитический образ. Результат функции сообщает о " +"503 байтах тела в двух диапазонах по 517 байт; выбранные инструкции, " +"приведенные выше, находятся в этих сообщенных диапазонах." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Имена исходных текстов и проверки компилятором исходят из контрольной точки " +"TH04 {ph0}. В предыдущих наблюдениях за реконструкцией использовались " +"собственные аналитические скрипты проекта; на этой странице добавлена новая " +"проверка REA для той же исходной цели. Предоставленная игра идентифицируется" +" в манифесте репозитория, при этом независимое происхождение нетронутого " +"дампа все еще открыто." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"На рисунке показан расчет угла. Элементы управления в полной версии игры, " +"хронометраж и поведение аппаратного обеспечения PC-98 проверяются во время " +"выполнения в проекте реконструкции отдельно." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "Полная реконструкция TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Проект создает четыре DOS-продукта для игры на поддерживаемом C++ и " +"ассемблере. Помимо генерации маркеров, в исходном коде описаны этапы, боссы," +" рендеринг, ввод, меню, концовки и обработка результатов." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Изучите репозиторий TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Источник для генерации маркеров -{ph1}{ph2} это полный вспомогательный " +"инструмент, другие типы шаблонов и настройка шаблона.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}Руководство по сборке и запуску DOS{ph1}{ph2} Создайте исходный код и " +"протестируйте его в рабочем процессе эмулятора PC-98 проекта.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Текущая проверка состояния проекта{ph1}{ph2} DOS и отдельный " +"собственный порт x64.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 Обратный инжиниринг: шаблоны маркеров DOS — REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Проверьте оригинальный 16-разрядный DOS-код TH04 с помощью REA . Проследите " +"за сборкой и восстановленным C++, чтобы увидеть, как расставлено кольцо пуль" +" и как они нацелены на игрока." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "На этой странице" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "Тематическое исследование по маркировке TH04" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Скопировать запрос в качестве примера TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 фиксированные и нацеленные пулевые кольца; прокрутка по горизонтали на " +"экранах меньшего размера" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Две диаграммы кольца из 16 точек. Неподвижное кольцо начинается с нулевого " +"угла. При добавлении направления движения игрока, равного 40, все стороны " +"поворачиваются на одинаковую величину; выделенная первая точка указывает на " +"игрока. В обоих случаях расстояние между точками составляет 16 угловых " +"единиц, или 22,5 градуса." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Скопировать шаблон запуска TH04" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Следуйте расчету прицельного кольца TH04" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Скопируйте фрагмент сборки TH04" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Копировально-читаемый расчет прицельного кольца" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Наверх" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Копировать" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Скопированный" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Выбранный" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Код копируется в буфер обмена." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Выбранный код. Скопируйте его с клавиатуры." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA на GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Расстояние {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Врезался в кактус. Переключи скорость." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Пробел или прыжок ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Сыграй еще раз" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Играть" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Пауза" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Нажмите Play, затем перепрыгните через кактус." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Попадите по кактусу. Нажмите воспроизведение еще раз или измените скорость и" +" перезапустите игру." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Бегущий. Пробел или прыжок уничтожают кактус." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Приостановлено. Нажмите Воспроизведение, чтобы продолжить." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Фиксированная скорость: {speed}. Пробел или прыжок убирают кактус." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "" +"Фиксированная скорость: увеличить {speed}. Нажмите Play, чтобы попробовать." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Восстановленное правило: начинайте с 6, затем увеличивайте до 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Фиксированная скорость: {speed} вращения." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Воспроизвел восстановленное правило. Все четыре значения соответствуют " +"контролируемой проверке в оригинальной игре, если округлить их до трех " +"знаков после запятой." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"Воспроизведение отличается от значений, записанных в оригинальной игре. " +"Сравните приведенные выше правила скорости и настройки." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start} и {end}" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} секунды, временной блок {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Интерактивный расчет в этом браузере недоступен. В примере код отображается " +"через 59 секунд." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Проверка…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} пройдено проверок (шесть контрольных случаев, " +"обозначенных шестизначными и восьмизначными цифрами)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "Не удалось выполнить проверку ссылок. Пробовать снова." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Аналитик, думающий за компьютером" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Одна проверка выявляет один символ" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"Седьмая маска выбирает только позицию 21 во входной сетке шесть на шесть. Ее" +" символьный код должен быть равен 55, таким образом, символ равен 7. Другие " +"маски выбирают другие позиции и дают дополнительные уравнения." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "Седьмая проверка. Метки ячеек - это позиции ввода, начинающиеся с 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Кодированная маска: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Пропустите 21 ячейку. Выберите 1. Пропустите 14. Остановитесь на 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Сумма берёт одну ячейку" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "Позиция 21 во флаге должна содержать 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Выделено: одна ячейка" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 масок дают 26 уравнений." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Решите их вместе, чтобы найти флаг." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "Исследование звука DX-Ball-панорамирование" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA предоставляет инструкцию, вызывающий элемент и данные для считывания " +"байтов для одной функции DX-Ball. Входные данные стека умножаются на 1,5625," +" смещаются на 500, масштабируются и преобразуются в целое число. " +"Поддерживаемый C проверяется в 3205 исходных x86 случаях и в отдельном " +"63-байтовом воспроизведении компилятором." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Стек" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "вход x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "Целое" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "возврат" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Восстановленный код" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "Код на C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Вызов при ударе" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Исходный код" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "сравнение" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3 205 тестов" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Сборка VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 байта совпали" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "Ход расследования REA" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Задайте вопрос о локальном объекте. REA проверяет и отслеживает данные с " +"помощью адаптеров локального анализа, возвращает доказательства и " +"поддерживает последующие вопросы по мере того, как ваш агент объясняет, " +"внедряет и тестирует." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Вопрос" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Агент + локальный файл" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "Программа / файл / Web" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Анализ и поиск" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Читать факты" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Код / ссылки /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "неизвестное" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Применить" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Ваш агент" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Объяснить / создать / тест" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Средства анализа" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Локальные адаптеры" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Следующий вопрос" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04 : расстояние между пулями и наведение их на цель кольцом" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Полный поворот по часовой стрелке имеет 256 угловых единиц. Шестнадцать " +"точек отсчета начинаются с углов от нуля, шестнадцати, тридцати двух до 240." +" Если добавить примерное направление игрока, состоящее из сорока точек, то " +"получится, что все шестнадцать точек отсчета совпадают; первая точка отсчета" +" указывает на игрока. Вращение шаблона равно нулю." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Неподвижное кольцо" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Первый маркер: угол 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Нацеленное кольцо" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Первый пункт: направление движения игрока" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Центр" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Игрок" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Одинаковое расстояние: 256 ÷ 16 = 16 угловых единиц = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Примеры" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Блог" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Начать" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Руководства" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Исходный код" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Лицензия MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Вступить в сообщество" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Подписаться в X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA · выбранный источник скрипта" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Исходный код" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Ожидаемый результат форматирования" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Инструкции" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Вызывающий абонент" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Константы" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Функция C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Кнопка" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "API предварительной загрузки" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "МПК" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "Файл CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Ваш щелчок" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Захваченный запрос" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Экспорт скрипта" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA результат · сводка.выдержка из ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA выдержка из инструкции · 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA запрос вызывающего абонента · 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "" +"Результаты в байтах REA · интерпретируются как удвоения в порядке убывания" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Восстановленный отрывок из C ·" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Посмотрите, как работает REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Руководство по установке" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Витрины →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Выбранные настройки из проверенного скрипта" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Читаемая сводка об обработчике %" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA · выбранные оригинальные инструкции" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "Идентификаторы операторов · Исходный код Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Подписывайтесь на @reatools на X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Агент → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → агент · выбранные результаты" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → агент · методы и вызывающие абоненты" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA · выбранный декомпилированный Java" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Читаемое резюме · интерпретация агента" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA · generateOTP, полный корпус" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Скачать Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Скачать Android analysis provider" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Агент → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → агент · выбранные результаты" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → агент · выбранные инструкции" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Агент → REA · прочитано_байт" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → агент · седьмые записи" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Оригинальный исполняемый файл · SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Скачайте оригинальную игру challenge" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Скачать решатель" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "Результат REA · фрагмент псевдокода" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Агент → REA · функция {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → агент · отрывок из инструкции" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → агент · отрывок из сообщения о звонящем" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Агент → REA · два {ph0}запроса на чтение в байтах" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "Результаты в байтах REA · декодируются как двойные" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Начните со своей собственной цели" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Генерация кода" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Восстановленное правило" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Регулируемые часы" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Двоичный" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Проверяющий код" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Уравнения" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Правильно!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Выполнимый" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "Выводы REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Восстановленный C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Утверждение" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Упакованное приложение" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "Открытый API" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "Оболочки IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Буфер обмена" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Исходный код DOS" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "Инструкции по REA" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Расчет угла наклона" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Пулевое кольцо" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "Открытый API страницы" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Вызов IPC средства визуализации" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Отправлено в системный буфер обмена" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Сохранено локально с помощью Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Ввод данных для уценки" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Вывод структурированного синтаксического анализатора · выдержка" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Проанализируйте свое собственное приложение" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Агент → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → агент · выбранные поля" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Агент → REA · функция {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → агент · отрывок из инструкции" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Результат той же функции · выдержка из aim" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "Соответствующий поддерживаемый C++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Кольцевой макрос · Ветвь TH04, фрагмент" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Угол и скорость · выдержка из источника" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Нажмите %, чтобы посмотреть, что произойдет с 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% от 200 равно 20. Нажмите =, чтобы добавить это значение." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "При умножении 10 становится равным 0,1. Нажмите = для умножения." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "Перевод обновляется. Пока прочтите эту страницу на английском языке." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA для анализа {ph3}и объяснения того, как он " +"экспортирует данные. Покажите соответствующий код и расположение " +"источников.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Установи REA и подключи его к этому ИИ-помощнику с помощью " +"{ph3}. Сначала покажи план изменений и дождись моего одобрения. Затем " +"проверь установку.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}\"{ph1}{ph2}Загрузите {ph3}в новую папку с примерами и распакуйте ее. " +"Используйте REA, чтобы узнать, что происходит, когда я нажимаю " +"\"Экспортировать заметки\". Покажите, где {ph4}что записано, какие поля оно " +"содержит, а также соответствующие файлы и строки.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Установи REA и подключи его к этому ИИ-помощнику с помощью " +"{ph3}. Сначала покажи план изменений и дождись моего одобрения. Затем " +"проверь установку.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Установи REA и подключи его к этому ИИ-помощнику с помощью " +"{ph3}. Сначала покажи план изменений и дождись моего одобрения. Затем " +"проверь установку.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA для проверки {ph3}. Скопируйте этот веб-" +"сайт для меня.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Реконструкция · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"При наличии {ph0} и npm запустите программу установки, выберите свой " +"кодирующий агент и ознакомьтесь с предлагаемыми изменениями." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Приведенный пример · {ph0} и npm · Ваш кодирующий агент" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Используйте средство кодирования, такое как Claude Code, Codex или Cursor. " +"Вам понадобятся {ph0} и npm; в {ph1}руководстве по установке перечислены " +"поддерживаемые версии{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Страница · {ph1}{ph2}{ph3} При экспорте заметок{ph4}{ph5} вызывается " +"функция {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Мост · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6} в основной процесс отправляется " +"именованное сообщение.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Обработчик · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Вызывает средство " +"форматирования в {ph7} и записывает файл.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} · строки 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}\"{ph1}{ph2}Спрогнозируйте CSV для заметки с идентификатором 1 и " +"заголовком {ph3}. Затем запустите {ph4}программу форматирования примера " +"с{ph5}, чтобы проверить это. Покажите прогноз и фактический " +"результат.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Заголовок остается в одном поле, заключенном в кавычки; каждая кавычка " +"удваивается. При этом выполняется прямая проверка форматирования с помощью " +"{ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV форматировщик" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Вам понадобится {ph0}22 (22.19+), 24 (24.11+) или 26+. В комплект поставки " +"входит {ph1}npm ." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "У вас нет {ph0} или вы не уверены?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Если {ph0} печатает версии v22.19+, v24.11+ или v26+, все готово. Если он " +"выводит более старую версию или \"не распознается\" / \"команда не " +"найдена\", установите {ph1} 24 LTS:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} · пример выдержки из источника" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Откройте пример{ph1} · {ph2}Скачать {ph3}{ph4} · {ph5}Загрузите файл " +"{ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} · пример источника" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Скачайте пример и распакуйте его. Архив содержит полную папку с {ph0}. " +"Проанализируйте его с {ph1}помощью и npm; Electron для этого примера не " +"нужен." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Первый раз или отсутствует {ph0} или используется средство кодирования? " +"{ph1}Следуйте пошаговому руководству по настройке →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "Например: {ph0}почему калькулятор выдаёт 220 для {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA для проверки Windows Calculator. Почему " +"{ph3} дают 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA · загружено {ph0} · выбранные строки" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Мы видели, почему {ph0}{ph1} дают 220.{ph2} Теперь давайте восстановим " +"правила для + и × и попробуем их применить." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA читает {ph1}{ph2}{ph3} При запуске приложения " +"Calculator{ph4}{ph5} код открывает {ph6}. Затем агент выбирает библиотеку " +"установленного приложения.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Используйте REA для проверки aegis-v3.4.{ph3}. Узнайте, как" +" он генерирует шестизначный код для входа, объясните, почему он меняется " +"каждые 30 секунд, и восстановите небольшую демонстрацию, в которой я могу " +"изменить время.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} · Член API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} · Помощник IPC" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "main/{ph0} · помощник обработчика" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "main/{ph0} · приемник буфера обмена" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Реконструкция · dino-speed.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "При наличии Node.js и npm запустите программу установки, выберите свой " +#~ "кодирующий агент и ознакомьтесь с предлагаемыми изменениями." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Приведенный пример · Node.js и npm · Ваш кодирующий агент" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Используйте средство кодирования, такое как Claude Code, Codex или Cursor. " +#~ "Вам понадобятся Node.js и npm; в {ph0}руководстве по установке перечислены " +#~ "поддерживаемые версии{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Страница · renderer.js{ph1}{ph2} При экспорте заметок{ph3}{ph4} " +#~ "вызывается функция {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Мост · preload.js{ph1}{ph2}{ph3}{ph4}{ph5} в основной процесс " +#~ "отправляется именованное сообщение.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Обработчик · main.js{ph1}{ph2} Запись заметок.csv{ph3}{ph4} Вызывает " +#~ "средство форматирования в {ph5} и записывает файл.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Спрогнозируйте CSV-файл для заметки с идентификатором 1 и " +#~ "заголовком \"Привет, REA\". Затем запустите средство форматирования toCsv в " +#~ "примере с помощью Node.jsNode.js чтобы проверить его. Покажите прогноз и " +#~ "фактический результат.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Заголовок остается в одном поле, заключенном в кавычки; каждая кавычка " +#~ "удваивается. При этом выполняется прямая проверка форматирования с помощью " +#~ "Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV форматировщик" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Вам понадобится Node.js 22 (22.19+), 24 (24.11+) или 26+. npm поставляется с" +#~ " Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "У вас нет Node.js или вы не уверены?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Если {ph0} печатает версии v22.19+, v24.11+ или v26+, все готово. Если он " +#~ "выводит более старую версию или \"не распознается\" / \"команда не " +#~ "найдена\", установите Node.js 24 LTS:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Откройте пример{ph1} · {ph2}Скачать export.js{ph3} · {ph4}Загрузите " +#~ "файл notes.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Скачайте пример и распакуйте его. Архив содержит полную папку с {ph0}. " +#~ "Проанализируйте это с Node.js Node.js и npm; в этом примере Electron не " +#~ "нужен." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Первый раз или отсутствует Node.js или используется средство кодирования? " +#~ "{ph0}Следуйте пошаговому руководству по настройке →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "Например: {ph0}почему калькулятор выдаёт 220 для 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Используйте REA для проверки Windows Calculator. Почему 200" +#~ " + 10% дают 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Мы видели, почему {ph0}200 + 10% дают 220.{ph1} Теперь давайте восстановим " +#~ "правила для + и × и попробуем их применить." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA читает calc.exe{ph1}{ph2} При запуске приложения " +#~ "Calculator{ph3}{ph4} код открывает {ph5}. Затем агент выбирает библиотеку " +#~ "установленного приложения.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Используйте REA для проверки aegis-v3.4.3.apk. Узнайте, как" +#~ " он генерирует шестизначный код для входа, объясните, почему он меняется " +#~ "каждые 30 секунд, и восстановите небольшую демонстрацию, в которой я могу " +#~ "изменить время.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/preload.js · Член API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/preload.js · Помощник IPC" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "main/index.js · помощник обработчика" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "main/index.js · приемник буфера обмена" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "main.js · строки 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "export.js · пример выдержки из источника" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "renderer.js · пример источника" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "preload.js · пример источника" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "main.js · пример источника" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA · загружено index.js · выбранные строки" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Используйте REA для анализа /абсолютного/пути/к/приложению " +#~ "и объясните, как оно экспортирует данные. Покажите соответствующий код и " +#~ "расположение источников.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Установите REA и подключите его к этому агенту " +#~ "программирования, используя npx rea-agents@latest setup. Покажите мне план " +#~ "установки для утверждения, затем проверьте правильность " +#~ "установки.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Загрузите https://rea.tools/examples/notes-example.zip в " +#~ "новую папку с примерами и распакуйте ее. Используйте REA, чтобы узнать, что " +#~ "происходит, когда я нажимаю \"Экспортировать заметки\". Покажите, где " +#~ "записан файл notes.csv, какие поля он содержит, а также соответствующие " +#~ "файлы и строки.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Установите REA и подключите его к этому агенту " +#~ "программирования, используя npx rea-agents@latest setup. Покажите мне план " +#~ "установки для утверждения, затем проверьте правильность " +#~ "установки.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Установите REA и подключите его к этому агенту " +#~ "программирования, используя npx rea-agents@latest setup. Покажите мне план " +#~ "установки для утверждения, затем проверьте правильность " +#~ "установки.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Используйте REA для проверки https://rea.tools/. Клонируйте" +#~ " этот веб-сайт для меня.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "код[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× панорамный масштаб" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2} Обратное проектирование чего угодно{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/th/messages.po b/website/locales/th/messages.po new file mode 100644 index 000000000..f963ca7a1 --- /dev/null +++ b/website/locales/th/messages.po @@ -0,0 +1,13083 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}บ้าน{ph1} /บล็อก" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "บล็อก" + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "ความคิดเกี่ยวกับวิศวกรรมย้อนกลับ" + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "ฟื้นฟูเกม{ph0}เรียงความ" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "การปฏิวัติอุตสาหกรรมในวิศวกรรมย้อนกลับ" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"สิ่งที่คู่มือใหม่และ " +"reconstructingTH08,TH095และTH04สอนฉันเกี่ยวกับเจ้าหน้าที่ปลายทางและความรู้นั่นรประกอบที่อีกฝั่งยิ่งสนง.โครงการ." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "อ่านบทความ" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "โดย N0zoM1z0 ·10 ตุลาคม 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} ด้านบน" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA บล็อก-ความคิดเกี่ยวกับวิศวกรรมย้อนกลับ" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"ความคิดเกี่ยวกับวิศวกรรมย้อนกลับ,การวาดภาพบนประสบการณ์ในทางปฏิบัติกับ REA " +"และเจ้าหน้าที่ปัญญาประดิษฐ์" + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-หาวิธีการทำงานของซอฟต์แวร์ วิศวกรรมย้อนกลับกับตัวแทนการเขียนโค้ดของคุณ" + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "หน้าแรก REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "เมนูหลัก" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA บน GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "เข้าร่วม REA บน Discord" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "ติดตาม REA บน X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}บ้าน{ph1} / {ph2}บล็อก{ph3} /ฟื้นฟู" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "เรียงความ" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "การปฏิวัติอุตสาหกรรมในวิศวกรรมย้อนกลับ" + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "โดย N0zoM1z0 ·10 ตุลาคม 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "ประเด็นสำคัญ" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}ให้เจ้าหน้าที่อิสระในการสืบสวน{ph1} " +"กำหนดเป้าหมายที่ชัดเจนและเกณฑ์การยอมรับแล้วให้ตัวแทนตัดสินใจว่าจะลองต่อไป." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}ใช้ที่เก็บและคอมโพเนนต์เป็นหน่วยความจำที่ทำงาน{ph1} ให้เหตุผลกับรหัส " +"การสนทนาจะสิ้นสุดลง" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}ให้หลักฐานตัดสินใจสิ่งที่คุณเรียกร้อง{ph1} " +"คำอธิบายที่มั่นใจยังคงต้องใช้การทดสอบ. " +"\"ไม่ทราบ\"เป็นคำตอบที่ถูกต้องเมื่อหลักฐานไม่สมบูรณ์" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}ทดสอบการอ้างอิงการยืนยัน(ออราเคิล)ด้วย{ph1} ลองกรณีที่มันควรจะปฏิเสธ " +"ถ้ามันพลาดข้อผิดพลาด,ทบทวนผลลัพธ์ก่อนหน้านี้ที่ขึ้นอยู่กับมัน." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}เราอยู่ในยุคแรกของการปฏิวัติอุตสาหกรรมของรี{ph1} " +"วิธีการยังคงเป็นรูปเป็นร่าง มีเหลืออีกมากมายให้สำรวจ" + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "วิธีสารประกอบประสบการณ์" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}ทิศทางของมนุษย์{ph1} *เป้าหมายและเกณฑ์การยอมรับ" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "อิสระในการทำงาน" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "ผู้ช่วย AI" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "เลือกการทดสอบ{ph0}เสนอสมมติฐาน" + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "การตรวจสอบ" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "เกณฑ์อ้างอิงสำหรับตรวจสอบ" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "ทดสอบกับ{ph0}การอ้างอิงคอนกรีต" + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "คลังโค้ด" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "หน่วยความจำของงาน" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "รหัส,หลักฐาน,{ph0}ตรวจสอบและบทเรียน" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "ไม่ตรงกัน{ph0}{ph1}แก้ไขสมมติฐาน{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "ดีกว่า{ph0}{ph1}จุดเริ่มต้น{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "นำกลับมาใช้" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}ผ่าน{ph1} *เก็บผลและหลักฐาน" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"แต่ละโครงการออกต่อไปด้วยจุดเริ่มต้นที่ดีขึ้น " +"ซึ่งรวมถึงการแก้ไขเช็คเมื่อเราค้นพบช่องว่าง" + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "ในบทความนี้" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}สิงหาคม 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0}TH08:ความต่อเนื่อง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}สองวิธี{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0}TH095:การทบต้น{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0}TH04:สถาปัตยกรรม{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}จากที่แน่นอนที่จะอ่านได้{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}การเปลี่ยนแปลงอุตสาหกรรม{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}สิ่งที่เป็นไปได้{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "สิ่งที่เปลี่ยนแปลงในเดือนสิงหาคม 2026" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"ก่อนที่จะทำงานนี้ผมได้ทำมากของวิศวกรรมย้อนกลับคู่มือ " +"ฉันจะตรวจสอบฟังก์ชั่นจนกว่าฉันจะมีคำอธิบายแล้วทดสอบคำอธิบายที่กับโปรแกรม " +"การต่อไปหมายถึงการใช้จ่ายมากขึ้นของเวลาของตัวเองในการทำงานต่อไป " +"มันยังหมายถึงการเก็บภาพขนาดใหญ่มากขึ้นในหัวของฉัน." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"ส่วนใหญ่ของงานใหม่ของฉันอยู่ในเกม " +"ผมสร้างพวกเขาเพื่อให้พฤติกรรมของพวกเขาสามารถเข้าใจได้และในที่สุดก็ดำเนินการ " +"นั่นคือประสบการณ์ที่อยู่เบื้องหลังบทความนี้. " +"วิธีการที่จะมีประโยชน์อื่นๆแต่แต่ละเขตข้อมูลความต้องการที่จะสร้างสิ่งที่มันสามารถตรวจ" + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"ในเดือนสิงหาคม 2026 ผมเริ่มสำรวจตัวแทนขับเคลื่อนอีกครั้งอย่างจริงจัง " +"ผมอยากเห็นว่าตัวแทนจะสามารถเข้าถึงโปรแกรมและเครื่องมือพัฒนาสามัญได้ไกลแค่ไหน" +" การฟื้นฟูทูโฮทำให้ผมมีโครงการมากมายที่จะหาคำตอบได้" + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"ความคืบหน้าในช่วงต้นเป็นที่น่าตกใจ " +"การสืบสวนอาจดำเนินต่อไปได้โดยที่ผมไม่เลือกทุกขั้นตอน " +"การเปรียบเทียบล้มเหลวอาจส่งเอเจนต์ไปยังฟังก์ชันการเรียกอื่น " +"มันอาจจะเขียนการวินิจฉัยขนาดเล็กและใช้ผลในการตัดสินใจว่าจะลองต่อไป " +"ให้มันว่าเสรีภาพสร้างความแตกต่าง:ฉันสามารถใช้ความสนใจมากขึ้นในทิศทางของโครง" + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"ก้าวได้รับความสนใจของฉันก่อน " +"แล้วผมก็เริ่มสงสัยว่าอะไรจะรอดพ้นจากโครงการปัจจุบัน " +"เกมต่อไปจะได้รับประโยชน์จากทุกอย่างที่เราเพิ่งได้เรียนรู้?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08:อาคารในการทำงานของมนุษย์" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0}TH08{ph1},คืนตายเริ่มเป็นความต่อเนื่องของ " +"{ph2}GensokyoClubการฟื้นฟู{ph3}. " +"แหล่งข่าวสาธารณะของพวกเขาทำให้ฉันมีรากฐานที่สำคัญ " +"มันมาพร้อมกับความรู้เกี่ยวกับการสร้างและประวัติของการมีส่วนร่วมที่ผมเก็บรักษาไว้ใน" + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"ประวัติศาสตร์ที่นำเข้าสิ้นสุดลงที่สาธารณะด่าน 10 สิงหาคม " +"ความต่อเนื่องของฉันเริ่มต้นในวันที่ 13 สิงหาคม โดย 19 " +"สิงหาคมบัญชีแยกประเภทที่บันทึกไว้สำหรับทุก 1,107 ระบุฟังก์ชั่นเกม" + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"เล่นได้ Linux ฟื้นฟูพอร์ตมีความมุ่งมั่นที่ 24 " +"สิงหาคมประมาณสิบเอ็ดวันหลังจากที่ต่อเนื่องเริ่ม ฉบับเว็บตาม เดอะพื้นเมือง " +"Linux ปล่อย 64 บิตมาถึงเมื่อวันที่ 30 สิงหาคม" + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"สิ่งที่ทำให้ดิฉันรู้สึกว่างานได้มาถึงโครงการที่ผู้คนสามารถดำเนินงานได้. " +"การเดินทางมีปัญหาที่จำเป็นต่อไปนี้นอกเหนือจากฟังก์ชั่นของแต่ละบุคคล. " +"แม้ว่าทั้งสองฟังก์ชันดูถูกต้องในการแยกพวกเขาสามารถตั้งใจใช้สำเนาแยกต่างหากของ" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"นี้ทำให้การตรวจสอบการอ้างอิงกลางในการทำงาน ฉันเรียกพวกเขา " +"{ph0}การอ้างอิงการตรวจสอบ(ออราเคิล){ph1}. " +"การเปรียบเทียบรหัสสามารถบอกเราว่าฟังก์ชั่นที่สร้างขึ้นใหม่ทำซ้ำคำแนะนำเดิม " +"ตรวจสอบรันไทม์สามารถบอกเราว่าเส้นทางที่ใช้สิทธิถึงสถานะที่คาดไว้ " +"ตัวแทนเสนอคำอธิบายและทดสอบมัน;ไม่ตรงกันให้มันบางสิ่งบางอย่างที่เฉพาะเจาะจงใน" + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "ตรงกับค่าคงที่ผิดพอดี" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"คำพยากรณ์คือซอฟต์แวร์ที่มีคนเขียน TH08 " +"ให้ฉันเตือนที่ชัดเจนของวิธีการมากสามารถขึ้นอยู่กับซอฟต์แวร์ที่" + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"ในเดือนกันยายนข้อผิดพลาดที่รายงานโดยพอร์ตสวิทช์ปลายน้ำนำกลับไปที่รายการคอลเลกชั" +" แหล่งที่มาที่สร้างขึ้นใหม่ตรวจสอบอำนาจของผู้เล่นกับ {ph0}. ต้นฉบับที่ใช้ " +"{ph1} เกณฑ์สูงสุด-อำนาจ" + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"พลังงานปกติจะไม่เป็นลบดังนั้นการตรวจสอบพลังงานที่สร้างขึ้นใหม่ได้อย่างมีประสิทธิภ" +" เหนือบรรทัดคอลเลกชันเกมสามารถดึงดูดรายการโดยไม่ต้องใช้พลังงานสูงสุด " +"ข้อยกเว้นอื่นๆในสภาพที่ถูกต้อง อันนี้เปลี่ยนพฤติกรรมอย่างต่อเนื่อง" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}แต่ฟังก์ชั่นที่มีอยู่แล้วผ่านการเปรียบเทียบที่แน่นอน{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"สร้างใหม่สามารถใส่ค่าคงที่ที่อยู่อื่น " +"เครื่องมือการเปรียบเทียบคิดว่าโดยการปรับที่อยู่ในคำแนะนำที่รวบรวมก่อนที่จะเปรียบเ" +" แต่มันไม่เคยตรวจสอบค่าจุดลอยเก็บไว้ที่อยู่ที่อ้างอิง" + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"ที่เหลือหลุมในการตรวจสอบ " +"มันสามารถชี้การเรียนการสอนที่สร้างขึ้นใหม่ที่เดิมของ {ph0} " +"ในขณะที่แหล่งที่ยังคงกล่าวว่า {ph1}. ไบต์คำสั่งที่ตรงกัน " +"แหล่งข่าวมีความหมายบางอย่างที่แตกต่าง" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"ร {ph0}2 กันยายนแก้ไข{ph1} " +"แก้ไขแหล่งที่มาและทำการเปรียบเทียบตรวจสอบไบต์ที่เกิดขึ้นจริงของค่าคงที่อ้างอิง" +" A {ph2}การตรวจสอบที่กว้างขึ้น{ph3} จากนั้นตรวจสอบ 1,548 " +"จุดลอยตัวอ้างอิงอย่างต่อเนื่อง " +"มันพบอีกสิบสองอ้างอิงที่ไม่ถูกต้องในห้าฟังก์ชั่นที่ยอมรับ" + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"การเปรียบเทียบจะตรวจสอบค่าคงที่ทุกจุดลอยตัว " +"การทดสอบรวมถึงค่าที่ไม่ถูกต้องโดยเจตนาเพื่อให้แน่ใจว่าพวกเขาจะถูกปฏิเสธ " +"เรายังต้องทบทวนผลที่ได้ผ่านการตรวจสอบที่อ่อนแอ" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ{ph1} " +"ซ่อมมันเป็นส่วนหนึ่งของการซ่อมเกม" + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"ที่สำคัญเมื่อทีมส่วนใหญ่เป็นหนึ่งคนที่ทำงานกับเจ้าหน้าที่ " +"ผมเองไม่สามารถตรวจสอบทุกบรรทัดที่พวกเขาผลิต,มากของความเชื่อมั่นของฉันอยู่บนเช็" +" " +"อ้างอิงการตรวจสอบที่ใช้ร่วมกัน(ออราเคิล)ของจุดบอดจะมีผลต่อการตรวจสอบจำนวนมาก" +" ฉันต้องเข้าใจสิ่งที่ตรวจสอบจริงตรวจสอบและทดสอบกับกรณีที่ควรจะล้มเหลว" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"ขณะที่งานดำเนินต่อไปเช็คเหล่านั้นกลายเป็นส่วนหนึ่งของคลังเก็บ. " +"ดังนั้นไม่สาเหตุของการเปลี่ยนแปลงแหล่งที่มาและบันทึกที่ให้เซสชั่นต่อมารับที่ก่อนหน้านี้ห" +" {ph0}ที่เก็บข้อมูลซอร์สโค้ดได้กลายเป็นหน่วยความจำการทำงานของโครงการ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}ชุดที่ประสบความสำเร็จให้เราทั้งการกู้คืนรหัสและสภาพแวดล้อมที่ดีกว่าสำหรับชุดต่อไป.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "สองความคิดที่แตกต่างกันของการฟื้นฟู" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClubของ {ph0}สาธารณชน{ph1} " +"ทำให้ความขัดแย้งกับชนิดของงานนี้อย่างชัดเจน " +"ประกาศประกาศว่าการพัฒนาต่อไปจะเกิดขึ้นเอกชนจนกว่าจะเสร็จสิ้น หนึ่งทางอ่าน:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"การเพิ่มขึ้นของกริฟเตอร์(ไอรวบรวมและพอร์ต)ในพื้นที่นี้การจากการทำงานของเราสีภาพที่ไ…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"แจ้งให้ทราบล่วงหน้ายังอธิบายโทรทางจิตวิทยาเกี่ยวกับผู้ดูแล " +"นโยบายการมีส่วนร่วมของพวกเขาไม่รวมการร้องขอดึงผลิตเป็นหลักกับเอไอ " +"พวกเขาใช้เวลาว่างในการทำงานที่ยากลำบากและงานนั้นช่วยทำให้ผมดำเนินต่อไปได้. " +"ผมเคารพความพยายามที่อยู่เบื้องหลังมัน " +"ความขัดแย้งที่ฉันต้องการจะหารือเกี่ยวกับวิธีการฟื้นฟูควรดำเนินการและวิธีการมีส่วนร่วม" + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"ในขั้นตอนการทำงานด้วยตนเองฉันรู้ว่าการพัฒนาความเข้าใจของฟังก์ชั่นและการสร้างมั" +" โครงการหนึ่งต้องอาศัยความเชี่ยวชาญของบุคคลนั้นอย่างมาก " +"ความไว้วางใจในผู้สนับสนุนที่สำคัญเพราะมากของเหตุผลที่เกิดขึ้นในขณะที่พวกเขาทำงา" + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"โครงการที่มีอยู่แล้วรักษาความรู้ในแหล่งที่มาของพวกเขาและสร้างเครื่องมือ " +"สิ่งที่เปลี่ยนแปลงสำหรับผมก็คือเจ้าหน้าที่สามารถใช้ความรู้นั้นเพื่อติดตามการสืบสวนต่อไปได้ด้วยตัวเอง" + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"ในความต่อเนื่องของฉันฉันตัดสินใจวัตถุประสงค์และมาตรฐานสำหรับการยอมรับผล " +"เจ้าหน้าที่มีอิสระในการสืบสวน " +"การฟื้นฟูที่นำเสนอแล้วมีเพื่อความอยู่รอดการตรวจสอบที่เกี่ยวข้อง " +"ฉันต้องการให้บุคคลอื่นสามารถที่จะตรวจสอบว่าทำไมเราเลือกการดำเนินงาน,แม้ว่าตัวแ" + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"นี่อาจเป็นการเปลี่ยนแปลงที่ยากลำบาก " +"ปีของการทำงานอย่างระมัดระวังอาจจะกลายเป็นรากฐานสำหรับความต่อเนื่องที่ย้ายไ " +"ที่ทำให้เกิดคำถามจริงเกี่ยวกับเครดิต " +"การเปลี่ยนแปลงสิ่งที่ผู้ดูแลจำเป็นต้องรู้ก่อนที่จะยอมรับการมีส่วนร่วม" + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"การเปรียบเทียบเชิงอุตสาหกรรมช่วยให้ผมคิดถึงสิ่งนี้ " +"ในงานฝีมือมากของกระบวนการขึ้นอยู่กับทักษะของบุคคลที่ดำเนินการออก " +"เครื่องจักรจะเปลี่ยนเมื่อต้องการทักษะนั้น " +"คนยังคงมีการออกแบบกระบวนการและรับรู้เมื่อผลผลิตที่ไม่ถูกต้อง " +"ชุมชนต่างๆสามารถเลือกได้ว่าพวกเขาต้องการเปลี่ยนแปลงมากแค่ไหน" + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"ทางเลือกของฉันคือการดำเนินการอย่างเปิดเผยกับการทำงานที่สืบทอดเครดิตและประวั " +"การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ " +"นั่นทำให้เรามีวิธีที่จะถามว่าวิธีการนี้สามารถไปไกลแค่ไหนและเรียนรู้จากสิ่งที่ผิดพลาดไปพร้อมกัน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"แหล่งที่มา: GensokyoClubของ {ph0}แจ้งให้ทราบล่วงหน้า{ph1},ตรวจสอบเมื่อ 10 " +"ตุลาคม 2026,และ {ph2}นโยบายการมีส่วนร่วม{ph3}. " +"ใบเสนอราคาเป็นข้อความที่ตัดตอนมาที่สั้นลง TH08ของ " +"{ph4}เครดิตและแหล่งที่มา{ph5} บันทึกขอบเขตความต่อเนื่อง" + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095:ประสบการณ์เริ่มต้นการทบต้น" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0}TH095{ph1} ยิงกระสุนทำให้ค่าของประสบการณ์ที่ง่ายมากที่จะเห็น " +"พื้นที่เก็บข้อมูลของมันเริ่มเมื่อวันที่ 29 " +"สิงหาคมกับศูนย์ยืนยันฟังก์ชั่นเกมในบัญชีแยกประเภท เรายังคงต้องเรียนรู้เกม " +"แต่เรารู้อยู่แล้วมากขึ้นเกี่ยวกับวิธีการเริ่มต้นการฟื้นฟูและวิธีการที่จะให้มันย้าย" + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"โดย 7 กันยายนทั้งหมด 697 ระบุฟังก์ชั่นเกมมีแหล่งที่มา พอถึง 8 กันยายน 696 " +"ได้รับการยอมรับว่าเป็นการเปรียบเทียบที่แน่นอน. " +"โปรแกรมทั้งหมดที่เชื่อมโยงในวันที่ 9 กันยายน ร Windows ผม386 " +"ฟื้นฟูถูกทำเครื่องหมายเล่นได้เมื่อวันที่ 10 " +"กันยายนประมาณสิบสองวันหลังจากการเริ่มต้น" + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"ผมพบว่านี่น่าตื่นเต้นกว่าความเร็วของโครงการแรก " +"เป้าหมายใหม่จะได้รับประโยชน์จากการทำงานที่ทำในเกมอื่น. " +"ประสบการณ์ที่มีอยู่แล้วในเครื่องมือและในวิธีการที่โครงการได้รับการจัด" + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"ตัวอย่างเช่น, TH08 ได้สอนให้เราให้ความสนใจกับโปรแกรมประกอบในช่วงต้น " +"หากฟังก์ชั่นการกู้คืนหลายขึ้นอยู่กับสถานะเดียวกันการเปรียบเทียบแยกของพวกเขาออกจ" +" เราต้องเห็นพวกเขาทำงานด้วยกัน บทเรียนนั้นช่วยสร้างวิธีการที่เราเข้าหา " +"TH095ทั้งโปรแกรมสร้าง" + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"บทเรียนที่อยู่ในหัวของฉันจะมีประโยชน์ในขณะที่ฉันอยู่ที่นั่น " +"เมื่อมันกลายเป็นตรวจสอบว่าเซสชั่นอื่นสามารถทำงานก็สามารถให้ความช่วยเหลือหลังจ" +" ตัวแทนต่อไปสามารถใช้ผลลัพธ์โดยไม่ต้องทำซ้ำการสืบสวนที่นำไปสู่มัน" + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"ข้อผิดพลาดคงที่จุดลอยตัวอยู่ในหน่วยความจำที่มากเกินไป " +"มันอธิบายว่าทำไมการตรวจสอบการอ้างอิงยังต้องตรวจสอบข้อมูลที่อยู่เบื้องหลังมัน" +" การแก้ไขด้วยรหัสช่วยให้โครงการในภายหลังหลีกเลี่ยงการสืบทอดจุดบอดของเครื่องเ" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}วิธีการที่จะกลายเป็นส่วนหนึ่งของวัสดุเริ่มต้นสำหรับเกมถัดไป{ph1} " +"เราสามารถใช้ความพยายามของโครงการต่อไปมากขึ้นกับสิ่งที่เป็นจริงใหม่เกี่ยวกับเป้าหมาย" + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"ประโยชน์เดียวกันสามารถใช้ได้กับคนที่เข้าร่วมในภายหลัง. " +"Theyตรวจสอบการตัดสินใจและเรียกใช้การตรวจสอบก่อนที่จะดำเนินการต่อการทำงา " +"พวกเขาไม่ได้มีการสร้างประวัติของโครงการทั้งหมดเพื่อหาเหตุผลที่แหล่งที่มาที่มีลักษณะ" + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04:เวิร์กโฟลว์มีชีวิตอยู่สถาปัตยกรรมที่แตกต่างกัน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0}TH04{ph1},เรื่องที่ดินบัวเอางานนี้เป็น PC-98 ดอส. " +"เป้าหมายอยู่ในขณะนี้สภาพแวดล้อม 16 บิตกับสี่โปรแกรมความร่วมมือ " +"การทำความเข้าใจพฤติกรรมของฮาร์ดแวร์จำเป็นต้องมีหลักฐานที่แตกต่างจาก Windows " +"กเขา ที่อยู่ {ph2}เรค 98{ph3} " +"ให้ความรู้ที่มีคุณค่าและวัสดุแหล่งที่มาที่นี่ด้วย" + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"การฟื้นฟูดอสกำลังทำงานอยู่ " +"ในการทดสอบด้วยตนเองของฉันฉันเล่นเส้นทางปกติที่สมบูรณ์ผ่านตอนจบของพวกเขาและ " +"งานปัจจุบันเป็นพอร์ตพื้นเมือง 64 บิต " +"การสร้างเวอร์ชันดอสทำงานก่อนทำให้พอร์ตการสื่อสารนั้นมีการอ้างอิง" + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"สถาปัตยกรรมเปลี่ยนสิ่งที่เราต้องการในการสืบสวน " +"นอกจากนี้ยังมีการเปลี่ยนแปลงคอมไพเลอร์และรันไทม์กับที่เราตรวจสอบการทำงานของ " +"แต่ตัวแทนยังคงสามารถทำตามคำถามผ่านไปยังผลลัพธ์และให้ผลลัพธ์ที่เป็นแนวทางในการทดลองต่อไป" + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"พิจารณาการเปลี่ยนแปลงจากการเล่นเกมที่จะสิ้นสุด " +"เราต้องรู้ว่ารัฐใดที่ดำเนินการข้ามขอบเขตนั้นและโปรแกรมใดที่รับผิดชอบต่อมัน " +"นั่นคือสิ่งที่เราสามารถตรวจสอบกับผลิตภัณฑ์ดอส. " +"เมื่อหลักฐานและการตรวจสอบที่มีอยู่ตัวแทนสามารถทำงานผ่านคำถามมากที่สุดเท่าที่มันไ" +" Windows ชื่อเรื่อง" + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"นี่คือเหตุผลที่ TH04 เรื่องที่จะโต้แย้ง " +"การเปลี่ยนแปลงแพลตฟอร์มอย่างมีนัยสำคัญไม่ได้บังคับให้เราเริ่มต้นใหม่ด้วยวิธีการใหม่ในการทำงาน" +" สถาปัตยกรรมกำหนดปัญหาเวิร์กโฟลว์ยังคงให้เราวิธีแก้ปัญหา" + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"สำหรับพอร์ต 64 " +"บิตตอนนี้เราสามารถตรวจสอบการดำเนินงานใหม่กับพฤติกรรมที่กู้คืนแล้วใน " +"ความรู้จากการบูรณะทำให้ท่าเรือมีอะไรบางอย่างที่จะสร้างขึ้น" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"รัฐโครงการณวันที่ 10 ตุลาคม 2026: {ph0}การฟื้นฟูและทดสอบด้วยตนเอง{ph1} · " +"{ph2}พอร์ต 64 บิต{ph3}. ท่าเรือยังคงอยู่ในการพัฒนา" + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "จากโค้ดที่แน่นอนไปยังโค้ดที่อ่านได้" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "เมื่อการฟื้นฟูการทำงานผมต้องการให้คนอื่นที่จะสามารถที่จะเข้าใจมัน" + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"สำหรับผมการชุมนุมและการชดเชยดิบสามารถรู้สึกเหมือนเพื่อนเก่า " +"ผมตระหนักว่านี่เป็นคำนิยามที่ผิดปกติเล็กน้อยของ\"อ่านได้\"คนส่วนใหญ่ต้องการที่จะปฏิบัติตามตรรกะของเกมโดยไม่เก็บรูปแบบหน่วยความจำของปฏิ" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"นั่นคือที่ {ph0}การฟื้นฟูความหมาย{ph1} เข้ามา " +"ฟิลด์ที่กู้คืนอาจจะยังคงเป็นที่รู้จักกันโดยส่วนใหญ่ของการชดเชย " +"เราทำตามวิธีการที่เกมใช้มันจนกว่าเราจะสามารถอธิบายบทบาทของมัน " +"จากนั้นเราสามารถให้ชื่อที่มีความหมายและประเภทที่เหมาะกับหลักฐาน " +"เราให้เหตุผลกับแหล่งที่มาเพื่อให้คนต่อไปสามารถดูว่าการตีความที่มาจากไหน" + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"ยิ่งสำหรับพอร์ตซอฟต์แวร์ " +"ที่อยู่ที่แน่นอนบอกฉันว่าสิ่งที่อาศัยอยู่ในปฏิบัติการเก่า " +"มันให้ความช่วยเหลือเล็กๆน้อยๆการดำเนินงาน 64 " +"บิตในการตัดสินใจว่าวัตถุที่ควรจะเป็นเจ้าข " +"ที่จะย้ายพฤติกรรมได้อย่างปลอดภัยเราจำเป็นต้องกู้คืนความสัมพันธ์ที่อยู่เบื้องหลังการเข้" + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "คำสั่งที่ผมใช้ตอนนี้คือ:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}กู้คืนเส้นพื้นฐานที่แน่นอน{ph1} " +"รวบรวมชิ้นส่วนที่สร้างขึ้นใหม่ด้วยคอมไพเลอร์ประวัติศาสตร์ " +"เปรียบเทียบรหัสและข้อมูลที่เกี่ยวข้องกับปฏิบัติการเดิม " +"บันทึกความแตกต่างที่ยังไม่ได้แก้ไขเพื่อให้ขั้นตอนต่อไปมีจุดเริ่มต้นที่ชัดเจน" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}สร้างและเล่นบนแพลตฟอร์มเดิม{ph1} " +"เชื่อมโยงชิ้นส่วนเหล่านั้นลงในโปรแกรมจริงโดยใช้สถาปัตยกรรมเดิมและคอมไพเลอร์ " +"การออกกำลังกายเส้นทางการเล่นเกมที่สำคัญ " +"นี่คือที่ที่เราสามารถพบปัญหาเกี่ยวกับสถานะที่ใช้ร่วมกันหรือเริ่มต้นที่การเปรียบเทียบฟังก์ชั่" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}สร้างความหมายใหม่กับการอ้างอิงทั้งสอง{ph1} " +"ใช้ส่วนหนึ่งที่สอดคล้องกันของเกมในเวลาและสร้างสิ่งที่แหล่งที่มาของการกู้คืนหมายถึง" +" " +"ปรับปรุงการเป็นตัวแทนในขณะที่รักษาเปรียบเทียบที่แน่นอนและการสร้างประวัติศาสตร์" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}ทำให้ท่าเรือที่ทันสมัย{ph1} " +"ย้ายลักษณะการทำงานที่กำหนดไว้ในสภาพแวดล้อมใหม่เช่นการสร้างแบบ 64 บิต " +"เกมเดิมแพลตฟอร์มที่สร้างขึ้นใหม่ยังคงเป็นข้อมูลอ้างอิงสำหรับการเปรียบเทียบวิธีการท" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"สร้างเล่นได้จากขั้นตอนที่สองจะกลายเป็น " +"{ph0}อ้างอิงการตรวจสอบที่สอง(ออราเคิล){ph1} ในช่วงที่สาม " +"การอ้างอิงการตรวจสอบครั้งแรก(ออราเคิล)จะตรวจสอบว่าแหล่งที่มาที่เปลี่ยนแปลงของเร" +" " +"การตรวจสอบที่สองว่าโปรแกรมที่สร้างขึ้นใหม่ยังคงสร้างและทำงานอย่างถูกต้องตามเส้นทางที่เราออกกำลังกาย" + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"พวกเขาจับความผิดพลาดที่แตกต่างกัน " +"การเปลี่ยนแปลงชนิดสามารถเปลี่ยนแปลงคำแนะนำที่สร้างขึ้น " +"การเปลี่ยนแปลงความเป็นเจ้าของสามารถออกจากสองส่วนของเกมโดยใช้สำเนาที่แตกต่ " +"การเก็บรักษาทั้งสองตรวจสอบให้ตัวแทนคอนกรีตล้มเหลวในการตรวจสอบก่อนที่จะดำเนิ" + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"ชื่อต้องการหลักฐานของตัวเอง " +"การเปรียบเทียบที่แน่นอนไม่สามารถบอกเราว่าสนามจริงๆหมายถึง\"เวลาคงกระพัน\"เราต้องสร้างที่จากวิธีการที่เกมเขียนและใช้มัน" +" " +"ถ้าความหมายยังคงไม่แน่นอนชื่อที่เป็นกลางจะเป็นประโยชน์ต่อผู้อ่านต่อไปมากกว่าการเดาที่มั่นใจ." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"เราเรียนรู้คำสั่งนี้ผ่านโครงการ TH08 " +"แล้วมีพอร์ตที่สามารถเล่นได้ก่อนบางส่วนของการตรวจสอบแพลตฟอร์มในอดีตในภายหลัง " +"ที่ทำให้ข้อบกพร่องบางอย่างยากที่จะมองเห็น ร " +"{ph0}เวิร์กโฟลว์ปัจจุบันของโรงงาน{ph1} " +"ทำให้แพลตฟอร์มเดิมสร้างก่อนเพื่อให้การทำงานความหมายสามารถใช้เป็นข้อมูลอ้างอิง" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}การฟื้นฟูที่แน่นอนทำให้เราอ้างอิง " +"การฟื้นฟูความหมายทำให้ความรู้ที่กู้คืนใช้งานได้{ph1} " +"พอร์ตแล้วสามารถสร้างทั้งสอง" + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "อะไรทำให้เกิดการเปลี่ยนแปลงทางอุตสาหกรรม" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"โครงการเหล่านี้เปลี่ยนไปที่ผมใช้ความสนใจ " +"เมื่อตัวแทนสามารถดำเนินการมากของการสอบสวนไปข้างหน้า,การปรับปรุงสภาพแวดล้ " +"เครื่องมือที่ดีกว่าจะช่วยให้มีทุกฟังก์ชันในภายหลังที่จำเป็น." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"การปกครองตนเองมีความสำคัญที่นี่ " +"ขั้นตอนต่อไปที่มีประโยชน์มักจะกลายเป็นที่ชัดเจนเท่านั้นหลังจากการทดลองที่ล้มเหลว" +" ตัวแทนต้องการอิสรภาพมากพอที่จะทำตามผลลัพธ์ที่ไม่คาดคิด " +"ถ้าต้องรอให้ดิฉันกำหนดแต่ละขั้นงานส่วนใหญ่ยังคงเกี่ยวข้องกับความสนใจของดิฉัน." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"ผมคาดว่าเจ้าหน้าที่จะทำสมมติฐานที่ผิด " +"สิ่งที่สำคัญคือว่าเราสามารถทดสอบพวกเขาและเรียนรู้จากผล " +"ตรวจสอบล้มเหลวจะช่วยให้มันเข้าใจความผิดพลาดดีพอที่จะลองอีกครั้ง. " +"ฉันยังต้องตัดสินใจว่าหลักฐานที่สะสมจะสนับสนุนโครงการนี้หรือไม่" + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA ช่วยให้ตัวแทนเข้าถึงเครื่องมือการวิเคราะห์ " +"คำถามเกี่ยวกับการเรียกของฟังก์ชันสามารถนำตรงไปตรวจสอบที่โทร. " +"โครงการฟื้นฟูวัสดุคอมไพเลอร์และการตรวจสอบการอ้างอิงของตัวเอง " +"ตัวแทนสามารถใช้ผู้ที่จะทดสอบแหล่งที่มาที่นำเสนอและดูว่าคำอธิบายของมันถือขึ้น" + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"ร TH08 " +"บักแสดงให้เห็นว่าทำไมการตรวจสอบเหล่านั้นสมควรได้รับความสนใจทางวิศวกรรมของตัวเอง" +" " +"เมื่อเปรียบเทียบเดียวกันถูกนำมาใช้ในหลายร้อยฟังก์ชั่นช่องว่างในมันสามารถแพร่กระจ" +" การทดสอบตัวตรวจสอบช่วยเพิ่มข้อเสนอแนะที่มีอยู่ทั้งหมดที่ทำงานในภายหลัง" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"การเปรียบเทียบอุตสาหกรรมมีตัวอย่างทางประวัติศาสตร์ที่เป็นประโยชน์ที่นี่ " +"โบลตันและวัตต์แนะนำ {ph0}ตัวบ่งชี้เครื่องยนต์ไอน้ำใน 1796{ph1} " +"เพื่อช่วยปรับวาล์วเครื่องยนต์ รุ่นบันทึกตรวจสอบความดันผ่านจังหวะลูกสูบ " +"มันทำให้พฤติกรรมภายในของเครื่องยนต์สามารถตรวจสอบได้ " +"เครื่องมือเปรียบเทียบของเรามีจุดประสงค์ที่คล้ายกัน:พวกเขาให้เราตรวจสอบสิ่งที่เครื่องจักรกำลังทำในขณะที่เราปรับปรุงมัน" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}เราอยู่ในช่วงเริ่มต้นของการเปลี่ยนแปลงอุตสาหกรรมนี้{ph1} " +"โครงสร้างพื้นฐานส่วนใหญ่ยังคงยังไม่บรรลุนิติภาวะ " +"ตัวแทนสามารถเคลื่อนย้ายได้เร็วกว่าการตรวจสอบของเราถูกออกแบบมาเพื่อสนับสนุน " +"เมื่อเราพบข้อบกพร่องในเครื่องมือที่ใช้ร่วมกัน,เราต้องซ่อมแซมและทบทวนผลที่ได้รับผลก" +" โครงการถัดไปแล้วสามารถสืบทอดเครื่องมือที่แข็งแกร่ง" + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"นอกจากนี้ยังมีข้อจำกัดในการสนทนาอย่างใดอย่างหนึ่งในทางปฏิบัติ. " +"มันจะจบลงก่อนที่การฟื้นฟูขนาดใหญ่จะเสร็จสิ้น " +"ที่เก็บซอร์สโค้ดต้องทำให้เซสชันอื่นดำเนินการต่อโดยไม่สูญเสียเหตุผลในการตัดสินใจล่า" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"ร {ph0}โรงงานฟื้นฟูโทโฮ{ph1} งอกออกมาจากความต้องการที่ " +"รงการที่ใช้ร่วมกันเพื่อดำเนินการตรวจสอบและบทเรียนของพวกเขาไปข้างหน้า. " +"ทำงานในหนึ่งเกมสามารถปรับปรุงเงื่อนไขเริ่มต้นอีก" + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"นั่นคือสิ่งที่ทำให้การเปรียบเทียบอุตสาหกรรมมีความหมายกับผม " +"ประสบการณ์เริ่มกลายเป็นส่วนหนึ่งของเครื่องมือที่ผู้อื่นสามารถใช้ได้ " +"ปรับปรุงเครื่องมือเหล่านั้นจะเปลี่ยนแปลงจำนวนคนถัดไป-หรือตัวแทนถัดไป-" +"สามารถทำได้." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "โครงการที่เราสามารถพิจารณาได้ในขณะนี้" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"ก้าวสำคัญเพราะมันเปลี่ยนการตัดสินใจที่จะเริ่มต้น " +"เกมอาจจะน่าสนใจที่จะย้อนกลับวิศวกรและยังคงต้องการมากขึ้นของความสนใจของตัวเอ " +"หลายโครงการจะอยู่ความคิด" + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"ตอนนี้ฉันสามารถเห็นวิธีที่จะให้โครงการดังกล่าวย้ายผ่านการตรวจสอบซ้ำ " +"การฟื้นฟูการทำงานทำให้พอร์ตซอฟต์แวร์ในทางปฏิบัติมากขึ้น " +"การกู้คืนความหมายที่อ่านได้ทำให้ง่ายขึ้นสำหรับคนอื่นในการสำรวจสมัย " +"ความพยายามใส่ลงไปในการทำความเข้าใจเกมสามารถให้จ่ายออกหลังจากที่รุ่นแรกที่ท" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"ตอนนี้ผมมองไปที่โปรแกรมที่ไม่คุ้นเคยและขอให้: " +"{ph0}อะไรการเข้าถึงข้อเสนอแนะและความรู้ที่สะสมจะช่วยให้ตัวแทนทำงานเกี่ยวกับเรื่องนี้{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"คำถามที่ทำให้ฉันพิจารณาโครงการที่ฉันจะมีก่อนหน้านี้เหลือเพียงอย่างเดียว " +"แต่ละคนสามารถปรับปรุงวิธีการที่เราเข้าใกล้ต่อไป " +"ผมอยากสืบต่อไปว่ามันพาเราไปได้ไกลแค่ไหน" + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "ความคืบหน้าโครงการและแหล่งที่มา" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"วันที่อธิบายจุดตรวจโครงการบันทึกการตรวจสอบกับประชาชน GitHub ประวัติ 10 " +"ตุลาคม 2026. เวลาที่ผ่านไปเป็นเวลาปฏิทินระหว่างกระทำ " +"การแสดงตนของแหล่งที่มาการเปรียบเทียบที่แน่นอนสร้างและผลรันไทม์แต่ละชื่อก้าวที่แตก" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0}TH08:{ph1} {ph2}13 สิงหาคมต่อเนื่อง{ph3}, {ph4}19 " +"สิงหาคมที่มาบัญชีแยกประเภท{ph5}, {ph6}24 สิงหาคม Linux ท่าเรือ{ph7}, {ph8}26" +" สิงหาคมฉบับเว็บ{ph9} และ {ph10}30 สิงหาคม 64-บิต Linux ปลดปล่อย{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0}TH095:{ph1} {ph2}29 สิงหาคมบัญชีแยกประเภทเริ่มต้น{ph3}, {ph4}7 " +"กันยายนที่มาบัญชีแยกประเภท{ph5}, {ph6}8 กันยายนเปรียบเทียบ{ph7}, {ph8}9 " +"กันยายนลิงค์{ph9} และ {ph10}10 กันยายนเล่นได้-สร้างบันทึก{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0}TH04:{ph1} {ph2}10 ตุลาคมแฮนด์ออฟ{ph3} " +"บันทึกการฟื้นฟูการทำงานดอสการทดสอบเส้นทางปกติที่สมบูรณ์ของผู้ดูแลและเฟส 64 " +"บิตในปัจจุบัน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0}TH08 การแก้ไขออราเคิล:{ph1} " +"{ph2}รายงานข้อผิดพลาดการเก็บรวบรวมอัตโนมัติ{ph3}, " +"{ph4}แหล่งที่มาและการแก้ไขการเปรียบเทียบ{ph5} และ " +"{ph6}การตรวจสอบแบบลอยตัวเต็ม{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}การฟื้นฟูความหมาย:{ph1} {ph2}TH08การอ่านเพลย์บุ๊ค{ph3} และ " +"{ph4}การสั่งซื้อเฟสของโรงงานและสองเส้นทางการตรวจสอบ{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}ประวัติศาสตร์อุตสาหกรรม:{ph1} " +"{ph2}บันทึกตัวบ่งชี้เครื่องยนต์ไอน้ำของกลุ่มพิพิธภัณฑ์วิทยาศาสตร์{ph3} " +"อธิบายบทนำ 1796 และกลไกการบันทึกความดัน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}วิธีการ:{ph1} โรงงาน {ph2}ตัวแทนอิสระ{ph3} และ {ph4}ความรู้ข้ามเกม{ph5}" +" เอกสารรักษาหลักการทำงานและบทเรียน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}บทความอื่นๆ{ph1} · {ph2}สำรวจ TH04 การสืบสวน{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "การปฏิวัติอุตสาหกรรมของวิศวกรรมย้อนกลับ — REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0สะท้อนถึงป้อนเองย้อนกลับวิศวกรรม,Touhou ชิ้นกับ AI " +"เจ้าหน้าที่และความรู้รประกอบที่ข้ามTH08,TH095และPC-98TH04." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "ประสบการณ์การทำงานระหว่างโครงการ" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "เรียงความการฟื้นฟู" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}บ้าน{ph1}{ph2}/{ph3}ห้องปฏิบัติการความเร็วไดโนเสาร์" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "ตรวจสอบ→สร้าง→เปลี่ยน" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "สร้างกฎความเร็วของไดโนเสาร์" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"เพื่อสร้างการเร่งความเร็วของเกมแรกพบว่ากฎที่ควบคุมความเร็วของมัน {ph0}REA " +"ส่งคืนสคริปต์ที่กำลังทำงานอยู่;{ph1} เราใช้กฎในการสร้างมินิเกมนี้ด้วย " +"{ph2}ปรับความเร็ว{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}เล่นและเปลี่ยนความเร็ว{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}อ่านกฎการกู้คืน{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}ตรวจสอบการฟื้นฟู{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}ลองวิเคราะห์{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "เล่นและเปลี่ยนความเร็ว" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"กดเล่นแล้วกระโดดข้ามแคคตัส " +"ย้ายแถบเลื่อนความเร็วที่จะลองเกมที่ช้าลงหรือเร็วขึ้น;มันสลับไปยังความเร็วคงที่" +" เลือกกฎการกู้คืนที่จะเริ่มต้นที่ 6 และค่อยๆเร่งอีกครั้ง" + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "เล่นเกมที่สร้างขึ้นใหม่" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "เล่น" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "กระโดด ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "เริ่มใหม่" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "ความเร็ว" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "ใช้กฎการเร่งการกู้คืน" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "กฎเดิม:เริ่มต้นที่ 6 จากนั้นเพิ่มขึ้นถึง 13" + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"เลื่อนแถบเลื่อนเพื่อตั้งค่าความเร็วของคุณเอง พื้นที่หรือกระโดดล้างแคคตัส" + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"เปิดใช้งาน JavaScript เพื่อเล่นการฟื้นฟู รหัสและคำอธิบายข้างต้นยังคงอ่านได้" + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "อ่านสคริปต์ REA กลับมา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"เราตรวจสอบ {ph0}วายู Chromium-รุ่นเบราว์เซอร์ที่ได้มา{ph1} ด้วย REA. " +"มันกลับโหลด {ph2} รวมทั้งสาขาในฟังก์ชั่นการปรับปรุงของเกมนี้:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"การตั้งค่าคือ {ph0}, {ph1} และ {ph2}. " +"เกมวิ่งสาขานี้ในการปรับปรุงโดยไม่มีการปะทะกัน" + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "ใช้กฎเดียวกันในเกมใหม่" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"มินิเกมใช้ฟังก์ชั่นนี้สำหรับการเร่งความเร็วอัตโนมัติ " +"การเลื่อนแถบเลื่อนจะทำให้ความเร็วคงที่แทน " +"หรับเกมการเรียนการสอนนี้ความก้าวหน้าของการจำลองที่ 60 การปรับปรุงต่อวินาที" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}ดาวน์โหลดกฎความเร็ว{ph1} · {ph2}อ่านรหัสเกม{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "ตรวจสอบการฟื้นฟู" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"เราเรียกว่าฟังก์ชั่นการปรับปรุงเกมเดิมที่มีอุปสรรคและการตั้งเวลาอัตโนมัติปิดการใช้งาน" +" เปรียบเทียบความเร็วที่บันทึกไว้กับรีเพลย์ของกฎการกู้คืน" + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "อัพเดท" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "เกมเดิม" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "กฎที่สร้างขึ้นใหม่" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "เรียกใช้การตรวจสอบความเร็ว" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"ค่าปัดเศษเป็นสามทศนิยม " +"สาขาตรวจสอบก่อนที่จะเพิ่มเพื่อให้เพิ่มขึ้นสุดท้ายสามารถใช้ความเร็วสูงกว่า 13" + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "ลองวิเคราะห์ด้วยตัวคุณเอง" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}ตั้งค่า REA{ph1} กับตัวแทนการเขียนโค้ดของคุณ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "ตาม {ph0}ขั้นตอนการเชื่อมต่อเบราว์เซอร์{ph1} ใช้ {ph2} น้าเว็บ" + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"การแก้ไขจุดสิ้นสุดของเพจและจุดสิ้นสุดการดีบักภายในเครื่อง,แล้วคัดลอกพร้อมท์นี้." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบเกมไดโนเสาร์นี้ ทำไมมันถึงได้เร็วขึ้น? " +"แสดงกฎความเร็วแล้วสร้างรุ่นขนาดเล็กที่มีความเร็วที่ปรับได้{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"ถามการติดตาม: {ph0}\"การคำนวณความสูงกระโดดอยู่ที่ไหน? " +"เพิ่มการควบคุมการกระโดดสูงไปยังรุ่นใหม่”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"แหล่งที่มา: {ph0}ตรวจสอบรหัสความเร็ว{ph1}, Chromium ผู้เขียน " +"{ph2}ลิขสิทธิ์และใบอนุญาตบีเอสดี{ph3}. REA 4.1.0 ตรวจสอบรุ่นที่ทำงานใน " +"Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome เกมไดโนเสาร์:สร้างกฎความเร็ว — REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"อ่านกฎความเร็วของเกมไดโนเสาร์ด้วย REA สร้างมันแล้วเปลี่ยนความเร็วและเล่น" + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "ฟื้นฟูความเร็วไดโนเสาร์" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "ไดโนเสาร์มินิเกม ใช้ปุ่มกระโดดหรือกดพื้นที่ในขณะที่เกมจะมุ่งเน้น" + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "คัดลอกกฎความเร็วที่สร้างขึ้นใหม่" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "คัดลอกไดโนเสาร์พร้อมท์วิเคราะห์" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}บ้าน{ph1} /คำถามที่พบบ่อย" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REAคำถามที่พบบ่อย" + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "การตั้งค่าการอัปเดตการวิเคราะห์และการแก้ไขปัญหา" + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "หัวข้อ" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}การตั้งค่าและการปรับปรุง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}การวิเคราะห์{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}การแก้ไขปัญหา{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}ข้อมูลและการแบ่งปัน{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "การตั้งค่าและการปรับปรุง" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "ติดตั้ง REA อย่างไร?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "เทอร์มินัล*การตั้งค่าตัวแทน" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "คัดลอก" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"คำสั่งตั้งค่าจะลงทะเบียนการเชื่อมต่อ MCP ของ REA และติดตั้ง skill " +"สำหรับการวิเคราะห์ เมื่อเสร็จแล้วให้เริ่มเอเจนต์ใหม่ " +"จากนั้นระบุพาธไฟล์และคำถาม " +"ดูข้อกำหนดและขั้นตอนวิเคราะห์ครั้งแรกได้ใน{ph0}คู่มือการตั้งค่า{ph1}" + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "ซึ่งตัวแทนการเขียนโค้ดสามารถใช้ REA?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"ตัวแทนใดๆที่สนับสนุนท้องถิ่น MCP เซิร์ฟเวอร์ การติดตั้งรวมถึง Claude Code, " +"Claude เดสก์ท็อป, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP และ VS Code. " +"เชื่อมต่อบอทกรกจะถูกเพิ่มจากการแชทของ" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}เชื่อมต่อตัวแทนการเข้ารหัสของคุณ{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "อัปเดต REA อย่างไร?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "REA การแก้ไขข้อผิดพลาด รือไม่ CLI ด้วย npm:" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "เทอร์มินัล*ติดตั้งแล้ว CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"ทำตามคำสั่งรีเฟรชการตั้งค่าที่พิมพ์โดยการปรับปรุง " +"ถ้าคุณตั้งค่าตัวแทนของคุณผ่าน {ph0} วิ่ง:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "เทอร์มินัล*รีเฟรชการตั้งค่าตัวแทน" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"ตรวจสอบการเปลี่ยนแปลงแล้วเริ่มเอเจนต์ใหม่ การเชื่อมต่อ REA " +"ใช้เวอร์ชันแพ็กเกจที่ระบุไว้ " +"จึงต้องเรียกคำสั่งตั้งค่าอีกครั้งเพื่อใช้เวอร์ชันใหม่ หากต้องการใช้ CLI " +"ครั้งเดียว ให้ต่อคำสั่งที่ต้องการหลัง {ph0}" + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "คือการติดตั้งทักษะจาก skills.sh พอแล้ว?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"ทักษะให้คำแนะนำการสืบสวนตัวแทนของคุณ วิ่ง {ph0}REA ตั้งค่า{ph1} " +"ในการเชื่อมต่อ MCP " +"เซิร์ฟเวอร์และติดตั้งทักษะการจับคู่แล้วรีสตาร์ทตัวแทนของคุณเพื่อที่จะสามารถเรียกเครื่" + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "การวิเคราะห์" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "สิ่งที่ฉันสามารถวิเคราะห์ด้วย REA?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "เริ่มต้นด้วยชนิดของซอฟต์แวร์ที่คุณมี:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}ปฏิบัติการพื้นเมืองและไลบรารี{ph1}:ฟังก์ชั่นการประกอบรหัสปลอมและการอ้างอิง" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0}JavaScript และ Electron แอป{ph1}:โมดูลการนำเข้าไอพีซีและสถานที่ที่มา" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "{ph0}หน้าเว็บเบราว์เซอร์{ph1}:สคริปต์การร้องขอและการสังเกตรันไทม์" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA alsoการประกอบการจัดการหุ่นยนต์เอพีเคเฟิร์มและทรัพยากรที่บรรจุ " +"{ph0}ดูกรณีศึกษา{ph1} สำหรับการตรวจสอบการทำงาน" + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "ฉันต้อง Hopper, Ghidra หรือ IDA?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"การวิเคราะห์พื้นเมืองลึกใช้หนึ่งในนั้น คงที่ JavaScript " +"การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ,การเขียนบทความใหม่,การเขียน" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"เชื่อมต่อที่มีอยู่ของคุณ Ghidra หรือ IDA การติดตั้งหรือให้ตรวจสอบการติดตั้ง " +"Hopper และเสนอการติดตั้ง " +"โฮสต์และเป้าหมายของคุณกำหนดว่าผู้ให้บริการใดสามารถใช้ได้ " +"{ph0}ตั้งค่าการวิเคราะห์พื้นเมือง{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "ฉันสามารถใช้ REA โดยไม่มีตัวแทนการเขียนโค้ด?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"ใช่ ร CLI ใช้เวิร์กโฟลว์การวิเคราะห์เดียวกัน สำหรับท้องถิ่น JavaScript หรือ " +"Electron แอพ:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "เทอร์มินัล*การวิเคราะห์การใช้งานแบบคงที่" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"แทนที่เส้นทางด้วยโฟลเดอร์แอ็พพลิเคชันที่แยกออกหรือ ASAR แฟ้ม {ph0}ใช้ " +"CLI{ph1} สำหรับตัวเลือกการติดตั้ง" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "REA ส่งคืนโค้ดอะไรบ้าง?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"การวิเคราะห์โปรแกรมเนทีฟจะส่งคืน assembly และ pseudocode " +"พร้อมการเรียกฟังก์ชัน การอ้างอิง และค่าคงที่ที่เกี่ยวข้อง การวิเคราะห์ " +"JavaScript จะส่งคืนโมดูล ความสัมพันธ์ระหว่างโมดูล และตำแหน่งในซอร์สโค้ด" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"ตัวแทนของคุณใช้การค้นพบเหล่านี้เพื่ออธิบายพฤติกรรมหรือเขียนและทดสอบการดำเนินก" +" ร {ph0}DX-Ball การคำนวณ{ph1} และ {ph2}ตรวจสอบธง{ph3} " +"แสดงว่ากระบวนการทำงานอย่างไร" + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "ควรถามอะไรกับผู้ช่วย?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"ให้เป้าหมายท้องถิ่นและพฤติกรรมหนึ่งในการตรวจสอบ สำหรับ JavaScript หรือ " +"Electron แอพ:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"แทนที่เส้นทางที่มีเป้าหมายของคุณ ร {ph0}กเขา{ph1} ให้พร้อมท์สำหรับพื้นเมือง," +" Electron และตัวอย่างเบราว์เซอร์" + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "การแก้ไขปัญหา" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "ทำไมตัวแทนของฉันไม่สามารถเห็น REA เครื่องมือ?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"รีสตาร์ทหรือเชื่อมต่อตัวแทนของคุณหลังจากการตั้งค่า ตรวจสอบ REA ลงทะเบียนกับ " +"{ph0};สำหรับ Codex:" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "เทอร์มินัล*ตรวจสอบลูกค้าหนึ่ง" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"แทนที่ {ph0} ด้วยรหัสลูกค้าของคุณเช่น {ph1} หรือ {ph2}. " +"ถ้ารายงานแสดงการลงทะเบียนที่ขาดหายไปหรือเก่า,เรียกใช้การตั้งค่าสำหรับไคลเอ็นต์:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "เทอร์มินัล*ซ่อมแซมการตั้งค่าของไคลเอนต์หนึ่ง" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"ตรวจสอบแผนและรีสตาร์ทไคลเอ็นต์ " +"หากการลงทะเบียนมีสุขภาพดีแต่เครื่องมือยังคงขาดการตรวจสอบของลูกค้า MCP " +"ข้อผิดพลาดในการเชื่อมต่อ {ph0}การวินิจฉัยการตั้งค่าเพิ่มเติม{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "ฉันจำเป็นต้องเริ่มต้น Hopper ก่อน?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA เริ่มต้น Hopper เมื่อการดำเนินงานต้องการมัน บน macOS " +"เสร็จสิ้นทางเลือกที่ทำงานครั้งแรกของโหมดการสาธิตหรือการเปิดใช้งานใบอนุญาตก่อน" +" {ph0}ดูการตั้งค่าผู้ให้บริการพื้นเมือง{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "ควรทำอย่างไรเมื่อพบข้อผิดพลาด?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}อัพเดท REA{ph1} รีสตาร์ทตัวแทนของคุณและลองทำงานเดียวกัน " +"รุ่นล่าสุดอาจแก้ไขปัญหาอยู่แล้ว" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"ถ้ามันยังคงมีอยู่, {ph0}เปิดปัญหา{ph1} กับคุณ REA " +"รุ่นระบบปฏิบัติการประเภทเป้าหมายขั้นตอนในการทำซ้ำและการส่งออกข้อผิดพลาด " +"รวมชื่อผู้ให้บริการเมื่อปัญหาเกี่ยวข้องกับการวิเคราะห์พื้นเมือง" + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "ข้อมูลและการแบ่งปัน" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "ไม่ REA อัปโหลดแอปของฉัน?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA วิเคราะห์เป้าหมายบนเครื่องของคุณ " +"ตัวแทนของคุณได้รับผลลัพธ์และนโยบายข้อมูลของผู้ให้บริการโมเดลจะใช้กับผลลัพธ์เหล่านั้น" + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "ฉันจะแบ่งปันตัวอย่างหรือมีส่วนร่วมได้อย่างไร" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"มีประโยชน์ REA งคุณ เราอยากเห็นมัน " +"แบ่งปันเป้าหมายคำถามของคุณผลการวิจัยและวิธีการที่คุณตรวจสอบพวกเขาใน " +"{ph0}ปัญหา{ph1} หรือ {ph2}ดึงคำขอ{ph3}. " +"ข้อความที่ตัดตอนมารหัสสั้นและตัวเลขช่วยให้คนอื่นๆติดตามการสืบสวน" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"รายงานข้อผิดพลาดการร้องขอคุณลักษณะเอกสารและการปรับปรุงรหัสยินดีต้อนรับมากเกิ" +" นอกจากนี้คุณยังสามารถพูดคุยตัวอย่างใน {ph0}ชุมชน{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REAคำถามที่พบบ่อย:การติดตั้งการปรับปรุงและการแก้ไขปัญหา" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"คำตอบทั่วไป REA " +"คำถาม:การติดตั้ง,การปรับปรุง,เครื่องมือวิเคราะห์,ตัวแทนการเข้ารหัส,การแก้ไขปัญหาและการแบ่งปันตัวอย่าง" + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "คำถามที่พบบ่อยเกี่ยวกับ REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "คัดลอกREAคำสั่งการตั้งค่า" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "คัดลอก REA อัพเดตคำสั่ง" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "คัดลอกคำสั่งรีเฟรชการตั้งค่าตัวแทน" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "คัดลอก REA CLI คำสั่งการวิเคราะห์" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "คัดลอกตัวอย่างพร้อมท์การวิเคราะห์" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "คัดลอกคำสั่งการวินิจฉัยไคลเอ็นต์" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "สำเนาคำสั่งการตั้งค่าขอบเขต" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}บ้าน{ph1} /การสืบสวนครั้งแรกของคุณ" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "หาที่{ph0}บันทึกการส่งออกไป" + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"ใช้ REA " +"นาดเล็กทำตามปุ่มบันทึกการส่งออกและตรวจสอบรายละเอียดหนึ่งด้วยตัวคุณเอง" + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "ในการออกกำลังกายนี้" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. ตั้งค่า{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. สอบถามเกี่ยวกับการส่งออก{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. ทำตามคำตอบ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. พรีเมียร์ลีก{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. ถามคำถามอื่น{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. เชื่อมต่อตัวแทนของคุณกับ REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "หรือเรียกใช้คำสั่งนี้ในเทอร์มินัลของคุณ:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"ตรวจสอบแผนอนุมัติการตั้งค่าจากนั้นรีสตาร์ทตัวแทนของคุณ เชื่อมต่อแล้ว? " +"ดำเนินการต่อด้านล่าง" + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. ถามที่ CSV ถูกเขียน" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น Electron แอพที่มี " +"{ph0}บันทึกการส่งออก{ph1} ปุ่ม " +"ตัวแทนของคุณสามารถตรวจสอบรหัสได้โดยไม่ต้องติดตั้งหรือเปิดตัว Electron." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "ตัวแทนของคุณดาวน์โหลดไฟล์และให้โฟลเดอร์ที่แยกออก REA สำหรับการตรวจสอบ" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}ดาวน์โหลดตัวอย่างไปรษณีย์{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"หากตัวแทนของคุณไม่สามารถดาวน์โหลดไฟล์ได้ให้เปิดเครื่องรูดที่เก็บถาวรนี้ด้วยตัวเอง" +" ให้มันเส้นทางไป {ph0} โฟลเดอร์และคำถามการส่งออกเดียวกัน" + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. ทำตามคำตอบกลับไปที่รหัส" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "ค้นหาคำอธิบายสั้นๆด้วยการอ้างอิงไฟล์และบรรทัด:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"ปุ่มส่ง {ph0} ข้อความ รูปแบบกระบวนการหลักบันทึกเป็น CSV และเขียน {ph1} " +"ในโฟลเดอร์ดาวน์โหลดของผู้ใช้ คอลัมน์คือ {ph2} และ {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "จากปุ่มไปยังนักเขียนไฟล์" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"REAการวิเคราะห์แบบคงที่ของคู่ข้อความที่มีการจัดการ ปลายทางถูกอ่านจากรหัส" + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"เส้นทางแฟ้มจัดรูปแบบและเขียนการโทรอยู่ด้วยกันในตัวจัดการนี้ " +"ถามตัวแทนของคุณเพื่อแสดงบรรทัดเหล่านี้ถ้าคำตอบออกจากพวกเขาออก." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}ดูการติดตามรหัสเต็มรูปแบบและบันทึก REA ผลลัพธ์{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. พรีเมียร์ลีก" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"เครื่องหมายจุลภาคแยก CSV คอลัมน์ " +"จะเกิดอะไรขึ้นเมื่อชื่อโน้ตมีเครื่องหมายจุลภาคหรือใบเสนอราคา" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "เรียกใช้การตรวจสอบตัวเอง" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "เปิดเทอร์มินัลในห่อ {ph0} โฟลเดอร์:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"คำสั่งนี้ใช้เชลล์ที่มีการสนับสนุนเอกสารที่นี่เช่นการทุบตีหรือ " +"ตัวแทนของคุณสามารถทำงานได้เหมือนกัน JavaScript ในเปลือกของแพลตฟอร์มของคุณ" + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. ถามคำถามอื่น" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "ลองติดตามผลในการสนทนาเดียวกัน:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "จะเกิดอะไรขึ้นหากไม่สามารถเขียนไฟล์ได้ ทำตามข้อผิดพลาดกลับไปยังหน้า" + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"หรือให้ตัวแทนของคุณตรวจสอบของคุณเองและถามเกี่ยวกับปุ่มเดียวไฟล์หรือพฤติกรรม" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}ยังไง Notion " +"คัดลอกข้อความและเอชทีเอ็ม{ph1}{ph2}ทำตามคุณลักษณะคลิปบอร์ดในบรรจุ Electron " +"แอพ.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}ยังไง DX-Ball " +"คำนวณเสียงแพน{ph1}{ph2}อ่านคำแนะนำเดิมและตรวจสอบการฟื้นฟู{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}แก้ไขปัญหาการตั้งค่าหรือการวิเคราะห์{ph1}{ph2}อัพเดท REA " +"และตรวจสอบการเชื่อมต่อถ้าคุณได้รับการติด{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "การสืบสวนวิศวกรรมย้อนกลับครั้งแรกของคุณ — REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"ลองดู REA ในแอพพลิเคโน้ตขนาดเล็ก " +"ตั้งค่าตัวแทนของคุณขอที่บันทึกส่งออกไปและตรวจสอบ CSV รูปแบบที่มีชื่อตัวอย่าง" + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "ครั้งแรกของคุณ REA การสืบสวน" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "คัดลอก REA พร้อมท์การติดตั้ง" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "คัดลอกคำสั่งการตั้งค่า" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "คัดลอกบันทึกการตรวจสอบพรอมต์" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "คัดลอก CSV ตรวจสอบพรอมต์" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "คัดลอกคำสั่งตรวจสอบรูปแบบ" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}บ้าน{ph1} /เริ่มต้นใช้งาน" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "ตั้งค่า REA." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"เชื่อมต่อ REA " +"ให้กับตัวแทนการเข้ารหัสของคุณหรือตรวจสอบแอปท้องถิ่นจากสถานีของคุณ" + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "เปิดเทอร์มินัลและตรวจสอบ:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "เทอร์มินัล" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0}Windows (พาวเวอร์เชลล์){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows พาวเวอร์เชลล์" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ " +"ปิดเปลือกเปิดอีกครั้งแล้วเรียกใช้ {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"ถ้าพาวเวอร์เชลล์ในภายหลังกล่าวว่า " +"{ph0}\"การเรียกใช้สคริปต์ถูกปิดใช้งานในระบบนี้\"{ph1} เมื่อคุณวิ่ง {ph2} " +"เรียกใช้ครั้งนี้และลองอีกครั้ง:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "ถ้าคุณใช้ Homebrew:" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "มิฉะนั้น:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "ปิดเทอร์มินัลเปิดอีกครั้งแล้ว:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"ความต้องการการติดตั้ง {ph0} และ {ph1} (บนเดเบียน/อูบุนตู: {ph2}). " +"ปิดสถานีเปิดอีกครั้งแล้ว:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"การกระจายของคุณเอง {ph0} แพคเกจมักจะมีอายุมากกว่า 22.19 เพื่อตรวจสอบ {ph1} " +"ถ้าคุณใช้มันแทน" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"ต้องการติดตั้งปกติหรือไม่ ดาวน์โหลดรุ่นแอลทีเอสจาก {ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "ตัวเลือกการตั้งค่า" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}เชื่อมต่อตัวแทนการเข้ารหัสของคุณ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}ใช้ CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}ตั้งค่าการวิเคราะห์โปรแกรมเครื่องรหัส{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}การรับความช่วยเหลือ{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "เชื่อมต่อตัวแทนการเข้ารหัสของคุณ" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"เรียกใช้การตั้งค่าเพื่อเชื่อมต่อ REA กับตัวแทนการเขียนโค้ดของคุณ " +"ทางเลือกของลูกค้ารวมถึง Claude Code, Codex, Cursor, Gemini CLI, Windsurf, " +"Grok Build และสนับสนุนอื่นๆ MCP ลูกค้า เชื่อมต่อบอทกรกจะถูกเพิ่มจากการแชทของ" + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "ใหม่สำหรับตัวแทนการเขียนโค้ด?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"ตัวแทนการเข้ารหัสเป็นผู้ช่วยปัญญาประดิษฐ์ที่ทำงานบนคอมพิวเตอร์ของคุณแทนที่จะเป็นใ" +" มันสามารถอ่านไฟล์และเรียกใช้คำสั่งและจะถามก่อนที่จะทำการเปลี่ยนแปลง REA " +"ให้เครื่องมือวิศวกรรมย้อนกลับ" + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "หากคุณยังไม่ได้หนึ่งเลือกหนึ่งทำตามหน้าติดตั้งและลงชื่อเข้าใช้:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1}Claude Code{ph2}{ph3} โดย Anthropic. ต้องการการชำระเงิน Claude " +"วางแผน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "{ph0}{ph1}Codex{ph2}{ph3} โดย OpenAI. ลงชื่อเข้าใช้ด้วยบัญชีแชทของคุณ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1}OpenCode{ph2}{ph3},โอเพนซอร์ส " +"เชื่อมต่อผู้ให้บริการรูปแบบที่คุณเลือก" + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"จากนั้นเปิดและคัดลอกพร้อมท์ด้านล่างลงไป ตัวแทนทำงาน " +"REAการติดตั้งและแสดงให้คุณเห็นแผนก่อนที่จะเปลี่ยนแปลงอะไร" + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "หรือเรียกใช้การตั้งค่าด้วยตัวคุณเอง" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "ฉันจะเปิดเทอร์มินัลได้อย่างไร?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0}Windows:{ph1} เปิดเมนูเริ่ม,ชนิด {ph2}พาวเวอร์เชลล์{ph3} และกดป้อน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0}macOS:{ph1} สื่อมวลชน {ph2} {ph3},ชนิด {ph4}เทอร์มินัล{ph5} และกดป้อน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "{ph0}Linux:{ph1} สื่อมวลชน {ph2} {ph3} {ph4} บนเดสก์ท็อปส่วนใหญ่" + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"วางคำสั่งด้วย {ph0} {ph1} (macOS: {ph2} {ph3}; Linux เทอร์มินัล: {ph4} {ph5}" +" {ph6})จากนั้นกดป้อน" + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"เลือกไคลเอ็นต์ของคุณและตรวจสอบแผนการติดตั้ง REA เพิ่ม MCP " +"การเชื่อมต่อและทักษะการตรวจสอบการจับคู่การรักษาสำรองของการกำหนดค่าที่มีอยู่ " +"มันถามก่อนที่จะใช้การเปลี่ยนแปลง" + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "รีสตาร์ทไคลเอนต์ของคุณเมื่อเสร็จสิ้นการติดตั้ง" + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "ฉันจะรีสตาร์ทลูกค้าของฉันได้อย่างไร?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}แอปเดสก์ท็อป{ph1} (Claude เดสก์ท็อป, Cursor, Windsurf, VS " +"Code):ออกจากการตรวจสอบอย่างสมบูรณ์แล้วเปิดอีกครั้ง การปิดหน้าต่างยังไม่พอ บน" +" macOS สื่อมวลชน {ph2} {ph3};บน Windows ยังออกจากจากไอคอนถาดถ้ามีหนึ่ง" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}ตัวแทนเทอร์มินัล{ph1} (Claude Code, Codex, Gemini " +"CLI):ออกจากเซสชั่นและเริ่มต้นอีกครั้ง" + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"ให้ตัวแทนของคุณเส้นทางเป้าหมายและคำถามที่เฉพาะเจาะจง. สำหรับ JavaScript หรือ" +" Electron แอพคุณอาจเริ่มต้นด้วย:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"ดูสิ {ph0} และหาวิธีที่จะส่งออกข้อมูล " +"แสดงจุดเข้าโทรและการอ้างอิงที่เกี่ยวข้องกับสถานที่แหล่งที่มาสำหรับการค้นพบของคุณ" + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "แทนที่เส้นทางด้วยเป้าหมายท้องถิ่นของคุณ" + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "ฉันจะได้รับเส้นทางเต็มของโฟลเดอร์ได้อย่างไร" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1} คลิกขวาที่โฟลเดอร์และเลือก {ph2}คัดลอกเป็นเส้นทาง{ph3}. " +"บน Windows 10 กดค้างไว้ในขณะที่การคลิกขวา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0}macOS:{ph1} ในการค้นหาให้คลิกขวาที่โฟลเดอร์ค้างไว้และเลือก " +"{ph2}คัดลอก\"...\"เป็นชื่อพาธ{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}ระบบใดๆ:{ph1} " +"ลากโฟลเดอร์ลงในหน้าต่างเทอร์มินัลและเส้นทางของมันปรากฏขึ้น" + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "ในเทอร์มินัลใส่ใบเสนอราคารอบเส้นทางที่มีช่องว่าง" + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "ใช้ CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"วิเคราะห์เป็นJavaScriptหรือElectronองโปรแกรมหรือโฟลเดอร์ASARแฟ้มจัดเก็บโดยไม่มีกำลังแอพฯ:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "การวิเคราะห์แอปพลิเคชันแบบคงที่" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"แทนที่พาธด้วยไดเรกทอรีแอปที่คุณแยกออกหรือ {ph0} แฟ้ม บน Windows เส้นทางเช่น " +"{ph1} ทำงานที่นี่" + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "ฉันจะหาแอปได้ที่ไหนแฟ้มอะซาร์?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron ปพลิเคชันมักจะเก็บไว้ใน {ph0} โฟลเดอร์:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0}Windows:{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0}macOS:{ph1} {ph2} (คลิกขวาที่แอปและเลือก " +"{ph3}แสดงเนื้อหาของแพคเกจ{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0}Linux:{ph1} มักจะ {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "บางแอปติดตั้งที่อื่น ค้นหาโฟลเดอร์ของแอป {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"ผลลัพธ์ที่ระบุการตรวจสอบแสดงให้เห็นการเชื่อมต่อระหว่างโมดูลและให้สถานที่แหล่งที่ม" +" การเชื่อมต่อ REA ไม่สามารถแก้ไขได้ถูกทำเครื่องหมายในผลลัพธ์" + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "ถ้าคุณต้องการถาวร {ph0} คำสั่งในเปลือกของคุณ:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "ติดตั้ง CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}ดำเนินการต่อด้วย JavaScript คู่มือการสมัคร{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "ตั้งค่าการวิเคราะห์โปรแกรมเครื่องรหัส" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"ไบนารีพื้นเมืองต้องการเครื่องมือวิเคราะห์ท้องถิ่น " +"เลือกและกำหนดค่าหนึ่งด้านล่างแล้วให้ REA ปฏิบัติการหรือห้องสมุดของคุณ" + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "เลือกเครื่องมือ: Ghidra, Hopper หรือ IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"ใช้ที่มีอยู่ Ghidra 12.1.การติดตั้งเอ็กซ์และเจดีเค 64 บิต 21 หรือใหม่กว่าบน " +"Linux หรือ macOS 64 หรือ 64 แขน คุณ Ghidra " +"การติดตั้งต้องใช้ตัวถอดคอมไพเลอร์พื้นเมืองสำหรับสถาปัตยกรรมโฮสต์ของคุณ " +"ตั้งค่าพาธก่อนรันการตั้งค่า:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "เชื่อมต่อของคุณ Ghidra การติดตั้ง" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidraการเชื่อมต่อ·macOS/Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"แทนที่ทั้งสองพาธด้วยการติดตั้งที่มีอยู่ของคุณ " +"การตั้งค่าการตรวจสอบพวกเขาและบันทึกการตั้งค่าที่ถูกต้องสำหรับลูกค้าที่คุณเลือก" +" บน Linux แขน64 คุณอาจจำเป็นต้องสร้าง Ghidraพื้นเมืองแยกต่างหาก" + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "เชื่อมต่อ Ghidra บน Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows 64 มีการสนับสนุนการทดลองแบบอ่านอย่างเดียวสำหรับการใช้งานแบบพื้นเมือง" +" 86 เท่าและ 64 ใช้ที่มีอยู่ Ghidra 12.1.การติดตั้งเอ็กซ์และเจดีเค 64 บิต 21 " +"หรือใหม่กว่า:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra การเชื่อมต่อ · Windows พาวเวอร์เชลล์" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "แทนที่เส้นทางสองเส้นทางด้วยการติดตั้งจากนั้นตรวจสอบแผนการติดตั้ง" + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"เชื่อมต่อHopperบmacOSหรือLinux. " +"รันคำสั่งการติดตั้งข้างต้นจะตรวจพบการติดตั้งที่มีอยู่หรือเสนอแผนการติดตั้งเพื่อขออนุมัติ" + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"บน macOS,สมบูรณ์ " +"Hopperทางเลือกที่ทำงานครั้งแรกของโหมดการสาธิตหรือการเปิดใช้งานใบอนุญาตก่อนที่จะวิเคร" + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"ตรวจสอบแล้ว IDA การตั้งค่าใช้ Windows กับที่มีอยู่ MCP " +"การประมวลผลข้อมูล,คีย์ข้อมูล,การพิมพ์ดีดคัดลอก Linux และ macOS " +"การวิเคราะห์แบบไร้หัวขาดยังคงไม่ได้รับการยืนยัน" + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "เชื่อมต่อที่มีอยู่ IDA MCP ลงทะเบียน" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"ให้เซิร์ฟเวอร์ต้นน้ำทำงาน {ph0}, {ph1} และตัวเลือก {ph2} ในแฟ้มเจสัน " +"ที่มีอยู่ {ph3} วัตถุที่มี {ph4} สามารถเข้าชมได้ จุด REA " +"ที่ไฟล์ก่อนที่จะติดตั้ง:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA การเชื่อมต่อ · Windows พาวเวอร์เชลล์" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"รายละเอียดที่แนบมาใช้ต้นน้ำมรดก 1.4.0 " +"เครื่องมือที่มีไบนารีเดิมเปิดอยู่แล้วใน IDA. " +"การตลาดทางอินเทอร์เน็ต,การขาย,การตลาด,การโฆษณา,รายชื่อผู้มุ่งหวัง " +"{ph0};การตรวจสอบจริงครอบคลุม IDA 9.3 Windows 64 หัวหน้างาน " +"แพทย์ตรวจสอบการลงทะเบียนโดยไม่ต้องเริ่มต้น IDA." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"ให้ REA เส้นทางปฏิบัติการเดิมด้วย {ph0} ใน CLI งคุณ สำหรับตัวแทนรวมถึง {ph1}" +" ใน REA สภาพแวดล้อมการลงทะเบียนและเลือก IDA เมื่อเปิดไบนารี" + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "สำหรับที่มีอยู่ Ghidra การติดตั้งตรวจสอบฟังก์ชั่นที่มี:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "การวิเคราะห์ฟังก์ชัน" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "แทนที่ {ph0} ด้วยชื่อฟังก์ชั่นหรือที่อยู่ที่คุณต้องการตรวจสอบ" + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "วิธีการวิเคราะห์โปรแกรมโค้ดเครื่องทำงานของเซสชัน" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"แต่ละ CLI การนำเข้าคำสั่งและวิเคราะห์ไบนารีแล้วปิดเซสชัน ตัวแทนของคุณ MCP " +"การสืบค้นข้อมูลใช้ไบนารีที่นำเข้าอีกครั้งในขณะที่เซสชันนั้นเปิดอยู่" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}ติดตามการวิเคราะห์ของโปรแกรมเครื่องรหัสตัวอย่าง{ph1} " +"เพื่อดูว่าผลฟังก์ชั่นที่นำไปสู่การคำนวณกู้คืน" + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "การรับความช่วยเหลือ" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "ถ้าตัวแทนของคุณไม่เห็น REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"รีสตาร์ทหรือเชื่อมต่อไคลเอ็นต์หลังจากการตั้งค่า ตรวจสอบ REA การเชื่อมต่อกับ " +"{ph0};สำหรับ Codex:" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "ตรวจสอบลูกค้าหนึ่งราย" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "หากผู้ให้บริการต้องการความสนใจ" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "ตรวจสอบผู้ให้บริการที่คุณใช้ สำหรับ Ghidra:" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "ตรวจสอบผู้ให้บริการหนึ่งราย" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "รายงานให้ตรวจสอบล้มเหลวและแนะนำขั้นตอนถัดไป." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0}REA " +"คำถาม{ph1}{ph2}คำตอบอย่างรวดเร็วเกี่ยวกับการอัปเดตตัวแทนและการวิเคราะห์{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}เลือกคู่มือการตรวจสอบ{ph1}{ph2}ตัวอย่างการทำงานสำหรับไบนารี Electron " +"แอพและเบราว์เซอร์{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0}GitHub ปัญหา{ph1}{ph2}รายงานปัญหาเกี่ยวกับคำสั่งและการวินิจฉัย{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "{ph0}REA ชุมชน{ph1}{ph2}คำถามการตรวจสอบและการทำงานในความคืบหน้า{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "ติดตั้ง REA และตั้งค่าตัวแทนการเข้ารหัสของคุณ" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"เชื่อมต่อREAต้องของคุณเขียนโปรแกรหรือเจ้าหน้าที่ตรวจท้องถิ่JavaScriptหรือElectronแอพจากเทอร์มินัล." +" การตั้งค่าคำถามแรกและคำแนะนำผู้ให้บริการพื้นเมือง" + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "คัดลอก Node.js ตรวจสอบรุ่น" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "คัดลอก Node.js คำสั่งการติดตั้งสำหรับ Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "คัดลอกคำสั่งนโยบายการดำเนินการ" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "คัดลอก Homebrew Node.js คำสั่งการติดตั้ง" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "สำเนาคำสั่งการติดตั้งสำหรับ macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "คัดลอก Node.js 24 คำสั่งสำหรับ macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "สำเนาคำสั่งการติดตั้งสำหรับ Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "คัดลอก Node.js 24 คำสั่งสำหรับ Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REAคู่มือการเริ่มต้นใช้งาน" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "คัดลอก REA พร้อมท์การติดตั้ง" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "คัดลอกคำสั่งการตั้งค่าตัวแทน" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "คัดลอกJavaScriptคำสั่งการวิเคราะห์" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "คัดลอกCLIคำสั่งการติดตั้ง" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "การเชื่อมต่อเครือข่าย" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "คัดลอก Ghidra การเชื่อมต่อสำหรับ Windows พาวเวอร์เชลล์" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "คัดลอก IDA การเชื่อมต่อสำหรับ Windows พาวเวอร์เชลล์" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "คัดลอกคำสั่งการวิเคราะห์ฟังก์ชันพื้นเมือง" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "คัดลอกคำสั่งการวินิจฉัยไคลเอ็นต์" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "คัดลอกคำสั่งการวินิจฉัยผู้ให้บริการ" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}บ้าน{ph1} / {ph2}กเขา{ph3} /การสังเกตเบราว์เซอร์" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "ดูว่าเกิดอะไรขึ้น{ph0}เมื่อคุณคลิก" + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ,การเขียนเนื้อหา JavaScript " +"ที่สร้างการดาวน์โหลด" + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "ในคู่มือนี้" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}ตัวอย่าง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}เปิดเบราว์เซอร์{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}สอบถามตัวแทนของคุณ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}จับภาพจาก CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}อ่านคำขอและสคริปต์{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "เกิดอะไรขึ้นเมื่อคุณคลิกส่งออก?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"ร {ph0}ตัวอย่างเบราว์เซอร์หมายเหตุ{ph1} มี {ph2}บันทึกการส่งออก{ph3} ปุ่ม " +"คลิกโหลด {ph4} รูปแบบสองบันทึกเป็น CSV และเริ่มต้นการดาวน์โหลด" + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "จากการคลิกที่ CSV ดาวน์โหลด" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01·คุณ{ph1}{ph2}คลิกส่งออกหมายเหตุ{ph3}{ph4}ดำเนินการในเบราว์เซอร์ของคุณในขณะที่การจับภาพกำลังทำงานอยู่{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 · " +"REA{ph1}{ph2}บันทึกคำขอ{ph3}{ph4}รงสร้างการตอบสนองและโครงสร้างเจสันจากเพจที่เลือก{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03·ตัวแทนของคุณ{ph1}{ph2}อ่านรหัสส่งออก{ph3}{ph4}เชื่อมต่อคำขอสังเกตไปที่" +" {ph5} ใน {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "เริ่มการจับภาพก่อนที่จะคลิกส่งออกหมายเหตุ" + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "เปิด Chrome ด้วยการดีบักระยะไกล" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"เปิดตัวอย่างบันทึกย่อที่โฮสต์กับโปรไฟล์เบราว์เซอร์ที่แยกต่างหากและพอร์ตการดีบักโลคั" +" บนLinux:" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "เริ่มต้นเบราว์เซอร์ตัวอย่าง" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"ใช้เส้นทางปฏิบัติการของเบราว์เซอร์ที่ติดตั้งบน macOS หรือ Windows. " +"คุณสามารถแทนที่ลิงค์เพจด้วยเพจอื่นที่คุณต้องการตรวจสอบได้" + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA เชื่อมต่อกับเบราว์เซอร์ที่มีอยู่นี้ " +"คุณสามารถควบคุมเพจดำเนินการและปิดเบราว์เซอร์เมื่อเสร็จสิ้น" + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "เว็บแคม,ถ้ำมอง,ซ่อน,จับได้,นอกใจ," + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบหน้านี้ในขณะที่ฉันคลิกบันทึกการส่งออก " +"สิ่งที่ร้องขอไม่ได้ทำให้และวิธีการที่เป็น CSV สร้าง?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"รือไม่ ให้ตัวแทนของคุณดีบักปลายทาง, {ph0} และลิงค์หน้า " +"ให้มันเริ่มการจับภาพก่อนที่จะคลิก" + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"ตัวแทนของคุณค้นพบเป้าหมายหน้าเริ่มต้นหน้าต่างสังเกตการณ์และอ่านหลักฐานที่เกิดขึ้น" +" จากนั้นก็สามารถตรวจสอบสคริปต์ที่อยู่เบื้องหลังการส่งออก" + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "หรือจับภาพจากเทอร์มินัล" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "ค้นหารหัสเป้าหมายของหน้าเว็บ:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "ค้นหาหน้าเว็บ" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"เลือกเป้าหมายด้วยลิงค์ตัวอย่างหมายเหตุ แทนที่ {ph0} " +"ด้านล่างมีรหัสของตนแล้วเรียกใช้:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "จับสิบวินาทีถัดไป" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"ให้คำสั่งเชื่อมต่อไม่กี่วินาที,แล้วคลิก {ph0}บันทึกการส่งออก{ph1} " +"ในเบราว์เซอร์ที่ ผลลัพธ์จะมาถึงหลังจากที่หน้าต่างการสังเกตสิ้นสุดลง" + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"ผลลัพธ์ที่จับมีเพจที่เลือกกิจกรรมของเครือข่ายระหว่างหน้าต่างนั้นและรูปร่างของการตอ" +" คำขอก่อนหน้านี้อยู่นอกการจับภาพนี้" + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "อ่านคำขอและส่งออกสคริปต์" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "บันทึกด้วย REA 4.1.0 ในตัวอย่างบันทึกท้องถิ่น" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "จับความจริง" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "ค่า" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "คำขอ" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "การตอบสนอง" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "ผู้ริเริ่มการร้องขอ" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} *สคริปต์" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "โครงสร้างการตอบสนอง" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} ด้วย {ph1} และ {ph2} สนาม" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "อ่านสคริปต์ที่โหลด" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"คำขอระบุแหล่งข้อมูลและ REA บันทึก {ph0} เป็นผู้ริเริ่มของมัน " +"อ่านแหล่งที่มาของสคริปต์ที่จับเพื่อดูว่ามีการใช้ข้อมูล:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"น้าโดยใช้การตอบสนอง ร CSV " +"ขั้นตอนการจัดรูปแบบมาจากสคริปต์;จับเครือข่ายกำหนดว่าการคลิกนี้ร้องขอ {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"ค้นหาสคริปต์ที่ร้องขอ {ph0}. " +"จะหนีชื่อที่มีเครื่องหมายจุลภาคหรือเครื่องหมายใบเสนอราคาได้อย่างไร" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"สำหรับการติดตั้ง JavaScript หรือ Electron แอปพลิเคดำเนินการต่อด้วย " +"{ph0}เวิร์กโฟลว์แอ็พพลิเคชัน{ph1} การปฏิบัติตามแฟ้มและขอบเขตของกระบวนการ" + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "เบราว์เซอร์และการวิเคราะห์เครือข่าย — REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"สังเกตบันทึกการส่งออกด้วย " +"REA:เลือกหน้าเบราว์เซอร์จับคลิกตรวจสอบการร้องขอและทำตามสคริปต์การส่งออก" + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "การสังเกตเบราว์เซอร์" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "คัดลอกเริ่มต้นตัวอย่างเบราว์เซอร์" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "คัดลอกตัวอย่างพรอมต์" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "คัดลอกค้นหาหน้า" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "คัดลอกจับภาพสิบวินาทีถัดไป" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "คัดลอกอ่านสคริปต์ที่โหลด" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}บ้าน{ph1} /คู่มือ" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REA กเขา" + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"วิเคราะห์ฟังก์ชั่นพื้นเมืองและ Electron ส่งออกหรือคำขอเบราว์เซอร์ " +"คู่มือแต่ละคนรวมถึงให้รหัสและผล" + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "การสืบสวนครั้งแรก" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "ตั้งค่า REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "เชื่อมต่อตัวแทนการเข้ารหัสของคุณหรือใช้ REA จากอาคารผู้โดยสาร" + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "เริ่มต้นใช้งาน REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "โปรแกรมเครื่องรหัส" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "กู้คืนการคำนวณของตำแหน่งเสียงซ้าย/ขวา" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"เริ่มต้นด้วย Windows ปฏิบัติการเกม " +"ตรวจสอบคำแนะนำ,ทำตามโทร,อ่านค่าคงที่ตัวเลขและตรวจสอบการกู้คืนซี." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "คู่มือการวิเคราะห์โปรแกรมเครื่องรหัส" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "ทำตาม CSV ส่งออก" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"แอพพลิเคบันทึกย่อขนาดเล็กกระจายคุณลักษณะหนึ่งในการแสดงผล,โหลดล่วงหน้าและกระบ" +" ใช้ REA การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ" + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript & Electron คู่มือ" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "สำหรับแอปที่บรรจุขนาดใหญ่ให้ทำตาม {ph0}Notionสะพานคลิปบอร์ด{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "พฤติกรรมของเบราว์เซอร์" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "สังเกตการคลิก" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"เปิดตัวอย่างบันทึกการทำงานจับการร้องขอการส่งออกและหารหัสที่จะเปลี่ยนการตอบสน" + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "คู่มือการสังเกตเบราว์เซอร์" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "คู่มือวิศวกรรมย้อนกลับ — REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"เรียนรู้ REA ผ่านตัวอย่างการทำงานสั้น:การคำนวณพื้นเมืองและ Electron CSV " +"การส่งออกและคำขอเบราว์เซอร์" + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}บ้าน{ph1} / {ph2}กเขา{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "ตามรอย Electron{ph0}CSV งกัน" + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"การตลาดทางอินเทอร์เน็ต,การขาย,การตลาด,การโฆษณา Electron การเงินและการลงทุน " +"CSV นักเขียนไฟล์" + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "ในคู่มือนี้" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}ตัวอย่าง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}สอบถามตัวแทนของคุณ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}ติดตามรหัสส่งออก{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}ลองตัวอย่าง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}ตรวจสอบ CSV นักเขียน{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "ที่ไม่\"บันทึกการส่งออก\"ไป?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"คู่มือนี้ใช้ขนาดเล็ก Electron แอพ. คลิก {ph0}บันทึกการส่งออก{ph1} " +"การเขียนข้อความโฆษณา,บล็อก,การเขียนในนามคนอื่น,บทความ,การเขียนเนื้อหา CSV. " +"ลักษณะการทำงานจะถูกกระจายไปทั่วหลายแฟ้ม" + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "ร CSV ส่งออกข้าม Electron กระบวนการ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}แสดงผล pre พรีโหลด{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} " +"การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}ระหว่างกระบวนการ{ph1}{ph2}{ph3}{ph4}{ph5}การเรียกใช้ช่องสัญญาณไอพีซี:ข้อความที่มีชื่อไปยังกระบวนการหลัก{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}กระบวนการหลัก{ph1}{ph2}ผู้จัดการการส่งออก{ph3}{ph4}{ph5} " +"จัดการช่องทางที่และเรียก CSV นักเขียน{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} รูปแบบบันทึกย่อ→ {ph1} เขียน {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA การเรียกตัวจัดการและระบุเอพีไอที่เปิดเผย " +"พาธจะอนุมานจากรหัสจับรันไทม์สามารถตรวจสอบสิ่งที่ดำเนินการ" + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "ถามเกี่ยวกับ CSV ส่งออก" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}เชื่อมต่อตัวแทนของคุณกับ REA{ph1} และให้มันไดเรกทอรีการตรวจสอบหรือ ASAR" +" แฟ้ม:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA นทึกการส่งออกในการตรวจสอบนี้ ที่เป็น CSV " +"สร้าง?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "รือไม่ รวมเส้นทางที่แน่นอนไปยังโฟลเดอร์โปรแกรมประยุกต์หรือ {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA อ่านไฟล์โปรแกรมและสร้างแผนที่จุดเข้าโมดูลและขอบเขตของกระบวนการ " +"ตัวแทนของคุณใช้แผนที่เพื่อจำกัดการสืบสวนให้แคบลงให้เป็นคุณลักษณะการส่งออก" + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "ติดตามรหัสส่งออก" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "การแปลภาษา,การพิสูจน์อักษร,การตรวจแก้" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"หน้าจะรู้ชื่อเมธอด การใช้งานจะอยู่ในการโหลดล่วงหน้าซึ่งแสดงให้ผู้แสดงผลเห็น" + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA บันทึก {ph0} และช่องทางที่แท้จริง {ph1}. " +"มันจับคู่คำอธิษฐานที่มีตัวจัดการการจับคู่เดียวในกระบวนการหลัก" + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"การอ่านผู้ดูแลตอบคำถามเดิม: {ph0} รูปแบบบันทึกและกระบวนการหลักเขียน {ph1} " +"ลงในโฟลเดอร์ดาวน์โหลดของผู้ใช้" + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"บันทึกโดย REA 4.1.0 ในตัวอย่างที่สามารถดาวน์โหลดได้ด้านล่าง " +"การวิจัยทางการเงิน,การเงิน,ตลาดการเงิน,การวิเคราะห์ทางการเงิน" + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "วิเคราะห์ตัวอย่างด้วยตัวคุณเอง" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}ดาวน์โหลดตัวอย่างไปรษณีย์{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "เรียกดูไฟล์ที่มาหก" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "การวิเคราะห์แอปพลิเคชันแบบคงที่" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"แทนที่เส้นทางด้วยโฟลเดอร์ที่คุณเปิดซิป " +"คุณควรหาช่องทางไอพีซีหนึ่งช่องและตัวจัดการการจับคู่หนึ่งใน {ph0}. " +"สถานที่ที่มาอยู่ใน {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"สำหรับแอปของคุณเองให้ใช้คำสั่งเดียวกันกับไดเรกทอรีหรือ ASAR เส้นทาง " +"ตัวแทนสามารถทำตามสตริงที่แท้จริงชื่อเอพีไอหรือช่องทางไอพีซีด้วย " +"REAคุณลักษณะของเครื่องมือติดตาม" + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "ตรวจสอบ CSV นักเขียน" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"ทำตาม {ph0} ไปยังผู้จัดการของตน ซึ่งปัจจัยการผลิตถึง CSV " +"นักเขียนและสิ่งที่เกิดขึ้นถ้าการเขียนไฟล์ล้มเหลว?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"ใช้สถานที่ต้นทางเพื่อตรวจสอบรายละเอียดเหล่านั้น " +"ชื่อช่องที่คำนวณและตัวจัดการที่ไม่ชัดเจนจะยังคงไม่สามารถแก้ไขได้การสังเกตรันไทม์จะ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}ทำตาม Notionสะพานคลิปบอร์ด{ph1} {ph2}ใช้วิธีการเดียวกันกับบรรจุ " +"Electron แอพ.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}สังเกตการส่งออกเบราว์เซอร์{ph1}{ph2}จับภาพการคลิกจริงและดูว่าการร้องขอจะทำให้{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}ทำตามฟังก์ชั่นพื้นเมือง{ph1}{ph2}ดำเนินการต่อในไบนารีเมื่อคุณลักษณะขึ้นอยู่กับรหัสพื้นเมือง{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "JavaScriptและElectronการวิเคราะห์—REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"ติดตามบันทึกย่อ CSV " +"ออกแบบเว็บไซต์,ออกแบบกราฟิก,ออกแบบโลโก้,การสร้างตราสินค้า REA. " +"รวมไฟล์ตัวอย่างที่สามารถดาวน์โหลดได้และผลการวิเคราะห์ที่ได้รับการยืนยัน" + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "คัดลอกตัวอย่างพรอมต์" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "คัดลอกการวิเคราะห์แอ็พพลิเคชันแบบคงที่" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "{ph0}บ้าน{ph1} / {ph2}กเขา{ph3} /การวิเคราะห์โปรแกรมเครื่องรหัส" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "กู้คืน DX-Ballของ{ph0}การคำนวณเสียงแพน" + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "ตรวจสอบคำแนะนำเดิมระบุการป้อนข้อมูลและค่าคงที่แล้วตรวจสอบการกู้คืนซี" + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "ในคู่มือนี้" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}ตัวอย่าง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}สอบถามตัวแทนของคุณ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}อ่าน REA ผลลัพธ์{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}กู้คืนและตรวจสอบ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}ใช้ไบนารีของคุณเอง{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "คำนวณตำแหน่งเสียงสเตอริโอซ้าย/ขวา" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"ใน DX-Ball อิฐตีวัสดุตำแหน่งหน้าจอแนวนอน " +"รหัสเสียงเปลี่ยนมันเป็นค่าแพนซ้าย/ขวา" + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"ฟังก์ชั่นเริ่มต้น, {ph0} มีผลแยกคอมไพเลอร์สั้น:โทรไป {ph1}. REA " +"งกลับคำแนะนำและโทรซึ่งให้ตัวแทนวิธีการตรวจสอบเลขคณิตที่ขาดหายไป" + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "ใหม่กับเงื่อนไขเหล่านี้?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}การแนะนำ:{ph1} ขั้นตอนที่ตัวประมวลผลทำงานแสดงในรูปแบบที่สามารถอ่านเช่น " +"{ph2} หรือ {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}ผลลัพธ์การถอดคอมไพเลอร์/รหัสปลอม:{ph1} " +"ความพยายามของเครื่องมือวิเคราะห์เพื่อเปิดคำแนะนำกลับเป็นโค้ดเหมือนซี " +"มันสามารถพลาดชิ้นส่วนเช่นเดียวกับในตัวอย่างนี้" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "{ph0}ผู้โทร:{ph1} ฟังก์ชันที่เรียกอันนี้ จะแสดงค่าที่จะส่งผ่านใน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "{ph0}ที่อยู่:{ph1} ตำแหน่งในโปรแกรมเขียนในเลขฐานสิบหกเช่น {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}ค่าคงที่:{ph1} ตัวเลขคงที่เก็บไว้ในโปรแกรมอ่านเป็นไบต์ดิบและถอดรหัส" + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "สามชิ้นของหลักฐานหนึ่งการคำนวณ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01·คำแนะนำ{ph1}{ph2}อินพุตจำนวนเต็ม{ph3}{ph4}สแต็คอ่านให้ค่าที่ใช้โดยคำแนะนำจุดลอยตัว{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02·ผู้โทร{ph1}{ph2}พิกัดหน้าจอ{ph3}{ph4}ฟังก์ชั่นอิฐตีที่เรียกฟังก์ชันนี้ผ่าน" +" {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03·ไบต์ข้อมูล{ph1}{ph2}ค่าคงที่เป็นตัวเลข{ph3}{ph4}ไบต์อ้างอิงถอดรหัสไป" +" {ph5}, {ph6} และค่าสเกล{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA ให้คำแนะนำ,ความสัมพันธ์การโทรและไบต์. เจ้าหน้าที่ตีความพวกเขาด้วยกัน" + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "ถามเกี่ยวกับพฤติกรรม" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"หลังจาก {ph0}การเชื่อมต่อ REA ถึงตัวแทนของคุณ{ph1} และ " +"{ph2}การตั้งค่าเครื่องมือวิเคราะห์พื้นเมือง{ph3} " +"ให้ปฏิบัติการในท้องถิ่นและคำถาม:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "ฉันควรใช้เครื่องมือวิเคราะห์ใด" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA การศึกษาและการติว,อังกฤษ(สหราชอาณาจักร),อังกฤษ(สหรัฐอเมริกา):" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0}Hopper{ph1} (macOS หรือ Linux): REAการติดตั้งของตรวจพบหรือมีการติดตั้ง " +"บน macOS,เปิด Hopper " +"ครั้งเดียวและเลือกโหมดการสาธิตหรือเปิดใช้งานใบอนุญาตก่อนการวิเคราะห์ครั้งแรกข" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0}Ghidra{ph1} (macOS หรือ Linux การทดลอง Windows):ฟรีแต่ต้องการที่มีอยู่ " +"Ghidra 12.1.64 บิตเจดีเค 21 หรือใหม่กว่า" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0}IDA{ph1} (Windows):สำหรับที่มีอยู่ IDA การติดตั้งด้วย MCP ลงทะเบียน" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"เห็นมั้ย {ph0}ตั้งค่าการวิเคราะห์โปรแกรมเครื่องรหัส{ph1} สำหรับขั้นตอน" + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อหาวิธีการ DX-Ball คำนวณเสียงแพน " +"อธิบายการคำนวณและแสดงรหัส{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"รือไม่ ให้ตัวแทนของคุณเส้นทางไปยังท้องถิ่นของคุณ DX-Ball 1.07 ปฏิบัติการ REA" +" ไม่รวม DX-Ball " +"เพื่อใช้สำเนาของคุณเองหรือถามชนิดเดียวกันของคำถามเกี่ยวกับขนาดเล็กอื่น " +"Windows โปรแกรมที่คุณมี" + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "ฉันจะได้รับเส้นทางเต็มของแฟ้มได้อย่างไร" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1} ในสำรวจแฟ้มให้คลิกขวาที่แฟ้มแล้วเลือก " +"{ph2}คัดลอกเป็นเส้นทาง{ph3}. บน Windows 10 กดค้างไว้ในขณะที่การคลิกขวา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0}macOS:{ph1} ในการค้นหาให้คลิกขวาที่แฟ้มค้างไว้และเลือก " +"{ph2}คัดลอก\"...\"เป็นชื่อพาธ{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}ระบบใดๆ:{ph1} ลากไฟล์ลงในหน้าต่างเทอร์มินัลและเส้นทางของมันจะปรากฏขึ้น" + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "อ่าน REA ผลลัพธ์" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "อ่านข้อมูล" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"คำแนะนำโหลดอาร์กิวเมนต์จำนวนเต็มและแปลงสำหรับเลขคณิตจุดลอยตัว " +"นี่คือการป้อนข้อมูลที่ขาดจากมุมมองหลอกแรก" + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "ติดตามผู้โทร" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA ระบุตัวผู้โทรหาอิฐ คำแนะนำก่อนหน้านี้คูณกระเบื้องประสานงานด้วย 30;เพิ่ม " +"{ph0} (20)ให้ตำแหน่งหน้าจอของอิฐ" + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "อ่านค่าคงที่อ้างอิง" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"คณิตศาสตร์อ้างอิงที่อยู่เหล่านี้ " +"การอ่านไบต์เป็นค่าจริงลำดับคำสั่งจะบอกเอเจนต์ว่ามีการใช้งานอย่างไร" + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "เขียนและตรวจสอบฟังก์ชั่นการกู้คืน" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"ด้วยขนาด 1.0 ตำแหน่งหน้าจอ 0,320 และ 640 แผนที่ -500,0 และ 500 " +"ก่อนที่จะแปลงจำนวนเต็ม " +"การคำนวณทำให้ศูนย์กลางของหน้าจอที่ศูนย์กลางของสนามสเตอริโอ" + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"ตัวแทนที่ใช้ REAการค้นพบที่จะเขียนซีตรวจสอบแยกต่างหากเมื่อเทียบกับ 3,205 " +"ปัจจัยการผลิตกับเดิม 86 ฟังก์ชั่นแ" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "" +"{ph0}เครื่องชั่งสำหรับธุรกิจค้าปลีกอาหารเครื่องชั่งคิดราคาเครื่องชั่งติดป้ายราคา{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "ลองใช้ไบนารีของคุณเอง" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}เชื่อมต่อการวิเคราะห์ผู้ให้บริการโปรแกรมเครื่องรหัส{ph1} " +"แล้วให้ตัวแทนของคุณปฏิบัติการในท้องถิ่นหรือห้องสมุดและคุณลักษณะในการตรวจสอบ " +"คำถามเริ่มต้นที่มีประโยชน์รวมถึง\"วิธีการคือไฟล์นี้แยก?\"หรือ\"ฟังก์ชั่นใดที่จัดการกับการกระทำของเมนูนี้”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"ถ้าคุณรู้อยู่แล้วว่าชื่อฟังก์ชั่นหรือที่อยู่คุณสามารถสอบถามได้จากขั้ว " +"สำหรับการกำหนดค่า Ghidra การติดตั้ง:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "การวิเคราะห์ฟังก์ชัน" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"แทนที่เส้นทางเป้าหมายและ {ph0} ที่มีชื่อฟังก์ชั่นของคุณเองหรือที่อยู่ แต่ละ " +"CLI การอิมพอร์ตการเรียกใช้และการวิเคราะห์ไบนารีแล้วปิดเซสชัน ตัวแทนของคุณ " +"MCP การสืบค้นข้อมูลใช้ไบนารีที่นำเข้าอีกครั้งในขณะที่เซสชันนั้นเปิดอยู่" + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"อ่านโค้ดปลอมควบคู่ไปกับคำแนะนำและการอ้างอิง " +"เมื่อผลลัพธ์ออกจากสายหรือค่าที่ยังไม่ได้รับการแก้ไขให้ใช้ตำแหน่งนั้นเป็นคำถามถัดไป" + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "การวิเคราะห์ไบนารีพื้นเมือง — REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"กู้คืนการคำนวณพื้นเมืองด้วย " +"REA:ตรวจสอบคำแนะนำตามโทรอ่านค่าคงที่และตรวจสอบการสร้างขึ้นใหม่ซี" + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "การวิเคราะห์โปรแกรมเครื่องรหัส" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "คัดลอกตัวอย่างพรอมต์" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "คัดลอกการวิเคราะห์ฟังก์ชัน" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "ตั้งค่า REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}ตั้งค่า REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}เรื่องคืออะไร?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}REA ช่วยอย่างไร{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}เกมไดโนเสาร์{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}เครื่องคิดเลข{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}ลองดู REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}ศึกษาเพิ่มเติม{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}ความช่วยเหลือและข้อเสนอแนะ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}ชุมชน{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "วิศวกรรมย้อนกลับกับตัวแทนการเข้ารหัสของคุณ" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "เรียนรู้ว่า{ph0}ซอฟต์แวร์ทำงานอย่างไร" + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA ให้เครื่องมือแก่ผู้ช่วยเขียนโค้ด AI ของคุณ " +"เพื่อดูโปรแกรมและอธิบายการทำงาน" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "รู้อยู่แล้วว่าอีกครั้ง? {ph0}ข้ามไปที่คู่มือการวิเคราะห์→{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "ต้องการที่จะไปลึก? {ph0}อ่านบล็อก→{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "วางพรอมป์ต์นี้ในผู้ช่วยเขียนโค้ด AI ของคุณ:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "คัดลอก" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "หรือรันคำสั่งนี้ในเทอร์มินัล:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "ตรวจสอบและอนุมัติแผนการตั้งค่า แล้วเริ่มผู้ช่วยใหม่" + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "วิศวกรรมย้อนกลับคืออะไร?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "การทำความเข้าใจซอฟต์แวร์โดย {ph0}ตรวจสอบตัวโปรแกรมเอง{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"เป้าหมาย:เข้าใจคุณลักษณะดีพอที่จะ {ph0}อธิบายมา{ph1}, {ph2}เปลี่ยนมัน{ph3} " +"หรือ {ph4}สร้างมันขึ้นมาใหม่{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "ก่อนใช้ REA · คุณต้องตรวจสอบ {ph0}ด้วยตัวเอง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} ถอดรหัสสาขา" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} ติดตามการโทร" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} กู้คืนกฎ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}ต้นฉบับ 64·เลือกคำแนะนำ{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01·สาขาใด?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0*5 บาท? 0*5 องศาเซลเซียส?{ph1} สองกระโดดไปยังสถานที่เดียวกัน " +"ผู้ประกอบการคนไหน”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "ค้นหารหัสคำสั่งแล้วติดป้ายชื่อสาขา" + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "แบ่ง÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "คูณ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · ฟังก์ชันที่เรียกทำอะไร?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 เป็นที่ชัดเจน การโทรเป็นแค่ที่อยู่ {ph0}อันไหนแบ่งกัน? " +"ซึ่งค่าไปใน?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "ตรวจสอบฟังก์ชั่นผู้ช่วยและติดตามค่าที่เก็บไว้" + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "แบ่ง" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03·กฎคืออะไร?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"เส้นทางนี้คูณด้วยอินพุตอื่นๆ แล้ว {ph0}10%หมายถึง 10%ของ 200{ph1} " +"หลังจาก+.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "ตั้งชื่อตัวดำเนินการและตรวจสอบเส้นทางตัวดำเนินการทั้งสอง" + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "เหตุผลผู้เชี่ยวชาญที่เป็นตัวอย่าง" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "{ph0}คุณถอดรหัสคำแนะนำตามสายฟังก์ชั่นและสร้างการคำนวณ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "เมื่อใช้ REA · คุณถาม {ph0}ผู้ช่วย AI{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "ใช้พรอมป์ต์เดียวก็พอ" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "ถามผู้ช่วย {ph0}ด้วยภาษาทั่วไป{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวอย่างพรอมต์*เครื่องคิดเลข" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "คำตอบตัวอย่าง·ขึ้นอยู่กับการค้นพบ" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "หลังจาก+ปุ่ม%ใช้เวลา {ph0}เปอร์เซ็นต์ของจำนวนแรก{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "ข้อมูลที่ REA ให้" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "คำแนะนำของผู้จัดการถอดรหัสและการโทร" + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "สิ่งที่ผู้ช่วยอธิบาย" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "ซึ่งสาขาที่ใช้สิ่งที่มันคำนวณและวิธีการที่จะสร้างมัน" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"การประกอบที่เลือกจากเครื่องคิดเลขที่ติดตั้ง ความคิดและคำตอบแสดงถึงการค้นพบ. " +"{ph0}ดำเนินการต่อด้วยตัวอย่างเครื่องคิดเลข↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}ลองสองตัวอย่าง{ph1} " +"เปลี่ยนความเร็วของเกมแล้วกลับไปที่เครื่องคิดเลขและสร้างปุ่ม%ของมัน" + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "ตัวอย่าง 01*Chromeเกมไดโนเสาร์" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "ทำไมไดโนเสาร์จึงวิ่งเร็วขึ้น?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "งเขา" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "สร้างเกมด้วย {ph0}ปรับความเร็ว{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "ทำไมวิศวกรรมย้อนกลับมันได้หรือไม่" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"ในการเร่งความเร็วของมันเราต้องการ " +"{ph0}กฎในเกมที่ทำงาน{ph1}:วิธีที่รวดเร็วจะเริ่มต้นวิธีการที่มันจะเพิ่มขึ้นและเมื่อมันหยุด" + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "เล่นเกมที่สร้างขึ้นใหม่" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "เล่น" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "กระโดด ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "เริ่มใหม่" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "ความเร็ว" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "ใช้กฎการเร่งการกู้คืน" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "กฎเดิม:เริ่มต้นที่ 6 จากนั้นเพิ่มขึ้นถึง 13" + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"เลื่อนแถบเลื่อนเพื่อตั้งค่าความเร็วของคุณเอง พื้นที่หรือกระโดดล้างแคคตัส" + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"เปิดใช้งาน JavaScript เพื่อเล่นการฟื้นฟู รหัสและคำอธิบายข้างต้นยังคงอ่านได้" + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "ผลลัพธ์ที่ REA ส่งกลับ" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}สคริปต์จริงทำงานในหน้า{ph1} " +"ตัวแทนอ่านฟังก์ชั่นการปรับปรุงและการตั้งค่าความเร็วแล้วใช้กฎที่ในเกมใหม่" + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวอย่างพรอมต์*เกมไดโนเสาร์" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบเกมไดโนเสาร์นี้ ทำไมมันถึงได้เร็วขึ้น? " +"แสดงกฎความเร็วแล้วสร้างรุ่นขนาดเล็กที่มีความเร็วที่ปรับได้{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "ตรวจสอบเป้าหมาย: {ph0}วายู Chromium-รุ่นเบราว์เซอร์ที่ได้มา{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}เริ่มที่ 6{ph1} เพิ่ม {ph2}0.001{ph3} " +"แต่ละการปรับปรุงโดยไม่ต้องปะทะกันในขณะที่ความเร็วอยู่ด้านล่าง {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "เปิดห้องปฏิบัติการความเร็ว→" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "สิ่งที่แต่ละส่วนทำ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 · " +"REA{ph1}{ph2}อ่านสคริปต์เกมที่ทำงาน{ph3}{ph4}คืนโค้ดและการตั้งค่าจริงให้กับเอเจนต์{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02·ตัวแทนของคุณ{ph1}{ph2}สร้างกฎใหม่เพิ่มตัวควบคุม{ph3}{ph4}ใช้การเร่งการกู้คืนในเกมขนาดเล็กที่มีการเลื่อนความเร็ว{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03·คุณ{ph1}{ph2}เปลี่ยนความเร็วและเล่น{ph3}{ph4}ลองเร่งเดิมแล้วเลือกก้าวของคุณเอง{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "ดูสคริปต์การตรวจสอบและวิธีการลองวิเคราะห์" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA ตรวจสอบรุ่นเบราว์เซอร์ผ่านการเชื่อมต่อดีบักท้องถิ่นและส่งกลับโหลด {ph0} " +"รวมทั้งแหล่งที่มาและย่อย" + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"เราเรียกว่าฟังก์ชั่นการปรับปรุงเกมเดิมในการตรวจสอบเบราว์เซอร์ควบคุมกับอุปสรรค" +" หลังจาก 4,000 ปรับปรุงความเร็ว 10.0;หลังจาก 10,000 มันเป็น 13.0 " +"ปัดเศษให้เป็นหนึ่งทศนิยม" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"มินิเกมใหม่ช่วยให้กฎความเร็วที่ " +"การวาดภาพการกระโดดและรหัสการชนกันคือการดำเนินการเรียนการสอนขนาดเล็ก " +"{ph0}เปิดห้องแล็บ{ph1} เพื่อดูรหัสใหม่และเรียกใช้การตรวจสอบความเร็วเดียวกัน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"เพื่อตรวจสอบเป้าหมายด้วยตัวคุณเองตาม " +"{ph0}ขั้นตอนการเชื่อมต่อเบราว์เซอร์{ph1} ใช้ {ph2}หน้าไดโนเสาร์{ph3}. " +"ณแล้วคัดลอกพร้อมท์ข้างต้น." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}ตรวจสอบรหัสความเร็ว{ph1} · {ph2}Chromium ผู้เขียน·ใบอนุญาตบีเอส{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "ตัวอย่าง 02*Windowsเครื่องคิดเลข" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "สร้างปุ่ม % ของเครื่องคิดเลขขึ้นใหม่" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "สร้างเครื่องคิดเลขขนาดเล็กที่จัดการ {ph0}ทั้ง+และ×อย่างถูกต้อง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"ปุ่มเดียวกันใช้ {ph0}กฎที่แตกต่างกันหลังจาก+และ×{ph1} " +"เราตรวจสอบการตรวจสอบที่ติดตั้งเพื่อหาจำนวนเปอร์เซ็นต์ถูกนำไปใช้" + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "ลองคำนวณ" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "รีเซ็ต" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10%ของ 200=20. จากนั้น 200+20=220" + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "ภาพประกอบโต้ตอบของกฎร้อยละตรวจสอบ" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}สาขาหนึ่งหารด้วย 100 อื่นๆยังคูณด้วยจำนวนแรก{ph1} " +"ตัวแทนใช้ทั้งสองปุ่มเพื่อสร้าง%" + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "สำหรับตัวอย่างนี้, {ph0} และ {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}พร้อมท์ตัวอย่าง·สร้างปุ่ม%ใหม่" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบ Windows ปุ่ม%ของเครื่องคิดเลข " +"กู้คืนกฎหลังจาก+และ×แล้วสร้างเครื่องคิดเลขขนาดเล็กที่ใช้ทั้งสอง{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "ด้วย+" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}เอา 10%ของเลขแรก{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "กับ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}เปลี่ยน 10%เป็น 0.1{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "จากแอปที่ติดตั้งไปยังปุ่ม%การทำงาน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 · REA " +"อ่านห้องสมุด{ph1}{ph2}คืนรหัสตัวจัดการ%ของ{ph3}{ph4}ฟังก์ชั่นตรวจสอบผู้ประกอบการและใช้ค่าคงที่" +" {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03·ตัวแทนของคุณตีความมัน{ph1}{ph2}อธิบายและทำซ้ำกฎ{ph3}{ph4}ตรวจสอบสาขาที่มีแหล่งที่มาของไมโครซอฟท์,แล้วลอง+และ×ข้างต้น.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "ดูรหัสจริงและวิธีการตรวจสอบคำตอบ" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"ตรวจสอบด้วย REA 4.1.0: Windows เครื่องคิดเลข 11.2508.4.0 เท่า 64 " +"สรุปสามารถอ่านได้ใช้ชื่อจากแหล่งสาธารณะของไมโครซอฟท์เพื่ออธิบายสาขาที่กู้คืน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}การดำเนินงานร้อยละ{ph1} · {ph2}กรณีทดสอบของไมโครซอฟท์{ph3} · " +"{ph4}คู่มือการติดตั้งพื้นเมือง{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "การสืบสวนครั้งแรกของคุณ" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "ลองดู REA บนแอปขนาดเล็ก" + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"ดาวน์โหลดตัวอย่างบันทึกของเรา,ติดตามของ CSV " +"ส่งออกและตรวจสอบการป้อนข้อมูลที่มีการเปลี่ยนแปลงอย่างใดอย่างหนึ่ง" + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "ลองตัวอย่างที่แนะนำ" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "อยากศึกษาให้ลึกขึ้นไหม?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"บอกตัวแทนของคุณสิ่งที่คุณต้องการที่จะเข้าใจหรือสร้าง ด้วย REA " +"คุณสามารถทำงานร่วมกันในอะไรจาก {ph0}การโคลนเว็บไซต์นี้{ph1} ถึง " +"{ph2}สร้างเกมจากปฏิบัติการของ{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวอย่างพรอมต์*เว็บไซต์" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "ใช่อันนี้" + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวอย่างพรอมต์*ฟื้นฟูเกม" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อสร้างเกมนี้จากการปฏิบัติการของ " +"กู้คืนตรรกะการเล่นเกมในซีและทดสอบกับเดิม{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}ดู DX-Ball กรณีศึกษา→{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "สำหรับขั้นตอนการตั้งค่าและการวิเคราะห์เลือกเป้าหมายของคุณ:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "โปรแกรมเครื่องรหัส" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"ตรวจสอบฟังก์ชัน,สตริง,การอ้างอิงและเรียกฟังก์ชันความสัมพันธ์ในปฏิบัติการและไลบรารี." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "คู่มือการวิเคราะห์โปรแกรมเครื่องรหัส" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "การประมวลผลข้อมูล,คีย์ข้อมูล,การพิมพ์ดีดคัดลอก ASAR ยวข้อง" + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "เวิร์กโฟลว์แอ็พพลิเคชัน" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "เบราว์เซอร์และรันไทม์กิจกรรม" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"จับภาพกิจกรรมของเบราว์เซอร์หรือกระบวนการที่เลือกแล้วเปรียบเทียบผลลัพธ์ข้ามรัน" + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "คู่มือการสังเกตเบราว์เซอร์" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "มีคำถามไหม?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}อ่านคำถามที่พบบ่อย{ph1}, {ph2}แชทกับเราใน Discord{ph3} หรือ {ph4}เปิด " +"GitHub ปัญหา{ph5} สำหรับข้อบกพร่องและการร้องขอคุณสมบัติ" + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "เข้าร่วมชุมชน" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"แบ่งปันการตรวจสอบและได้รับความช่วยเหลือจากคนอื่นๆ REA ผู้ใช้บน Discord. " +"ทำตาม REA การปรับปรุงโครงการ" + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-วิศวกรรมย้อนกลับสำหรับตัวแทนการเข้ารหัสของคุณ" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"แอพพลิเควิศวกรย้อนกลับ,ไบนารีและพฤติกรรมเบราว์เซอร์กับตัวแทนการเข้ารหัสของคุณ" +" ทำตามคำแนะนำที่ชัดเจนและลองตัวอย่างแบบโต้ตอบกับ REA." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "คัดลอก REA พร้อมท์การติดตั้ง" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "คัดลอกคำสั่งการตั้งค่า" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "ปฏิบัติตามคู่มือการวิเคราะห์เครื่องคิดเลข" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "คัดลอกคำถามร้อยละเครื่องคิดเลข" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "ไดโนเสาร์มินิเกม ใช้ปุ่มกระโดดหรือกดพื้นที่ในขณะที่เกมจะมุ่งเน้น" + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "คัดลอกไดโนเสาร์พร้อมท์วิเคราะห์" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "เลือกการคำนวณ" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "คัดลอกการวิเคราะห์เครื่องคิดเลขพร้อมท์" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "คัดลอกเว็บไซต์พร้อมท์โครงการ" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "สำเนาพร้อมท์การฟื้นฟูเกม" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}บ้าน{ph1} / {ph2}โชว์เคส{ph3} /แอนดรอยด์" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "กรณีศึกษา·Aegisตรวจสอบความถูกต้อง" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "เครื่องพิสูจน์ตัวตนอย่างไร{ph0}สร้างรหัสล็อกอิน?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"รหัสหกหลักเปลี่ยนทุก 30 วินาที ใช้ REA เพื่อหาการคำนวณในหุ่นยนต์ APK " +"แล้วสร้างมันด้วยนาฬิกาที่คุณสามารถควบคุม" + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3*แอนดรอยด์*การเปิดตัวอย่างเป็นทางการ APK ·6.9 ล้านบาท" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "ดู Aegis บน GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "จาก APK รหัสที่คุณสามารถทำซ้ำ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01*ค้นหาคุณลักษณะ{ph1}{ph2}3,077 ชั้นเรียน methods " +"การสร้างวิธี{ph3}{ph4}REA " +"ค้นหาแพ็กเกจและติดตามรหัสที่ใช้โดยการแสดงผลและการดำเนินการคัดลอก{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02*อ่านการคำนวณ{ph1}{ph2}เวลา+บัญชีคีย์ six หกหลัก{ph3}{ph4}REA " +"ส่งกลับเมธอดและค่าดีฟอลต์ เจ้าหน้าที่อธิบายว่าพวกเขาเข้ากันได้ยังไง{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03·สร้างและตรวจสอบ{ph1}{ph2}เปลี่ยนนาฬิกา " +"ดูรหัส{ph3}{ph4}การสาธิตเบราว์เซอร์ใหม่ทำซ้ำกฎและตรวจสอบกับกรณีการอ้างอิงสาธารณะ{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "กรณีศึกษา" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}สอบถามตัวแทนของคุณ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}ลองสร้างรหัส{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}ค้นหารหัสด้วย REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}อ่านการคำนวณ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}ตรวจสอบการฟื้นฟู{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}ตรวจสอบ APK ตัวคุณเอง{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "สอบถามตัวแทนของคุณ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"การตรวจสอบจะแสดงรหัสการเข้าสู่ระบบการเปลี่ยนแปลง เราต้องการที่จะหา " +"{ph0}สิ่งที่ทำให้มันเปลี่ยนแปลง{ph1} และทำซ้ำพฤติกรรมนั้น" + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"พร้อมท์ตัวอย่างสำหรับการดาวน์โหลด APK ด้วย REAการวิเคราะห์หุ่นยนต์กำหนดค่า " +"{ph0}รับ APK และการตั้งค่าการวิเคราะห์↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "ลองสร้างรหัส" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"เวลากลุ่มแอปเป็น {ph0}30 วินาที{ph1} " +"มันรวมหมายเลขบล็อกที่มีคีย์บัญชีเพื่อสร้างรหัส " +"คีย์เดียวกันและบล็อกผลิตรหัสเดียวกัน" + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "ย้ายนาฬิกาข้าม 60 วินาที" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "เวลา" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "วินาที" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "นาฬิกาตัวอย่างที่สามารถปรับได้ของเรา" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "บล็อก 30 วินาที" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "บล็อก" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 วินาที{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "รหัสที่สร้างขึ้น" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "คีย์บัญชี+บล็อก six หกหลัก" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "ตัวอย่างเวลาในไม่กี่วินาที" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 วินาที" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 วินาที" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"ที่ 59 วินาที: {ph0}287082.{ph1} ที่ 60 วินาที: {ph2}359152.{ph3} " +"ย้ายภายในหนึ่งบล็อกใบรหัสไม่เปลี่ยนแปลง" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"คีย์ได้รับการแก้ไขสาธารณะ {ph0}6238 ข้อมูลการทดสอบ{ph1}. " +"การสาธิตดำเนินการคำนวณกู้คืนจาก APK." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "แผนภาพแสดงผลที่ 59 วินาที เปิดใช้งาน JavaScript เพื่อเปลี่ยนนาฬิกา" + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "ค้นหารหัสด้วย REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "แคบ APK ถึงสามชั้นเรียน" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} เป็นผู้สมัครคำนวณ;อีกสองกังวลแถบความคืบหน้าและบัญชีที่นำเข้า TOTP " +"หมายถึงรหัสผ่านแบบครั้งเดียวตามเวลา" + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "เชื่อมต่อเครื่องกำเนิดไฟฟ้าเข้ากับจอแสดงผลของแอป" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA ระบุการประทับเวลาเกินพิกัดและพบว่าผู้โทรวิธีการฐาน การตรวจสอบ {ph0} " +"จากนั้นแสดงการโทรจอแสดงผล {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"คำขอแสดงเส้นทางอินพุตที่สั้นลง ชื่อชั้นผลลัพธ์ละเว้นทั่วไป {ph0} คำนำหน้า" + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "อ่านการคำนวณ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA การคืนสินค้า {ph0}แปลงนาฬิกา,การตั้งค่าเริ่มต้นและวิธีการสร้าง{ph1} " +"ก่อสร้างตั้งช่วงเวลา 30 " +"วินาทีและหกหลัก;วิธีการประทับเวลาจะเปลี่ยนวินาทีเป็นจำนวนบล็อ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} บล็อกเวลา" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} กุญแจ+บล็อก" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} หกหลัก" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}เวลาเลือกบล็อก{ph1} วินาที 30 ถึง 59 ทั้งหมดให้บล็อก 1 ที่ 60 " +"วินาทีบล็อกจะกลายเป็น 2" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}กุญแจสำคัญก็สำคัญเหมือนกัน{ph1} เครื่องกำเนิดไฟฟ้ารวมคีย์บัญชีกับบล็อก " +"บัญชีที่มีคีย์ที่แตกต่างกันสามารถแสดงรหัสที่แตกต่างกันในเวลาเดียวกัน" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}เก็บหกหลัก{ph1} ส่วนที่เหลือหลังจากการหารด้วย 1,000,000 " +"มีเบาะกับศูนย์เมื่อจำเป็นดังนั้นรหัสสามารถเริ่มต้นด้วย 0" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"ตัดตอนมาจากหลายวิธีการตรวจสอบที่มีการตัดสายสำหรับการแสดงผล " +"แผงด้านขวาเป็นบทสรุปอธิบาย {ph0}Aegis รหัสคือจีพีแอล-3.0{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Insideในเครื่องกำเนิดไฟฟ้า" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"เปิดตัว APK ทำให้ {ph0} ใน {ph1}. REA ตามสายจาก {ph2} " +"และส่งกลับร่างกายนี้แหล่งที่มาเดิมเรียกผู้ช่วย {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"ไบต์แฮชล่าสุดเลือกตำแหน่ง สี่ไบต์ที่ตำแหน่งนั้นให้หมายเลข 31 " +"บิตเป็นบวก;การจัดรูปแบบลดลงไปยังหมายเลขที่ร้องขอข " +"อาร์กิวเมนต์สุดท้ายของตัวสร้างเลือกสาขาการจัดรูปแบบรหัสที่นำมาใช้โดยการรวบรวม" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}เปรียบเทียบกับแหล่งที่มาของรีลีสที่ตรงกัน{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "ตรวจสอบการฟื้นฟู" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"เราประกอบที่เลือก REA-กลับวิธีการจาวาในโปรแกรมทดสอบขนาดเล็ก " +"ผลผลิตของพวกเขาตรงกับการฟื้นฟูอิสระ {ph0}133 กรณีทดสอบ{ph1} " +"รวมถึงขอบเขตเวลาบล็อกและรหัสที่เริ่มต้นด้วยศูนย์" + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "ตัวอย่างเวลา" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "รหัสหกหลัก" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 วินาที" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 วินาที" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"เครื่องกำเนิดไฟฟ้ายังตรงกับหกตีพิมพ์ SHA-1 กรณีอ้างอิงใน {ph0}6238{ph1}. " +"ตรวจสอบการใช้เบราว์เซอร์กับพวกเขา:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "เรียกใช้การตรวจสอบอ้างอิง" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "อ่านการคำนวณการสาธิต" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "กรณีอ้างอิงใช้แปดหลัก ตรวจสอบยังตรวจสอบผลลัพธ์หกหลักของพวกเขา" + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"การตรวจสอบการทำงานแยกวิธีการจาวาและการสาธิตใหม่ หุ่นยนต์ APK " +"ได้รับการตรวจสอบแบบคงที่" + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "ตรวจสอบ APK ตัวคุณเอง" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}ตั้งค่า REA{ph1} บน macOS หรือ Linux " +"แล้วดาวน์โหลดทั้งสองไฟล์ลงในโฟลเดอร์เดียวกัน บน Windows ใช้ Linux " +"วุฒิการศึกษาระดับปริญญาตรีขึ้นไป" + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "17 หรือสูงกว่า เลือกด้วย {ph0} หรือ {ph1}. คดีนี้ใช้เจดีเค 21" + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "จุด REA ที่ไฟล์ผู้ให้บริการและตรวจสอบ APK:" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"ตัวแทนของคุณสามารถดำเนินการต่อผ่าน REAของ CLI ใช้พร้อมท์ข้างต้น สำหรับ " +"MCP,เพิ่ม {ph0} ไปที่ REA สภาพแวดล้อมของเซิร์ฟเวอร์และเชื่อมต่อมัน" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"คำถามต่อไป: " +"{ph0}จะเกิดอะไรขึ้นเมื่อบัญชีใช้ตัวเลขแปดหลักหรือช่วงเวลาที่แตกต่างกัน{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "แหล่งที่มา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}ทางการ Aegis 3.4.3 ปล่อย{ph1} · {ph2}แหล่งที่มาที่ตรงกันกระทำ{ph3} · " +"{ph4}จีพีแอล-3.0 ใบอนุญาต{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}กรณีอ้างอิง 6238{ph1} · {ph2}ข้อมูลการทดสอบการสาธิต{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"ตรวจสอบด้วย REA 6.1.0 เมื่อวันที่ 9 ตุลาคม 2026 " +"ข้อความที่ตัดตอนมาแบบแยกส่วนจะให้เครดิตกับ " +"Aegis;แผนภาพสรุปที่อ่านได้และการฟื้นฟูเบราว์เซอร์เป็นวัสดุการเรียนการสอนใหม่" + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK วิศวกรรมย้อนกลับ:รหัสเข้าสู่ระบบ — REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"ตรวจสอบที่AegisAndroidAPKกับREA,ฟื้นคืนของมันหก-ตัวเลขล็อกอิน-รหัสการคำนวณและลองชิ้นกับ" +" comment." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK กรณีศึกษา" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "คัดลอก Aegis ตัวอย่างพรอมต์" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "ติดตามการคำนวณการเข้าสู่ระบบรหัส" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "คัดลอก APK คำสั่งการตรวจสอบ" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}บ้าน{ph1} / {ph2}โชว์เคส{ph3} /ซีทีเอฟ" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "กรณีศึกษา·ดาวน์ดันเดอร์ซีเอฟ 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "หาธงใน{ph0}ไบนารีซีทีเอฟ" + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"ใช้ REA " +"ในการตรวจสอบตัวตรวจสอบธงขนาดเล็ก,เปิดกฎของมันเป็นสมการและหาอินพุตที่ทำให้ก " +"{ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "สี่เหลี่ยมสวมหน้ากากตรวจสอบธง*ง่าย · Linux 86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "ดูความท้าทายเดิม" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "จากไบนารีถึงคำตอบที่ถูกตรวจสอบ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01*ค้นหาเช็ค{ph1}{ph2}ฟังก์ชั่นการตรวจสอบสายอักขระ{ph3}{ph4}REA " +"ค้นหาพรอมต์การอ้างอิงและรหัสที่ยอมรับหรือปฏิเสธการป้อนข้อมูล{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02*แยกกฎ{ph1}{ph2}36 ตัวอักษร·26 ผลรวม{ph3}{ph4}REA " +"ส่งคืนคำแนะนำและข้อมูลที่อยู่เบื้องหลังการตรวจสอบแต่ละ " +"เจ้าหน้าที่เปลี่ยนให้เป็นสมการ{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03*แก้ปัญหาและเรียกใช้{ph1}{ph2}กู้คืนธงยุคที่ถูกต้อง!{ph3}{ph4}สคริปต์หลามแก้สมการ" +" REA จับโปรแกรมต้นฉบับที่ยอมรับผลลัพธ์{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"ความท้าทายคือโจเซฟเผยแพร่ในพื้นที่เก็บข้อมูลอย่างเป็นทางการของดาวันเดอร์ซีฟ" + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "กรณีศึกษา" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}ค้นหารหัสตรวจสอบ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}อ่านหนึ่งหน้ากาก{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}ประกอบรหัสที่อ่านได้{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}แก้สมการ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}ตรวจสอบคำตอบ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}ลองด้วยตัวคุณเอง{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "ค้นหารหัสตรวจสอบ" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"เอกสารประกอบคำบรรยายเป็น 15 กิโลไบต์ปฏิบัติการ มันขอให้ธงแล้วพิมพ์ {ph0} " +"หรือ {ph1}. เริ่มต้นด้วยการร้องขออย่างง่ายๆกับตัวแทนของคุณ" + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA " +"วิจัย,การเขียนทางเทคนิค,การเขียนรายงาน,การเขียนเชิงวิชาการ " +"อธิบายวิธีการตรวจสอบการทำงานแล้วตรวจสอบคำตอบด้วยโปรแกรมต้นฉบับ{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"พร้อมท์ตัวอย่างกับความท้าทายดาวน์โหลดพร้อมใช้งานภายในและการวิเคราะห์ผู้ให้บริก" + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "ทำตามพร้อมท์อินพุตไปยังฟังก์ชัน" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"การอ้างอิงให้ตัวแทนสถานที่ในการตรวจสอบแม้ว่าชื่อฟังก์ชันเดิมของปฏิบัติการได้ถูกลบออก" + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "อ่านตรวจสอบและสองผู้ช่วย" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"วงแรกคัดลอกรหัสอักขระ 36 ตัว " +"ห่วงการตรวจสอบถอดรหัสหน้ากากรวมรหัสที่เลือกและเปรียบเทียบผลกับหมายเลขที่เก็บไว้" +" มัน {ph0}-ขั้นตอนไบต์ข้าม {ph1} ไบต์ให้ 26 มาสก์" + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"เหล่านี้จะถูกเลือกผลลัพธ์จากสด REA การวิเคราะห์ " +"เส้นทางเป้าหมายท้องถิ่นจะสั้นลงสำหรับการแสดงผล;ที่อยู่อ้างถึง " +"REAของภาพที่นำเข้า" + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "หนึ่งตรวจสอบเผยตัวละครตัวหนึ่ง" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"ตรวจสอบจัดป้อนข้อมูลใน 6×6 ตาราง หน้ากากจะเลือกเซลล์ที่ส่งผลต่อผลรวม " +"การเข้ารหัสขนาดกะทัดรัดใช้ตัวเลขเชิงลบเพื่อข้ามเซลล์และตัวเลขบวกเพื่อเลือกพวกเ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "ตรวจสอบที่เจ็ดเลือกเพียงหนึ่งตำแหน่ง {ph0}เปิดรูป{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "อ่านหน้ากากและเป้าหมายจากไบนารี" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"การเรียนการสอน {ph0} อ่านไบต์หน้ากากเป็นค่าที่ลงนาม นี่คือเหตุผลที่ {ph1} " +"หมายถึง -21 เป้าหมายคือจำนวนเต็มเอนเดียนน้อย ร่วมกันไบต์เหล่านี้บอกตัวแทนที่" +" {ph2} เพื่อให้ตัวละครที่เป็น {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "จากคำแนะนำในการตรวจสอบที่อ่านได้" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"เลือกขั้นตอนในการเชื่อมต่อผู้ช่วยข้อสรุปและฟังก์ชั่นการเรียกของกฎเดียวกันในซี" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} เริ่มต้น" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} เลือก" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} เพิ่ม" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} ล่วงหน้า" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} เปรียบเทียบ" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA *เลือกคำแนะนำเดิม" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "อ่านค·สรุปหนึ่งตรวจสอบ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01*เริ่มที่ศูนย์{ph1} {ph2} ถือผลรวมการทำงาน" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02·ตรวจสอบเซลล์หน้ากาก{ph1} ค่าศูนย์ข้ามอักขระค่าที่ไม่ใช่ศูนย์รวม" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03*เพิ่มรหัสอักขระ{ph1} " +"จำนวนเต็มของอินพุตที่ชดเชยเดียวกันจะถูกเพิ่มในผลรวม" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04*ย้ายไปยังเซลล์ถัดไป{ph1} " +"ห่วงเดิมก้าวหน้าสี่ไบต์ต่อจำนวนเต็มและการเข้าชมหกแถวของหกเซลล์" + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05*เปรียบเทียบกับเป้าหมายที่เก็บไว้{ph1} ฟังก์ชั่นการโทรได้รับผลรวมใน " +"{ph2}. ไม่ตรงกันกระโดดไป {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"คำแนะนำมาจากผู้ช่วยข้อสรุปและฟังก์ชั่นการเรียก " +"คเป็นบทสรุปอธิบายที่มีชื่ออธิบายและแบนลูป 36 เซลล์" + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "แก้สมการ 26" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"หน้ากากส่วนใหญ่เลือกหลายเซลล์ ตัวอย่างเช่นการตรวจสอบครั้งแรกเพิ่ม 16 " +"รหัสอักขระและต้องมีทั้งหมด 1441 " +"การเลือกที่ทับซ้อนกันให้สมการที่สคริปต์หลามขนาดเล็กสามารถแก้ร่วมกัน" + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "งูหลาม*ตัดตอนแก้" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"3 เป็นตัวแก้ที่พบว่าค่าที่น่าพอใจสมการเหล่านี้ " +"ข้อความที่ตัดตอนมานี้จะใช้การตรวจสอบสกัดและถือว่า {ph0} " +"ธงที่มีตัวอักษรตัวเลขขีดและวงเล็บ ดาวน์โหลดที่สมบูรณ์รวมถึงทั้งหมด 26 " +"หน้ากากและเป้าหมาย" + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "ดาวน์โหลดแก้ที่สมบูรณ์" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "ตรวจสอบคำตอบด้วยโปรแกรมต้นฉบับ" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REAกระบวนการจับภาพบันทึกปฏิบัติการเดิมยอมรับธงแก้ไข " +"เปลี่ยนตัวอักษรที่เลือกจาก {ph0} ถึง {ph1} ทำให้ผลรวมแรก 1440 แทน 1441 " +"และโปรแกรมปฏิเสธมัน" + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "อินพุต" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "ผลลัพธ์ที่สังเกต" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "รหัสออก" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "ธงของแก้" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "ตัวละครตัวหนึ่งเปลี่ยนไป" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "แสดงธงที่กู้คืนและเอาท์พุทที่จับ" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA*เอาท์พุทโปรแกรมต้นฉบับ" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "คัดลอกธง" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"ค่าที่กู้คืนยังตรงกับธงในการเผยแพร่ข้อมูลเมตาความท้าทายของผู้จัดงาน,ตรวจสอบหลังจ" + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "แหล่งที่มาอัตลักษณ์เป้าหมายและรายละเอียดการวิเคราะห์" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"เพิ่งวิเคราะห์และสองระบวนการจับภาพใน 8 ตุลาคม 2026 ใช้REA4.1.0 " +"กับGhidra12.1.4 บLinuxx64. 86-64 เอลฟ์ 15,248 ไบต์" + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"อ้างอิงสตริงฟังก์ชั่นและค่าคงที่ได้รับการตรวจสอบก่อนที่จะอ่านแหล่งที่มาของผู้จัดงานหรือ" +" แก้หลามและแผนภาพที่ถูกสร้างขึ้นจากเหล่านั้น REA กเขา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}เปรียบเทียบกับแหล่งที่มาของผู้จัดงาน{ph1} · " +"{ph2}ท้าทายข้อมูลเมตาและธง{ph3} · {ph4}REA บันทึกหลักฐาน{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "ลองด้วยตัวคุณเอง" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"ดาวน์โหลดความท้าทายเดิมและแก้ลงในโฟลเดอร์หนึ่ง " +"ใช้พร้อมท์ข้างต้นเพื่อตรวจสอบกับตัวแทนของคุณหรือเรียกใช้สคริปต์ที่รวมอยู่" + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "เทอร์มินัล*แก้ปัญหาและเรียกใช้" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"สคริปต์พิมพ์ธงผู้สมัครวางไว้ที่พรอมต์ของโปรแกรม การแก้ความต้องการงูหลามและ " +"{ph0}. การเรียกใช้ความต้องการที่ปฏิบัติการเดิม Linux จำนวน 86-64" + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "ตั้งค่า REA กับตัวแทนการเขียนโค้ดของคุณ" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "การควบคุมการสั่นสะเทือนและการสั่นสะเทือน — REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"ใช้ REA ธง " +"หาฟังก์ชั่นการตรวจสอบสารสกัดจากหน้ากากและเปรียบเทียบธงกู้คืนกับโปรแกรมเดิม" + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "กรณีศึกษา" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "พร้อมท์ตัวอย่างการคัดลอก" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "สมการหน้ากากซีทีเอฟ;เลื่อนในแนวนอนบนหน้าจอขนาดเล็ก" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"หน้ากากที่เจ็ดข้าม 21 เซลล์เลือกตำแหน่ง 21 แล้วข้าม 14 " +"เฉพาะเซลล์ที่ก่อให้เกิดผลรวม รหัสอักขระที่จำเป็นคือ 55 " +"ซึ่งหมายความว่าอักขระคือ 7" + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "ทำตามการตรวจสอบซีทีเอฟ" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "คัดลอก" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "คัดลอกตรวจสอบซีทีเอฟที่อ่านได้" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "คัดลอก" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "คัดลอกกู้คืนธง" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "คัดลอกคำสั่งแก้" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}บ้าน{ph1} / {ph2}โชว์เคส{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "กรณีศึกษา · DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "การฟื้นฟู DX-Ball{ph0}จากปฏิบัติการของ" + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"เป้าหมายคือรุ่นคที่รักษาได้ในปี 1996 Windows เกม REA " +"ช่วยให้ตัวแทนตรวจสอบต้นฉบับหนึ่งฟังก์ชั่นในเวลา" + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows ไอ386·ซี · REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"หนึ่งฟังก์ชั่นจากปฏิบัติการเพื่อตรวจสอบซี REA " +"งานธุรการงานทรัพยากรบุคคล>งานธุรการงานการจัดการทั่วไปงานธุรการงานทรัพยากร " +"{ph0}เปิดรูป{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "กรณีศึกษา" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}โครงการ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}แพนเสียง{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}การตรวจสอบผลลัพธ์{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}ทำงานต่อ{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "รักษาฟังก์ชั่นค" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "เปรียบเทียบกับรหัสเดิม" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "ฟังก์ชั่นที่มีการจับคู่ไบต์ที่รวบรวมไว้" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"ด่านโครงการ:7 ตุลาคม 2026 {ph0}บัญชีแยกประเภท{ph1} · " +"{ph2}ความคุ้มครองการทดสอบ{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "โครงการเพื่อให้ห่างไกล" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"กู้คืนรหัสครอบคลุมคณะกรรมการและการจัดการทรัพยากรฮิตอิฐภาพเคลื่อนไหวอนุภาคแ " +"สร้างปัจจุบันให้สาธารณูปโภคการตรวจสอบและห้องสมุดการวิเคราะห์ " +"ทำงานในเกมที่สามารถเล่นได้อย่างต่อเนื่องกับลูกและพายฟิสิกส์,การจัดการพลังงานขึ้นแ" +" Windows บูรณาการ" + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "การหาการคำนวณตำแหน่งเสียงซ้าย/ขวา" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"เมื่ออิฐถูกตีตำแหน่งแนวนอนของมันจะถูกส่งผ่านไปยังรหัสเสียง " +"การตรวจสอบที่จำเป็นในการกู้คืนวิธีการที่หน้าจอประสานงานจะกลายเป็นค่าแพนซ้าย/ขว" + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อหาวิธีการ DX-Ball คำนวณเสียงแพน " +"อธิบายการคำนวณและแสดงรหัส{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"พร้อมท์ตัวอย่างสำหรับตัวแทนการเขียนโค้ดของคุณพร้อมใช้งานแบบโลคัล " +"การสืบสวนด้านล่างแสดงให้เห็นว่า REA " +"แบบสอบถามและหลักฐานที่อยู่เบื้องหลังคำตอบ" + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"ตัวแทนที่ใช้ REA การตรวจสอบฟังก์ชั่นตามโทรอิฐตีและอ่านค่าคงที่จากปฏิบัติการ " +"ผลลัพธ์เหล่านั้นให้ป้อนข้อมูลและเลขคณิตที่จำเป็นในการเขียนฟังก์ชันคด้านล่าง" + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"ผลการวิเคราะห์ครั้งแรกสำหรับฟังก์ชั่นสำหรับ {ph0} รวมรหัสปลอมประกาศ {ph1} " +"และโทร {ph2}. " +"มุมมองการเรียนการสอนแสดงให้เห็นการป้อนข้อมูลสแต็คและการดำเนินงานจุดลอยตัว " +"ความขัดแย้งนั้นทำให้ตัวแทนมีเหตุผลที่ชัดเจนที่จะสืบสวนต่อไป" + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "มุมมองแยกคอมไพเลอร์แรก" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"ผลลัพธ์แสดงการเรียกร้องการแปลง " +"อ่านคำแนะนำด้านล่างแสดงให้เห็นการป้อนข้อมูลและการให้อาหารการคำนวณที่เรียก" + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "สามคำถามตอบผ่าน REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "กู้คืนข้อมูลที่ขาดหายไป" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"นะนำควบคู่ไปกับรหัสปลอมและฟังก์ชั่นการเรียก ที่นี่, {ph0} " +"แสดงการป้อนข้อมูลจำนวนเต็มที่ขาดหายไปจากมุมมองแยกคอมไพเลอร์" + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "ติดตามผู้โทรที่จะเข้าใจการป้อนข้อมูล" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA ระบุสายนี้ในผลแรก คำแนะนำก่อนหน้านี้ขนาด {ph0} โดย 30;การเพิ่ม 20 " +"จะช่วยให้การประสานงานหน้าจออิฐ, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "อ่านค่าที่อยู่เบื้องหลังที่อยู่หน่วยความจำ" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"ไบต์ที่ส่งคืนจะสร้างค่าคงที่ทางคณิตศาสตร์ทั้งสองและขนาดแพนเริ่มต้น " +"ตัวแทนตอนนี้มีค่าที่จำเป็นสำหรับนิพจน์ค" + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "จาก REAการค้นพบของค" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"ทำตามห้าขั้นตอนด้านล่าง. การเลือกแต่ละไฮไลท์คำแนะนำเดิมและสายคที่พวกเขาแจ้ง" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} อินพุต" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} คูณ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} ลบ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} เครื่องชั่ง" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} การคืนสินค้า" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "ต้นฉบับ 86·ข้อความที่ตัดตอนมา" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "สร้างขึ้นใหม่ค" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01*อ่านข้อมูล{ph1} มุมมองการเรียนการสอนใน REAฟังก์ชั่นของผลการอ่าน " +"{ph2} และใช้ {ph3} ในการโหลดจำนวนเต็ม ต่อไปนี้โทรผ่าน REA " +"กำหนดหน้าจอพิกัดความหมายของพารามิเตอร์ค {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02*คูณด้วย 1.5625{ph1} {ph2} อ่านคู่ที่ {ph3}. ไบต์ที่ส่งคืนโดย REAของ " +"{ph4} ถอดรหัสไปที่ {ph5} คใช้ค่าคงที่เดียวกัน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03·ลบ 500.0.{ph1} {ph2} อ่านคู่ที่ {ph3}. REAของไบต์ผลถอดรหัส {ph4} " +"ขยับศูนย์การคำนวณเพื่อประสานงานหน้าจอ {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04*ใช้สเกลที่เก็บไว้{ph1} ที่สอง {ph2} อ่าน {ph3}. " +"ที่ทั่วโลกถูกตั้งชื่อ {ph4} ในแหล่งที่มาของการบำรุงรักษา " +"REAของไบต์ที่สองอ่านกำหนดค่าเริ่มต้นของ {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05*กลับจำนวนเต็ม{ph1} โทรที่ {ph2} ถึง {ph3},ระบุใน REAผลของแคลลี " +"าการปวดหลังและอาการบวม {ph4};เปรียบเทียบต้นฉบับ-86 เทียบตรวจสอบค่าที่ส่งคืน" + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"ข้อความที่ตัดตอนมาประกอบเลือกป้อนข้อมูล,คณิตศาสตร์และคำแนะนำกลับมา " +"รายการเต็มรูปแบบด้านล่างนอกจากนี้ยังมีร้านค้าแทรกแซงและการตั้งค่าฟังก์ชั่นและการ" + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "ประกอบเต็มรูปแบบและหลักฐานสนับสนุน" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA ผล·0*406400-0*40643" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "สิ่งที่อุปกรณ์โทร" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"ฟังก์ชั่นอิฐตีที่ {ph0} เครื่องชั่งน้ำหนักของกระเบื้องประสานงานโดย 30 เพิ่ม " +"20 แล้วผลักดันมันก่อนที่จะเรียก:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "สิ่งที่ข้อมูลอ่านสร้าง" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REAไบต์อ่าน,ถอดรหัสเป็นคู่เล็กๆน้อยๆเอนเดียน" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "ที่อยู่" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "ค่า" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "ใช้สำหรับ" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "คูณครั้งแรก" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "การลบ" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} ในตอนแรก" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "ขนาดกระทะที่เก็บไว้" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"บันทึกด้วย REA 4.1.0 สำหรับแฮตรึง DX-Ball 1.07 เป้าหมาย " +"บันทึกการตรวจสอบที่เชื่อมโยงเก็บรหัสหลักฐาน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}แหล่งบำรุงรักษา{ph1} · {ph2}บันทึกการตรวจสอบและการอ้างอิงหลักฐาน{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "การตรวจสอบฟังก์ชั่นการกู้คืน" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"ฟังก์ชั่นการกู้คืนผ่านการตรวจสอบสอง:ค่าส่งคืนตรงกับต้นฉบับและไบต์ที่คอมไพล์ตรงกับปฏิ" + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3,205 กรณีพฤติกรรม" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"86 " +"และเปรียบเทียบค่าตอบแทนของมันกับซีที่เก็บรักษาไว้มันครอบคลุมทุกตำแหน่งจำนวนเต็มตั้งแต่" +" 0 ถึง 640 ที่ห้าเครื่องชั่งแพน:0,0.5,1,20 และ -1" + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 ไบต์ที่ตรงกัน" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"4.0 " +"รีเพลย์คอมไพเลอร์ตรงกับฟังก์ชันที่สมบูรณ์หลังจากใช้การย้ายที่ตรวจสอบและตรวจสอบค่า" + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"ในระดับ 1 คำนวณคืน -500 ที่ขอบด้านซ้าย 0 ที่ศูนย์และ 500 ที่ขอบด้านขวา " +"ส่วนถัดไปของการทำงานเสียงคือการบูรณาการค่าที่มีแบ็กเอนด์เสียงของเกม" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}อ่านรายละเอียดรีเพลย์คอมไพเลอร์{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "ต่อการสืบสวน" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"วิธีการเดียวกันจะถูกใช้สำหรับการปรับปรุงอนุภาคคิวการระเบิดและการสร้างโบนัส:ตรวจ" + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"เพื่อตรวจสอบฟังก์ชั่นเสียงแพนด้วยตัวคุณเองให้ทำตาม DX-Ball " +"คำแนะนำในการติดตั้งของโครงการและจัดหาเป้าหมายเดิมที่ตรงกัน แล้วเรียกใช้:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "ใน DX-Ball ชำระเงิน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0}DX-Ball " +"ที่เก็บข้อมูล{ph1}{ph2}แหล่งที่มาปัจจุบันความคืบหน้าและการตั้งค่าท้องถิ่น{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0}REA " +"เวิร์กโฟลว์การวิเคราะห์{ph1}{ph2}ทำตามการคำนวณ,แล้วใช้วิธีการเดียวกันกับไบนารีของคุณเอง.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}อนุภาคและการผลิตโบนัส{ph1}{ph2}การสืบสวนขนาดใหญ่ในรัฐคิวและพิกเซลเขียน{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball วิศวกรรมย้อนกลับ:เสียงแพน — REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"ทำตาม DX-Ball ฟื้นฟูจากการวิเคราะห์ไบนารีผ่าน REA การทดสอบ 86 " +"และการจับคู่ไบต์ฟังก์ชันที่รวบรวมไว้" + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "DX-Ball การตรวจสอบเสียงแพน;เลื่อนในแนวนอนบนหน้าจอขนาดเล็ก" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"ดีเอ็กซ์บอลตรวจสอบฟังก์ชั่น 0*00406400 REA. อิฐตีโทรอุปกรณ์ 20 บวก 30 " +"ครั้งไทล์_เอ็กซ์คำแนะนำในการโหลด,คูณด้วย 1.5625,ลบ 500.0,ใช้แพนสเกลและกลับ " +"86 ใน 3,205 กรณีและโดยคอมไพเลอร์รีเพลย์ 4.0 ที่ตรงกับ 63 ไบต์" + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball กรณีศึกษาการฟื้นฟู" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "คัดลอกตัวอย่างพรอมต์" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "ติดตามการคำนวณตำแหน่งเสียงซ้าย/ขวา" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "คัดลอกประกอบต้นฉบับ" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "คัดลอกฟังก์ชั่นเสียงแพน" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "คัดลอกประกอบเสียงแพนที่สมบูรณ์" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "คัดลอกDX-Ballคำสั่งการวิเคราะห์" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}บ้าน{ph1} /ตู้โชว์" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA กรณีศึกษา" + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "หุ่นยนต์,เกมส์, Electron รหัส,ตัวเลขและผลการตรวจสอบ" + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "แอนดรอยด์ · APK การวิเคราะห์" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "วิธีที่ผู้รับรองความถูกต้องสร้างรหัสล็อกอิน" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"ค้นหา Aegisการคำนวณรหัสหกหลักในการเปิดตัวของ APK. ติดตามวิธีการสร้างด้วย REA" +" แล้วย้ายนาฬิกาสาธิตเพื่อดูว่าทำไมรหัสการเปลี่ยนแปลงทุก 30 วินาที" + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "อ่านกรณีศึกษาหุ่นยนต์" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "การวิเคราะห์ของโปรแกรมเครื่องรหัส" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "คีย์ข้อมูล,การพิมพ์ดีดคัดลอก" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"ตรวจสอบความท้าทายที่ลดลงง่ายด้วย REA. " +"ค้นหาฟังก์ชั่นการตรวจสอบของเปิดหน้ากากและผลรวมเป็นสมการแล้วตรวจสอบธงแก้ไข" + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "อ่านกรณีศึกษาซีทีเอฟ" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "พื้นเมือง*ฟื้นฟู" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ballการคำนวณเสียงแพน" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"กู้คืนการคำนวณเสียงกระทะจาก 1996 Windows เกม " +"REAล็กการตรวจสอบกับพฤติกรรมเดิมและทั้งหมด 63 ไบต์ที่รวบรวม" + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "อ่าน DX-Ball กรณีศึกษา" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron*การติดตามคุณลักษณะ" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "ยังไง Notion คัดลอกข้อความและเอชทีเอ็ม" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"ออกแบบกราฟิก,ออกแบบโลโก้ Notionบรรจุ JavaScript. " +"การป้องกันไวรัสมัลแวร์และอุปกรณ์ที่หายไปสำหรับมาร์ทโฟนและแท็บเล็" + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "อ่าน Notion กรณีศึกษา" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98ดอส*ฟื้นฟู" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "ยังไง TH04 มีจุดมุ่งหมายแหวนกระสุน" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"ตรวจสอบผู้ช่วยมุม 16 บิตเดิมด้วย REA. " +"นการประสานงานกับแถวคอ่านแล้วดูว่าพวกเขาผลิตแหวนที่มุ่งเป้าไปที่ผู้เล่น" + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "อ่าน TH04 กรณีศึกษา" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "คำแนะนำทีละขั้นตอน" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"คำแนะนำเดินผ่านการคำนวณพื้นเมืองและ Electron การส่งออกและคำขอเบราว์เซอร์ " +"แต่ละคนเริ่มต้นด้วยพรอมต์และเป้าหมายที่เป็นรูปธรรม" + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "อ่านคำแนะนำ" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "กรณีศึกษาวิศวกรรมย้อนกลับ — REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"ทำตาม REA การตรวจสอบผ่านรหัส,ตัวเลขและการสาธิต:การตรวจสอบหุ่นยนต์, DX-Ball, " +"Notion, TH04 และนักตรวจสอบธงขาลง" + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}บ้าน{ph1} / {ph2}โชว์เคส{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "กรณีศึกษา · Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "ยังไง Notion สำเนา{ph0}ข้อความและเอชทีเอ็ม" + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"ติดตามการโทรจากคลิปบอร์ด " +"Notionการเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ,การเขียนเนื้อหา " +"Electronนักเขียนคลิปบอร์ด" + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notionพื้นที่ทำงาน 7.6.1·JavaScript·REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "สะพานภายใน Notionแพ็คเกจเดสก์ท็อป" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01·หน้าหันหน้าไปทางเอพีไอ{ph1} {ph2}{ph3}{ph4} " +"{ph5}พรีโหลดเปิดเผยวิธีการที่เรียกว่า{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02*โหลดกระดาษห่อ{ph1} {ph2}{ph3}{ph4} " +"{ph5}กระดาษห่อส่งช่องและอาร์กิวเมนต์{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03·ตัวจัดการกระบวนการหลัก{ph1} {ph2}{ph3}{ph4} " +"{ph5}ผู้รับตรวจสอบว่าหน้าใดส่งไป{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04·คลิปบอร์ดระบบ{ph1} {ph2}{ph3}{ph4} {ph5}Electron " +"การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "ช่องทางหนึ่งร่วมทั้งสองฝ่าย: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"รหัสที่บรรจุใช้ช่องเดียวกันในการโหลดและกระบวนการหลัก การแก้ไขห่อเผยให้เห็น " +"Electron โทรตามชื่อพวกนั้น" + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "กรณีศึกษา" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}ตามสะพานคลิปบอร์ด{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}รักษาโครงสร้างของบล็อก{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}ตัวอย่างและแหล่งที่มาเพิ่มเติม{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "การดำเนินการคัดลอกไปที่ไหน?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"หน้าจะเห็นวิธีการที่เรียกว่า {ph0}. การดำเนินงานในการโหลดเป็นเสื้อคลุมห่อ " +"คำถามที่มีประโยชน์คือสิ่งที่กระดาษห่อส่งและรหัสที่ได้รับมัน" + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อติดตามวิธีการ Notion อร์ดระบบ " +"แสดงรหัสในแต่ละขั้นตอน{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"ตัวอย่างพร้อมท์ด้วย " +"Notionแพคเกจโปรแกรมท้องถิ่นที่มีให้ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA ค้นหาตำแหน่งที่จะเริ่มต้นการอ่าน" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"การวิเคราะห์โหลดพรีโหลดแท็บด้วย REA การเรียกที่ส่งคำขอไอพีซี " +"การค้นพบทั้งสองมาพร้อมกับช่วงแหล่งที่มาในกลุ่มย่อ:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA ผลการวิจัย→สองสถานที่ที่จะเปิด" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"เขตข้อมูลที่เลือกจากสด {ph0} ผลลัพธ์ Notionแท็บโหลดล่วงหน้าบันทึกด้วย REA " +"4.1.0. ตำแหน่งใช้บรรทัดของชุดเดิมและคอลัมน์ตามศูนย์" + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ,การเขียนบทความใหม่,การเขียน " +"{ph0}. อุปกรณ์เว็บไซต์โทร {ph1}. " +"ชื่อนั้นทำให้ตัวแทนบางสิ่งบางอย่างที่แม่นยำในการค้นหาในกลุ่มหลัก. " +"สี่ข้อความที่ตัดตอนมาด้านล่างแสดงเส้นทางที่เชื่อมต่อ." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "สี่ชิ้นสั้นของรหัส" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"ง่ายจากบรรจุ JavaScript มีชื่อตัวแปรที่อ่านได้ " +"สมาชิกที่ไม่เกี่ยวข้องจะถูกละเว้น" + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"สมาชิกนี้ระบุชื่อช่อง การดำเนินงานของ {ph0} " +"บอกเราว่าคำขอออกจากกระบวนการของหน้าเว็บอย่างไร" + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "แก้ไขกระดาษห่อของโหลด" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"ฟังก์ชั่นกลับส่งต่ออาร์กิวเมนต์ผ่าน Electronคำขอและการตอบสนองของไอพีซี " +"ตอนนี้เราสามารถมองหา {ph0} ในด้านกระบวนการหลัก" + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "ตรวจสอบวิธีการลงทะเบียนผู้รับ" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"กระบวนการหลักใช้กระดาษห่ออื่น มัน {ph0} วิธีการลงทะเบียน {ph1} " +"รับสัญญาณสำหรับช่องทางที่" + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "ค้นหาการเขียนและการตรวจสอบผู้ส่ง" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"นี่คือจุดหมายปลายทาง หลังจากตรวจสอบผู้ส่งแล้วตัวจัดการจะส่งข้อมูลที่ให้มา " +"Electronคลิปบอร์ดเอพีไอ " +"ช่องและตัวห่อที่แก้ไขแล้วสองตัวเชื่อมต่อวิธีการเปิดเผยกับสายนี้" + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "บล็อกที่ถูกคัดลอกเก็บโครงสร้างไว้ได้อย่างไร" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Notionแก้ไขข้อความ {ph0}. " +"การป้องกันไวรัสในเชิงรุกและการรักษาความปลอดภัยที่จะไปมือถือด้วยความมั่นใจ" + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "เชื่อมโยงไปยังบล็อกข้อมูลที่บันทึกไว้" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "อ่านรหัสเอชทีเอ็มแอล" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "ค้นหารหัสท้องถิ่นเดียวกัน" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "คืนค่า Notion บล็อกข้อมูล" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"ข้อความและรหัสตัวอย่าง " +"การทดสอบโมดูลที่บันทึกไว้คืนค่าข้อมูลบล็อกเมื่อตรงกับรหัส;รายการเก่าส่งกลับเฉพาะข้อค" + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"เมื่อวาง, Notion ตรวจสอบกับสำเนาที่บันทึกไว้ " +"รหัสที่ตรงกันจะคืนค่าข้อมูลที่ถูกบล็อก" + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "รูปแบบคลิปบอร์ดที่บันทึกจากเนื้อหาเว็บแคชเมื่อวันที่ 13 กรกฎาคม 2026" + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "ตัวอย่างและแหล่งที่มาเพิ่มเติม" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "อีกตัวอย่างหนึ่ง:ตารางยอด" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion วิเคราะห์ยอดรวมลงในข้อมูลบล็อก " +"ตัวอย่างนี้แสดงให้เห็นว่าตารางกลายเป็นแถวส่วนหัวและข้อมูล" + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "ตารางผ่าน Notionวิเคราะห์ยอดรวมของ" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "ผลลัพธ์ที่บันทึกจากตัวแยกยอดรวม ตารางจะกลายเป็นแถวและเซลล์" + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "เส้นทางอื่น:การเชื่อมต่อแบบออฟไลน์" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Notionคำขอแสดงผลของ {ph0} ผ่านไอพีซี " +"กระบวนการหลักสร้างแชแนลข้อความและให้พอร์ตหนึ่งไปยังตัวแสดงผลและอื่นๆไปยังกระบ" +" ชุดคำสั่งที่ตามมาและผลการเดินทางผ่านพอร์ตที่" + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"ต่อไปนี้แฮนด์ออฟนี้อธิบายที่ทำงานฐานข้อมูล,และทำไมการติดตามเพียงการร้องขอไอพีซีเ" + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "แหล่งที่มาและวิธีการอ่านข้อความที่ตัดตอนมา" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"สะพานคลิปบอร์ดมาจาก Notion สก์ท็อป 7.6.1 ของ {ph0}:โหลดแท็บล่วงหน้าและ " +"{ph1}. " +"ข้อความที่ตัดตอนมาขยายชื่อตัวแปรที่ย่อและละเว้นรหัสที่ไม่เกี่ยวข้อง;ผู้ช่วยตรวจสอบผู้ส่ง" +" {ph2} โทรมา" + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"ตัวอย่างคลิปบอร์ดเสมือนและรวมยอดมาจากเนื้อหาเว็บแคชเมื่อวันที่ 13 กรกฎาคม " +"2026 รวมถึงโมดูล {ph0}, {ph1}, {ph2} และ {ph3}. " +"สินทรัพย์เหล่านั้นมีเวอร์ชั่นของตัวเอง " +"โพรบที่บันทึกไว้ดำเนินการแยกโมดูลและสายรัดขนาดเล็ก;ผลของพวกเขาอธิบายหัววัดเหล่" + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"ร REA " +"ผลลัพธ์ที่แสดงที่นี่คือการวิเคราะห์ที่มุ่งเน้นการโหลดพรีโหลดแท็บที่บันทึกไว้ที่มีการเผยแพร่" +" REA 4.1.0 แพคเกจ " +"การบริหารจัดการโปรเจค,วิจัย,การวิจัยตลาด,การวิจัยอินเทอร์เน็ต " +"สมาชิกคลิปบอร์ดและรับจับคู่มีการเชื่อมต่อโดยการอ่านการใช้งานห่อของพวกเขาในแพค" + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"ตัวอย่างยอดรวมใช้โมดูลแยก {ph0}. " +"การทดสอบโมดูลที่บันทึกไว้แสดงว่าทั้งหน้าและตัวกรองแชทจะเก็บตารางนี้ไว้ " +"วาง/นำเข้า,การรวมโครงสร้างและการวิเคราะห์ไอ/แชทมีจุดเข้าที่แยกต่างหากและรูปแบบ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0}JavaScript คู่มือการสมัคร{ph1}{ph2}ตามขนาดเล็ก Electron " +"คุณสมบัติการส่งออกของแอพลิเคชัน{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0}DX-Ball " +"การฟื้นฟู{ph1}{ph2}ทำตามคำแนะนำพื้นเมืองไปยังฟังก์ชั่นคตรวจสอบ{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron วิศวกรรมย้อนกลับ:คลิปบอร์ด — REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"ทำตาม Notionของคลิปบอร์ดเอพีไอผ่าน " +"Electronโหลดของห่อไอพีซีและกระบวนการหลักที่มีข้อความที่ตัดตอนมารหัสสั้นและดูที่รูปแบบคลิปบอ" + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron กรณีศึกษา" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "คัดลอก Notion พรอมต์การวิเคราะห์" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "คัดลอก Notion โหลดข้อความที่ตัดตอนมา" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "คัดลอก Notion เรียกตัดตอนเสื้อคลุมห่อ" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "คัดลอก Notion ตัวจัดการตัดตอน" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "คัดลอก Notion ข้อความที่ตัดตอนมาจากคลิปบอร์ด" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "การกู้คืนข้อมูลคลิปบอร์ดที่อุดมไปด้วยในการวาง" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "ข้ามไปที่เนื้อหา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}บ้าน{ph1} / {ph2}โชว์เคส{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "กรณีศึกษา*ทูโฮ 4:เรื่องโลตัสแลนด์" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "การฟื้นฟู TH04ของ{ph0}รูปแบบกระสุน" + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"แหวนของกระสุนเริ่มต้นด้วยการคำนวณมุมสั้น ใช้ REA " +"รวจสอบฟงกชันดอสดั้งเดิมจากนั้นปฏิบัติตามคำแนะนำของฟงกชันดอสที่สามารถอ่านได" + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 ·ดอส 16 บิต·ซีดีและแอสเซมบลี" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "ดู TH04 การฟื้นฟู" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "จากคำแนะนำเดิมไปยังแหล่งที่มาที่ตรวจสอบ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01*เกมเดิม{ph1}{ph2}กเขาเอ็กเซส{ph3}{ph4}ร PC-98 " +"ปฏิบัติการและผู้ช่วยกระสุนของมุม{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02·ตรวจสอบด้วย " +"REA{ph1}{ph2}คำแนะนำ+อ้างอิง{ph3}{ph4}ตรวจสอบโค้ดดอสโหลดและอ่านการคำนวณมุมจากปฏิบัติการ{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03·อ่านซี++{ph1}{ph2}พื้นที่จุดมุ่งหมาย ro " +"หมุน{ph3}{ph4}เชื่อมต่อการดำเนินการแต่ละครั้งเพื่อการฟื้นฟูการบำรุงรักษา{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04·ตรวจสอบแหล่งที่มา{ph1}{ph2}2,139 " +"ไบต์ที่ตรงกัน{ph3}{ph4}ตรวจสอบคอมไพเลอร์ที่บันทึกไว้ครอบคลุมรหัสรุ่นกระสุนที่ประกอบด้วยตัวช่วยนี้{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA ส่งกลับรหัสต้นฉบับและหลักฐานการวิเคราะห์ ร TH04 " +"โครงการอุปกรณ์การบำรุงรักษาแหล่งที่มาและคอมไพเลอร์ตรวจสอบ" + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "กรณีศึกษา" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}แหวนกระสุน{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}อะไรนะ REA การคืนสินค้า{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}การชุมนุมที่จะค++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}การตรวจสอบแหล่งที่มา{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}โครงการเต็ม{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "วิธีแหวนเล็งไปที่ผู้เล่น" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"การโจมตีของเอลลี่ขอแหวนเล็งที่มีจำนวนเริ่มต้น 16 " +"หนึ่งผู้ช่วยคำนวณทิศทางของกระสุนแต่ละ " +"แหวนเดียวกันสามารถเผชิญกับทิศทางที่คงที่หรือหันไปทางผู้เล่น" + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}ตัวแทนการเข้ารหัสของคุณ" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "คัดลอก" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อหาวิธีการ TH04 " +"สร้างแหวนของกระสุนและมีจุดมุ่งหมายที่ผู้เล่น " +"อธิบายการคำนวณและแสดงรหัส{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"พร้อมท์ตัวอย่างด้วยการเช็คเอาท์ที่ปฏิบัติการและการฟื้นฟูเดิมที่มีอยู่ภายใน" + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 เก็บหมุนตามเข็มนาฬิกาเต็มรูปแบบใน 256 หน่วยมุม สำหรับ 16 " +"กระสุน,แต่ละดัชนีเพิ่ม 16 หน่วย: {ph0}. " +"การเพิ่มทิศทางของผู้เล่นหมุนตำแหน่งเหล่านั้นเข้าด้วยกัน" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"ภาพประกอบของคณิตศาสตร์มุมกู้คืนสำหรับการนับ 16 ทิศทางผู้เล่น 40 " +"และการหมุนแม่แบบ 0 {ph0}เปิดรูป{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "แม่แบบการยิงในแหล่งที่มาที่กู้คืน" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "การโจมตีแหวนของเอลลี่*ที่มาตัดตอนมา" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"เส้นเหล่านี้เลือกรูปแบบก่อนที่จะปรับความยากลำบากและประสิทธิภาพการทำงาน " +"{ph0}อ่านแหล่งที่มาของการโจมตี{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "อะไรนะ REA การคืนสินค้า" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"เราตรวจสอบ {ph0} ฟังก์ชั่นที่กำหนดความเร็วและมุมของกระสุน REA " +"ส่งคืนคำแนะนำของรหัสปลอมและการอ้างอิง สามส่วนของผลลัพธ์นั้นอธิบายรูปแบบ" + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "ตรวจสอบภาพก่อนอ่านรหัส" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"ตรวจสอบผูกโค้ดที่โหลดและระเบียนการย้ายไปยังปฏิบัติการที่ให้มา " +"เส้นทางด้านบนจะสั้นลงสำหรับการแสดงผล" + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "อ่านแหวนคูณและหาร" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} ถือดัชนีกระสุน กะคูณด้วย 256 แล้วส่วนที่ใช้นับอ่านจาก {ph1}. " +"ชื่อแหล่งที่มาที่เก็บรักษาไว้ {ph2}. ลำดับที่สมบูรณ์ปรากฏด้านล่าง" + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "หาที่รูปแบบหันไปทางผู้เล่น" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"การเรียนการสอนดำเนินการเปิดเผยความแตกต่างสองประสานงานและผู้ช่วยทิศทาง " +"มูลค่าผลตอบแทนของมันจะถูกเพิ่มในมุมแหวนสัมพัทธ์ " +"ชื่อแหล่งที่มาทำให้ที่อยู่เหล่านั้นสามารถอ่านได้; REA " +"ช่วยให้ตัวแทนตรวจสอบการดำเนินงานเดิมที่อยู่เบื้องหลังพวกเขา" + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "จากการชุมนุมที่จะอ่านค++" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"เลือกขั้นตอนเพื่อให้ตรงกับคำแนะนำเดิมกับการคำนวณมุม " +"สรุปนี้เป็นไปตามเส้นทางที่มุ่งแหวน;แหล่งที่มาเต็มรูปแบบยังจัดการแพร่กระจาย,กองและรูป" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} ดัชนี" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} อวกาศ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} เล็ง" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} หมุน" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} ร้านค้า" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA *คำแนะนำเดิม 16 บิต" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Reอ่านได้ค*สรุปเล็งแหวน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01*อ่านดัชนีกระสุน{ph1} อาร์กิวเมนต์สแต็คถูกโหลดลงใน {ph2}. " +"ในวงแหวนกระสุน 16 ดัชนีสมาชิกนี้ทำงานจาก 0 ถึง 15" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02*พื้นที่ทิศทางรอบเปิดเต็ม{ph1} {ph2} คูณด้วย 256 " +"นับเป็นศูนย์-ขยายเป็นคำแล้ว {ph3} หารผลิตภัณฑ์ด้วยจำนวนที่ นับ 16 " +"แต่ละดัชนีก้าวหน้า 16 หน่วยมุม" + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03*เพิ่มทิศทางของผู้เล่น{ph1} สองรูปแบบการลบพิกัดผู้เล่นลบต้นกำเนิด " +"ผู้ช่วยทิศทางกลับมุมใน {ph2};เพิ่มมันจะเปิดแหวนทั้งที่มีต่อผู้เล่น" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04*เพิ่มการหมุนของรูปแบบ{ph1} {ph2} เพิ่มมุมแม่แบบ " +"แม่แบบเริ่มต้นของเอลลี่ชุดให้เป็นศูนย์;รูปแบบอื่นๆสามารถใช้ผู้ช่วยเดียวกันกับการหมุน" + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05*เก็บมุมสุดท้ายไว้ในไบต์เดียว{ph1} ร้านเขียน {ph2} ไปยังสนามวางไข่มุม" +" ค่าห่อหลังจาก 255 เช่นเดียวกับการหล่อไบต์ที่ไม่ได้ลงนามไม่ " +"แหล่งที่มาโดยรอบยังแปลงมุมนี้และความเร็วเป็นความเร็ว" + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"การชุมนุมเลือกสาขาเล็งแหวน,การคำนวณจุดมุ่งหมายและเก็บสุดท้าย " +"บทความนี้ไม่มีการอ้างอิงจากเอกสารอ้างอิงหรือแหล่งข้อมูลโปรดช่วยพัฒนาบทความนี้โด" +" " +"ตรวจสอบคอมไพเลอร์ด้านล่างนำไปใช้กับแหล่งที่มาของการบำรุงรักษาในโครงการที่เชื่" + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "อ่านแหวนที่เก็บรักษาไว้และจุดมุ่งหมาย" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}แมโครแหวน{ph1} · {ph2}จุดมุ่งหมายและแหล่งที่มาของความเร็ว{ph3} · " +"{ph4}การแสดงมุม{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "การตรวจสอบแหล่งที่มาที่บำรุงรักษา" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"ร TH04 " +"การตรวจสอบการบันทึกของโครงการรวบรวมรหัสรุ่นกระสุน,รวมทั้งผู้ช่วยนี้,กับเทอร์โบตรึงค" +" 44.0" + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 ไบต์ที่ตรงกัน" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "รหัสรุ่นกระสุนที่คอมไพล์ตรงกับส่วน 2,139 ไบต์ของปฏิบัติการเดิม" + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "สองสร้างสะอาด" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"สองรุ่นที่แยกต่างหากผลิตไบต์ที่ตรงกันเดียวกัน " +"แฮชอินพุตที่บันทึกไว้ตรงกับแหล่งที่มาที่เก็บรักษาไว้ที่แสดงที่นี่" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "บันทึกใน 3 ตุลาคม 2026. {ph0}อ่านการตรวจสอบคอมไพเลอร์{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "อัตลักษณ์เป้าหมายและขอบเขตการวิเคราะห์" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "เป้าหมายเดิม" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0},156,258 ไบต์,เมกะไบต์" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "รายการผู้ช่วย" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} ใน REAภาพโหลดของ" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "ชดเชยแฟ้มต้นฉบับ" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0},ส่งคืนโดย {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "การตรวจสอบรหัสที่บันทึกไว้" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA4.1.0·7 ตุลาคม 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"ตรวจสอบคอมไพเลอร์ครอบคลุมส่วนโค้ดเพิ่มกระสุนที่สมบูรณ์รวมถึงตัวช่วยนี้ " +"พวกเขายังเปรียบเทียบการมีส่วนร่วมของแผนที่และการย้ายที่ทับซ้อนกัน" + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA ตรวจสอบภาพโหลดแบบคงที่ที่ส่วนโหลด {ph0}. " +"ที่อยู่ของมันอธิบายภาพการวิเคราะห์นั้น ผลฟังก์ชันรายงาน 503 " +"ไบต์ร่างกายในสองช่วงข้ามช่วง 517 ไบต์;คำแนะนำที่เลือกข้างต้นอยู่ในช่วง" + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"ชื่อแหล่งที่มาและการตรวจสอบคอมไพเลอร์มาจาก TH04 ด่านตรวจ {ph0}. " +"การสังเกตการฟื้นฟูก่อนหน้านี้ใช้สคริปต์การวิเคราะห์ของตัวเองของโครงการ;หน้านี้จะเพิ่" +" REA การตรวจสอบของเป้าหมายเดิมเดียวกัน " +"ตัวตนของเกมที่ให้มาถูกตรึงโดยที่ประจักษ์พื้นที่เก็บข้อมูลที่มีแหล่งที่มาที่เก่าแก่การถ่ายโอน" + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"รูปที่แสดงให้เห็นถึงการคำนวณมุม การควบคุมเต็มรูปแบบเกมระยะเวลาและ PC-98 " +"รวจสอบรันไทม์แยกต่างหากในโครงการฟื้นฟู" + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "เต็ม TH04 การฟื้นฟู" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"งการสร้างเกมสี่ผลิตภัณฑ์ดอสจากการบำรุงรักษาซีซีและการชุมนุม " +"นอกเหนือจากการสร้างกระสุน,แหล่งที่มาครอบคลุมขั้นตอนผู้บังคับบัญชา,การแสดงผล,การป้อ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}สำรวจ TH04 ที่เก็บข้อมูล{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}แหล่งกำเนิดกระสุน{ph1}{ph2}ผู้ช่วยที่สมบูรณ์ประเภทรูปแบบอื่นๆและการปรับแต่งแม่แบบ{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}สร้างและเรียกใช้คู่มือ{ph1}{ph2}มีทักษะในการสื่อสารการเจรจาต่อรองและการเจรจาต่อรอง" +" PC-98 เวิร์กโฟลว์จำลอง{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "{ph0}สถานะโครงการปัจจุบัน{ph1}{ph2}64 พอร์ต{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 การวิเคราะห์ทางวิทยาศาสตร์ — REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"ตรวจสอบ TH04ของเดิม 16 บิตรหัสดอสด้วย REA. " +"นของกระสุนมีระยะห่างและมุ่งเป้าไปที่ผู้เล่น" + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "ในหน้านี้" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04 กรณีศึกษารูปแบบกระสุน" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "คัดลอก TH04 ตัวอย่างพรอมต์" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "TH04 คงที่และมุ่งแหวนกระสุน;เลื่อนในแนวนอนบนหน้าจอขนาดเล็ก" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"สองแผนภาพของแหวน 16 กระสุน แหวนคงเริ่มต้นที่มุมศูนย์ " +"การเพิ่มทิศทางของผู้เล่น 40 " +"หมุนทุกทิศทางโดยจำนวนเดียวกัน;ไฮไลต์จุดกระสุนแรกที่มีต่อผู้เ " +"ทั้งคู่มีระยะห่าง 16 หน่วยหรือ 22.5 องศา" + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "คัดลอก TH04 เทมเพลตการยิง" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "ตาม TH04 การคำนวณวงแหวน" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "คัดลอก TH04 ตัดตอนมาประกอบ" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "สำเนาที่อ่านได้มุ่งเป้าแหวน-การคำนวณ" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "กลับขึ้นด้านบน" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "คัดลอก" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "คัดลอก" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "เลือก" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "รหัสคัดลอกไปยังคลิปบอร์ด" + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "รหัสที่เลือก ใช้แป้นพิมพ์ของคุณเพื่อคัดลอก" + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REAบGitHub({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "ระยะทาง {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "ตีแคคตัส ลองความเร็วอีก" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "พื้นที่หรือกระโดด↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "เล่นอีกครั้ง" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "เล่น" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "หยุดชั่วคราว" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "กดเล่นแล้วกระโดดข้ามแคคตัส" + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "ตีแคคตัส กดเล่นอีกครั้งหรือเปลี่ยนความเร็วและเริ่มต้นใหม่" + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "วิ่ง พื้นที่หรือกระโดดล้างแคคตัส" + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "หยุดชั่วคราว กดเล่นเพื่อดำเนินการต่อ" + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "ความเร็วคงที่: {speed}. พื้นที่หรือกระโดดล้างแคคตัส" + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "ความเร็วคงที่: {speed}. กดเล่นเพื่อลอง" + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "กู้คืนกฎ:เริ่มต้นที่ 6 จากนั้นเพิ่มขึ้นไปทาง 13" + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "ความเร็วคงที่: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"ย้อนกฎการกู้คืน " +"ทั้งหมดสี่ค่าตรงกับการตรวจสอบเดิมควบคุมเกมเมื่อปัดเศษถึงสามทศนิยม" + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"รีเพลย์แตกต่างจากค่าเดิมที่บันทึกไว้เกม " +"เปรียบเทียบกฎความเร็วและการตั้งค่าด้านบน" + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} วินาที" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} วินาทีบล็อกเวลา {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "ไม่มีการคำนวณแบบโต้ตอบในเบราว์เซอร์นี้ ตัวอย่างแสดงรหัสที่ 59 วินาที" + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "การตรวจสอบ…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "{passed} / {total} ตรวจสอบผ่าน(หกกรณีอ้างอิงที่หกและแปดหลัก)" + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "ไม่สามารถเรียกใช้การตรวจสอบอ้างอิง ลองอีกครั้ง" + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "นักวิเคราะห์คิดที่คอมพิวเตอร์" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "หนึ่งตรวจสอบเผยตัวละครตัวหนึ่ง" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"หน้ากากที่เจ็ดเลือกตำแหน่ง 21 เท่านั้นในตารางการป้อนข้อมูลหกโดยหก " +"รหัสอักขระของมันจะต้องเท่ากับ 55 ดังนั้นอักขระคือ 7 " +"มาสก์อื่นๆเลือกตำแหน่งที่แตกต่างกันและให้สมการต่อไป" + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "เช็คที่เจ็ด ฉลากเซลล์เป็นตำแหน่งอินพุตเริ่มต้นที่ 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "หน้ากากเข้ารหัส:-21,+1,-14,0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "ข้าม 21 เซลล์ เลือก 1 ข้าม 14 หยุดที่ 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "เพียงหนึ่งเซลล์ที่ก่อให้เกิดผลรวมนี้" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "ตำแหน่งที่ 21 ในธงต้องมี 7" + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "เลือก:หนึ่งเซลล์" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 หน้ากากให้ 26 สมการ" + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "แก้พวกเขาร่วมกันเพื่อหาธง" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball การสืบสวนเสียงแพน" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA ให้การเรียนการสอนโทรและไบต์อ่านหลักฐานสำหรับหนึ่ง DX-Ball ฟังก์ชั่น " +"ป้อนข้อมูลสแต็คคูณด้วย 1.5625,ชดเชยด้วย 500,ปรับขนาดและแปลงเป็นจำนวนเต็ม " +"คบำรุงรักษาจะถูกตรวจสอบในกรณีเดิม 3,205 เท่า 86 และรีเพลย์คอมไพเลอร์ 63 " +"ไบต์แยกต่างหาก" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "สแตก" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "ค่า x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "int" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "คืนค่า" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "ฟังก์ชันกู้คืน" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "โค้ด C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "อิฐถูกชน" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "ต้นฉบับ" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "เทียบ" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3,205 กรณี" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "บิลด์ VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "ตรง 63 ไบต์" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA กระแสการสืบสวน" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"ถามคำถามเกี่ยวกับเป้าหมายท้องถิ่น REA " +"ตรวจสอบและร่องรอยผ่านอะแดปเตอร์วิเคราะห์ท้องถิ่นส่งคืนหลักฐานและสนับสนุนคำถามติดตามตามตัวแทนของคุณอธิบายดำเนินการและการทดสอบ" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. ถาม" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "เอเจนต์ + ไฟล์" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "แอป / ไฟล์ / เว็บ" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. วิเคราะห์" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. อ่านหลักฐาน" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "โค้ด / อ้างอิง /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "ยังไม่รู้" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. ใช้ผลลัพธ์" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "เอเจนต์" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "อธิบาย / สร้าง / ลอง" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "เครื่องมือ" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "ตัววิเคราะห์" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "คำถามต่อไป" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04:ระยะห่างและเล็งแหวนของกระสุน" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"หมุนตามเข็มนาฬิกาเต็มรูปแบบมี 256 หน่วยมุม " +"กระสุนเริ่มจากมุมศูนย์สิบหกสามสิบสองผ่าน 240 " +"การเพิ่มทิศทางผู้เล่นตัวอย่างของสี่สิบเปลี่ยนทุกสิบหกทิศทางด้วยกัน;จุดกระสุนแรกที่ผู้เล่น" +" การหมุนแม่แบบเป็นศูนย์" + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "แหวนคงที่" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "กระสุนแรก:มุม 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "แหวนเล็ง" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "กระสุนแรก:ทิศทางผู้เล่น" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "จุด" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "ผู้เล่น" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "ระยะห่างเดียวกัน:256÷16=16 หน่วยมุม=22.5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "ตัวอย่าง" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "บล็อก" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "เริ่มต้น" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "คู่มือ" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "ซอร์สโค้ด" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "สัญญาอนุญาต MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "เข้าร่วมชุมชน" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "ติดตามบน X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA *เลือกแหล่งสคริปต์" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "ซอร์สโค้ด" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "เอาต์พุตรูปแบบที่คาดหวัง" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "การแนะนำ" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "ผู้โทร" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "ค่าคงที่" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "ฟังก์ชั่นค" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "ปุ่ม" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "พรีโหลดเอพีไอ" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "ไอพีซี" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSV แฟ้ม" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "คลิกของคุณ" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "คำขอจับ" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "ส่งออกสคริปต์" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REAผล·สรุปข้อความที่ตัดตอนมาจากไอพีซี" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA คำแนะนำ*0*406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA ข้อความที่ตัดตอนมา*0*411เอฟ5 บาท" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "REA ผลลัพธ์ไบต์*ตีความว่าเป็นคู่เล็กๆน้อยๆเอนเดียน" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "กู้คืนค*ตัดตอนมา" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "ดูว่า REA ทำงานอย่างไร ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "คู่มือการติดตั้ง" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "โชว์เคส→" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "การตั้งค่าที่เลือกจากสคริปต์ที่ตรวจสอบแล้ว" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "สรุปที่สามารถอ่านได้ของตัวจัดการ%" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA *เลือกคำแนะนำเดิม" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "รหัสผู้ประกอบการ·แหล่งที่มาของไมโครซอฟท์" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "ดูบทสนทนาซ่อนบทสนทนา" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "เจ้าหน้าที่→ REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA agent ตัวแทน·ผลลัพธ์ที่เลือกไว้" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA →ตัวแทน*วิธีการและผู้โทร" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA *เลือกแยกจาวา" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "สรุปสามารถอ่านได้*การตีความของตัวแทน" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA *เครื่องกำเนิดไฟฟ้า,ร่างกายที่สมบูรณ์" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "ดาวน์โหลด Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "ดาวน์โหลดผู้ให้บริการวิเคราะห์หุ่นยนต์" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "เจ้าหน้าที่→ REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA agent ตัวแทน·ผลลัพธ์ที่เลือกไว้" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA →ตัวแทน·คำแนะนำที่เลือกไว้" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "เจ้าหน้าที่→ REA ·อ่าน_ไบต์" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA →ตัวแทน*รายการที่เจ็ด" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "ปฏิบัติการเดิม · SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "ดาวน์โหลดความท้าทายเดิม" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "ดาวน์โหลดแก้" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REAผล·รหัสปลอมที่ตัดตอนมา" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "เจ้าหน้าที่→ REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA →ตัวแทน*ตัดตอนการเรียนการสอน" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA →ตัวแทน*ข้อความที่ตัดตอนมาโทร" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "เจ้าหน้าที่→ REA *สอง {ph0} คำขอ" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REAผลไบต์*ถอดรหัสเป็นคู่" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "เริ่มจากเป้าหมายของคุณเอง" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "การสร้างรหัส" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "กู้คืนกฎ" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "นาฬิกาปรับได้" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "ไบนารี" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "ตรวจสอบรหัส" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "สมการ" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "ถูกต้อง!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "ปฏิบัติการ" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA ผลลัพธ์" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "กู้คืนค" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "การตรวจสอบความถูกต้อง" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "แอพแพคเกจ" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "งคุณเอง" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "ห่อไอพีซี" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "คลิปบอร์ด" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "รหัสดอสต้นฉบับ" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA การแนะนำ" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "การคำนวณมุม" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "แหวนกระสุน" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "หน้าเว็บ" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "ทำให้โทรไอพีซี" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "ส่งไปยังคลิปบอร์ดระบบ" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "บันทึกไว้ในประเทศโดย Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "อินพุตมาร์กดาวน์" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "การวิเคราะห์โครงสร้างผลลัพธ์*ข้อความที่ตัดตอนมา" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "วิเคราะห์แอปของคุณเอง" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "เจ้าหน้าที่→ REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA agent ตัวแทน·ช่องที่เลือกไว้" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "เจ้าหน้าที่→ REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA →ตัวแทน*ตัดตอนการเรียนการสอน" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "ผลฟังก์ชั่นเดียวกัน*ตัดตอนมาจุดมุ่งหมาย" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "การบำรุงรักษาที่สอดคล้องกันค++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "แมโครแหวน · TH04 สาขาที่ตัดตอนมา" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "มุมและความเร็ว*ข้อความที่ตัดตอนมา" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "กด%เพื่อดูว่าเกิดอะไรขึ้นกับ 10" + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10%ของ 200 ได้ 20 กด=เพื่อเพิ่มมัน" + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "สำหรับการคูณ 10 กลายเป็น 0.1 กด=เพื่อคูณ" + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "แปลมีการปรับปรุง อ่านหน้านี้ในภาษาอังกฤษสำหรับตอนนี้." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA วิเคราะห์ {ph3} และอธิบายวิธีการส่งออกข้อมูล " +"แสดงโค้ดที่เกี่ยวข้องและสถานที่ตั้งต้นทาง{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ {ph3} เพื่อติดตั้ง REA " +"และเชื่อมต่อกับผู้ช่วยเขียนโค้ดนี้ แสดงแผนการตั้งค่าก่อนและรอให้ฉันอนุมัติ " +"แล้วตรวจสอบการติดตั้ง{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}ดาวน์โหลด {ph3} ลงในโฟลเดอร์ตัวอย่างใหม่และแกะมัน ใช้ REA " +"เมื่อต้องการค้นหาสิ่งที่เกิดขึ้นเมื่อฉันคลิกบันทึกการส่งออก แสดงที่ไหน {ph4}" +" เขียนซึ่งสาขาที่มีและไฟล์ที่เกี่ยวข้องและบรรทัด{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ {ph3} เพื่อติดตั้ง REA " +"และเชื่อมต่อกับผู้ช่วยเขียนโค้ดนี้ แสดงแผนการตั้งค่าก่อนและรอให้ฉันอนุมัติ " +"แล้วตรวจสอบการติดตั้ง{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ {ph3} เพื่อติดตั้ง REA " +"และเชื่อมต่อกับผู้ช่วยเขียนโค้ดนี้ แสดงแผนการตั้งค่าก่อนและรอให้ฉันอนุมัติ " +"แล้วตรวจสอบการติดตั้ง{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบ {ph3}. " +"โคลนเว็บไซต์นี้สำหรับฉัน.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "การฟื้นฟู · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"ด้วย {ph0} และ npm " +"ใช้ได้,เรียกใช้การตั้งค่า,เลือกเอเจนต์การเข้ารหัสของคุณและตรวจสอบการเปลี่ยนแปลงที่" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "ตัวอย่างที่ให้มา · {ph0} และ npm ·ตัวแทนการเข้ารหัสของคุณ" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"ใช้ตัวแทนการเข้ารหัสเช่น Claude Code, Codex หรือ Cursor. คุณจะต้อง {ph0} และ" +" npm;การ {ph1}รายการคู่มือการติดตั้งรุ่นที่รองรับ{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}หน้าเว็บ · {ph1}{ph2}{ph3}บันทึกการส่งออก{ph4}{ph5}โทร {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}สะพาน · " +"{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}ส่งข้อความที่มีชื่อไปยังกระบวนการหลัก{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}ตัวจัดการ · {ph1}{ph2}{ph3}เขียน {ph4}{ph5}{ph6}เรียกตัวจัดรูปแบบใน " +"{ph7} และเขียนไฟล์{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} *สาย 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}ทำนาย CSV สำหรับบันทึกย่อที่มีรหัส 1 และชื่อ {ph3}. " +"แล้วเรียกใช้ตัวอย่างของ {ph4} รูปแบบด้วย {ph5} เพื่อตรวจสอบ " +"แสดงการคาดการณ์และผลลัพธ์ที่เกิดขึ้นจริง{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"ชื่ออยู่ในฟิลด์ที่ยกมา;แต่ละเครื่องหมายใบเสนอราคาเป็นสองเท่า " +"นี้จะตรวจสอบรูปแบบโดยตรงกับ {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV ฟอร์แมตเตอร์" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"คุณจะต้อง {ph0} 22 (22.19+), 24 (24.11+) หรือ 26+ npm มาพร้อมกับ {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "ไม่มี {ph0} หรือไม่แน่ใจ?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"ถ้า {ph0} พิมพ์วี 22.19+,24.11+หรือวี 26+พร้อมแล้ว " +"ถ้าพิมพ์รุ่นเก่าหรือ\"ไม่รู้\"/\"ไม่พบคำสั่ง\",ติดตั้ง {ph1} 24 ลิตร:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} ·ตัวอย่างแหล่งที่มาที่ตัดตอนมา" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}เปิดตัวอย่าง{ph1} · {ph2}ดาวน์โหลด {ph3}{ph4} · {ph5}ดาวน์โหลด " +"{ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} ·ตัวอย่างแหล่งที่มา" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"ดาวน์โหลดตัวอย่างและเปิดเครื่องรูดมัน ที่เก็บประกอบด้วยสมบูรณ์ {ph0} " +"โฟลเดอร์ วิเคราะห์ด้วย {ph1} และ npm; Electron ไม่จำเป็นสำหรับตัวอย่างนี้" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"ครั้งแรกหรือหายไป {ph0} หรือตัวแทนการเข้ารหัส? " +"{ph1}ทำตามคู่มือการตั้งค่าทีละขั้นตอน→{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "ตัวอย่าง: {ph0}ทำไมเครื่องคิดเลขจึงได้ 220 เมื่อคำนวณ {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบ Windows เครื่องคิดเลข ทำไม {ph3} ให้ " +"220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA *โหลด {ph0} *สายที่เลือก" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"เราเห็นว่าทำไม {ph0}{ph1} ให้ 220{ph2} " +"ตอนนี้ขอกู้คืนกฎสำหรับทั้ง+และ×,และลองพวกเขา." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA อ่าน " +"{ph1}{ph2}{ph3}มันเปิดตัวแอพพลิเคเครื่องคิดเลข{ph4}{ph5}รหัสเปิด {ph6}. " +"จากนั้นเอเจนต์จะเลือกไลบรารีของแอปที่ติดตั้งไว้{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบเอจิส-เวอร์ชั่น 3.4{ph3}. " +"หาวิธีที่จะสร้างรหัสล็อกอินหกหลักอธิบายว่าทำไมมันเปลี่ยนทุก 30 " +"วินาทีและสร้างการสาธิตขนาดเล็กที่ฉันสามารถเปลี่ยนเวลา{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "แท็บ_เบราเซอร์_มุมมอง/{ph0} ·สมาชิกเอพีไอ" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "แท็บ_เบราเซอร์_มุมมอง/{ph0} ·ผู้ช่วยไอพีซี" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "หลัก/{ph0} *ผู้ช่วยผู้จัดการ" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "หลัก/{ph0} *รับคลิปบอร์ด" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "ฟื้นฟู*ดิโน-ความเร็วเจเอส" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "ด้วย Node.js และ npm " +#~ "ใช้ได้,เรียกใช้การตั้งค่า,เลือกเอเจนต์การเข้ารหัสของคุณและตรวจสอบการเปลี่ยนแปลงที่" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "ตัวอย่างที่ให้มา · Node.js และ npm ·ตัวแทนการเข้ารหัสของคุณ" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "ใช้ตัวแทนการเข้ารหัสเช่น Claude Code, Codex หรือ Cursor. คุณจะต้อง Node.js " +#~ "และ npm;การ {ph0}รายการคู่มือการติดตั้งรุ่นที่รองรับ{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}หน้า*แสดงผลเจเอส{ph1}{ph2}บันทึกการส่งออก{ph3}{ph4}โทร {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}สะพาน·โหลดล่วงหน้าเจเอส{ph1}{ph2}{ph3}{ph4}{ph5}ส่งข้อความที่มีชื่อไปยังกระบวนการหลัก{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}ตัวจัดการ*หลักเจเอส{ph1}{ph2}เขียนบันทึกซีเอสวี{ph3}{ph4}เรียกตัวจัดรูปแบบใน" +#~ " {ph5} และเขียนไฟล์{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ทำนาย CSV สำหรับบันทึกที่มีรหัส 1 และชื่อสวัสดี\"REA\". " +#~ "การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ Node.js เพื่อตรวจสอบ " +#~ "แสดงการคาดการณ์และผลลัพธ์ที่เกิดขึ้นจริง{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "ชื่ออยู่ในฟิลด์ที่ยกมา;แต่ละเครื่องหมายใบเสนอราคาเป็นสองเท่า " +#~ "นี้จะตรวจสอบรูปแบบโดยตรงกับ Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV ฟอร์แมตเตอร์" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "คุณจะต้อง Node.js 22 (22.19+), 24 (24.11+) หรือ 26+ npm มาพร้อมกับ Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "ไม่มี Node.js หรือไม่แน่ใจ?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "ถ้า {ph0} พิมพ์วี 22.19+,24.11+หรือวี 26+พร้อมแล้ว " +#~ "ถ้าพิมพ์รุ่นเก่าหรือ\"ไม่รู้\"/\"ไม่พบคำสั่ง\",ติดตั้ง Node.js 24 ลิตร:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}เปิดตัวอย่าง{ph1} · {ph2}ดาวน์โหลดส่งออกเจเอส{ph3} · " +#~ "{ph4}ดาวน์โหลดบันทึกย่อเจสัน{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "ดาวน์โหลดตัวอย่างและเปิดเครื่องรูดมัน ที่เก็บประกอบด้วยสมบูรณ์ {ph0} " +#~ "โฟลเดอร์ วิเคราะห์ด้วย Node.js และ npm; Electron ไม่จำเป็นสำหรับตัวอย่างนี้" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "ครั้งแรกหรือหายไป Node.js หรือตัวแทนการเข้ารหัส? " +#~ "{ph0}ทำตามคู่มือการตั้งค่าทีละขั้นตอน→{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "ตัวอย่าง: {ph0}ทำไมเครื่องคิดเลขจึงได้ 220 เมื่อคำนวณ 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบ Windows เครื่องคิดเลข ทำไม 200+10%ให้ " +#~ "220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "เราเห็นว่าทำไม {ph0}200+10%ให้ 220.{ph1} " +#~ "ตอนนี้ขอกู้คืนกฎสำหรับทั้ง+และ×,และลองพวกเขา." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA " +#~ "อ่านคำนวณเอ็กเซส{ph1}{ph2}มันเปิดตัวแอพพลิเคเครื่องคิดเลข{ph3}{ph4}รหัสเปิด " +#~ "{ph5}. จากนั้นเอเจนต์จะเลือกไลบรารีของแอปที่ติดตั้งไว้{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบเอจิส-เวอร์ชั่น 3.4.3เอพีเค " +#~ "หาวิธีที่จะสร้างรหัสล็อกอินหกหลักอธิบายว่าทำไมมันเปลี่ยนทุก 30 " +#~ "วินาทีและสร้างการสาธิตขนาดเล็กที่ฉันสามารถเปลี่ยนเวลา{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "แท็บ_เบราว์เซอร์_ดู/โหลดล่วงหน้าสมาชิกเจเอส·เอพีไอ" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "แท็บ_เบราว์เซอร์_ดู/โหลดล่วงหน้าผู้ช่วยเจเอส·ไอพีซี" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "หลัก/ดัชนีผู้ช่วยผู้จัดการ" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "หลัก/ดัชนีเครื่องรับคลิปบอร์ด" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "กเขาเจเอส*สาย 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "งกันการแก้ไขข้อผิดพลาด" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "แสดงผลรือไม่" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "โหลดก่อนรือไม่" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "กเขารือไม่" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA*ดัชนีโหลดเจเอส*สายที่เลือกไว้" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ใช้ REA " +#~ "วิเคราะห์/สัมบูรณ์/เส้นทาง/ไปยัง/แอพและอธิบายวิธีการส่งออกข้อมูล " +#~ "แสดงโค้ดที่เกี่ยวข้องและสถานที่ตั้งต้นทาง{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ติดตั้ง REA และเชื่อมต่อกับตัวแทนการเข้ารหัสนี้โดยใช้ npx " +#~ "การตั้งค่าล่าสุด " +#~ "แสดงแผนการตั้งค่าเพื่อขออนุมัติจากนั้นตรวจสอบการติดตั้ง{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ดาวน์โหลด https://rea.tools/examples/notes-example.zip " +#~ "ลงในโฟลเดอร์ตัวอย่างใหม่และแกะมัน ใช้ REA " +#~ "เมื่อต้องการค้นหาสิ่งที่เกิดขึ้นเมื่อฉันคลิกบันทึกการส่งออก " +#~ "แสดงที่บันทึกงเขตข้อมูลที่มีและไฟล์ที่เกี่ยวข้องและบรรทัด{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ติดตั้ง REA และเชื่อมต่อกับตัวแทนการเข้ารหัสนี้โดยใช้ npx " +#~ "การตั้งค่าล่าสุด " +#~ "แสดงแผนการตั้งค่าเพื่อขออนุมัติจากนั้นตรวจสอบการติดตั้ง{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ติดตั้ง REA และเชื่อมต่อกับตัวแทนการเข้ารหัสนี้โดยใช้ npx " +#~ "การตั้งค่าล่าสุด " +#~ "แสดงแผนการตั้งค่าเพื่อขออนุมัติจากนั้นตรวจสอบการติดตั้ง{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0*5 บาท" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0*5 องศาเซลเซียส" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0*64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}ใช้ REA เพื่อตรวจสอบ https://rea.tools/. " +#~ "โคลนเว็บไซต์นี้สำหรับฉัน.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "รหัส[21]=55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0*00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "×แพน_ขนาด" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}วิศวกรย้อนกลับอะไร{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/tr/messages.po b/website/locales/tr/messages.po new file mode 100644 index 000000000..f6a8d16d0 --- /dev/null +++ b/website/locales/tr/messages.po @@ -0,0 +1,13351 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Anasayfa{ph1} / Blog" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blog." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Tersine mühendislik üzerine düşünceler." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Oyun rekonstrüksiyonu{ph0}Deneme" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "Tersine mühendislikte endüstri devrimi" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"TH08, TH095 ve TH04'NUN manuel olarak yeniden yapılandırılması ve yeniden " +"yapılandırılması bana projeler arasında birleşen aracılar, doğrulama ve " +"bilgi hakkında bilgi verdi." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Makaleyi okuyun" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Başlangıç N0zoM1z0 * 10 Ekim 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Üst" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA Blog - Tersine Mühendislik Üzerine Düşünceler" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Tersine mühendislik üzerine düşünceler, REA ve AI ajanları ile pratik " +"deneyimlerden yararlanma." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA - Yazılımın nasıl çalıştığını öğrenin. Kodlama aracınızla tersine " +"mühendislik yapın." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "REA ana sayfası" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Ana menü" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "GitHub’da REA" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "REA Discord topluluğuna katıl" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "REA’yı X’te takip et" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Anasayfa{ph1} / {ph2}Blog{ph3} / Touhou rekonstrüksiyonu" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Deneme * Touhou rekonstrüksiyonu" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "Tersine mühendislikte sanayi devrimi." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Başlangıç N0zoM1z0 * 10 Ekim 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Önemli noktalar" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Ajanlara soruşturma konusunda özerklik verin.{ph1} Net bir hedef ve " +"kabul kriterleri belirleyin, ardından temsilcinin daha sonra ne deneyeceğine" +" karar vermesine izin verin." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Depoyu ve Git'i çalışma belleği olarak kullanın.{ph1} Mantığı kodla " +"birlikte tutun. Git kontrol noktaları, konuşma bittikten sonra bir sonraki " +"oturumun devam etmesine izin verir." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Neyi iddia ettiğinize kanıtların karar vermesine izin verin.{ph1} " +"Kendine güvenen bir açıklamanın hala test edilmesi gerekiyor. Kanıt eksik " +"olduğunda ”Bilinmeyen\" geçerli bir cevaptır." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Doğrulama referansını (oracle) da test edin.{ph1} Reddetmesi gereken " +"davaları deneyin. Bir hatayı kaçırırsa, ona bağlı olan önceki sonuçları " +"tekrar ziyaret edin." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}RE'NİN sanayi devriminin ilk günlerindeyiz.{ph1} Yöntemler hala " +"şekilleniyor. Keşfedilecek çok şey kaldı." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Bileşikler nasıl deneyimlenir" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}İnsan yönü{ph1} * Hedef ve kabul kriterleri" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Özerklik" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Ajan" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Bir deney seçin.{ph0}Bir hipotez öner." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Doğrulama" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Doğrulama ölçütü" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "A'ya karşı test{ph0}somut referans." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Depo" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Çalışma belleği" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Kod, kanıt,{ph0}çekler ve dersler." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Uyumsuzluk{ph0}{ph1}Hipotezi gözden geçirin{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Daha iyi bir{ph0}{ph1}başlangıç noktası{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Yeniden kullanım" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Geçmek{ph1} * Sonucu ve kanıtını saklayın" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Her proje bir sonrakini daha iyi bir başlangıç noktasıyla bırakır. Bu, bir " +"boşluk keşfettiğimizde çekleri düzeltmeyi de içerir." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "Bu makalede" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Ağustos 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08 : devamı{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}İki yaklaşım{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095 : bileşik{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: mimariler arası{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}Kesinden okunabilirliğe{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Endüstriyel değişim{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Ne mümkün olur{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Ağustos 2026'da neler değişti" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Bu çalışmadan önce birçok manuel tersine mühendislik yapmıştım. Bir açıklama" +" yapana kadar bir işlevi inceler, ardından bu açıklamayı programa göre test " +"ederdim. Daha da ileri gitmek, kendi zamanımın çoğunu bir sonraki işleve " +"harcamak anlamına geliyordu. Aynı zamanda kafamda giderek daha büyük bir " +"resim tutmak anlamına geliyordu." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"YENİDEN çalışmamın çoğu oyunlarla ilgili. Onları yeniden yapılandırıyorum, " +"böylece davranışları anlaşılabilir ve sonunda bir yazılım bağlantı noktasına" +" veya bir moda taşınabilir. Bu makalenin arkasındaki deneyim budur. Yöntem " +"başka yerlerde yararlı olabilir, ancak her alanın güvenilir bir referansa " +"karşı neyi kontrol edebileceğini belirlemesi gerekir." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"Ağustos 2026'da ajan odaklı re'yi ciddi bir şekilde keşfetmeye başladım. Bir" +" ajanın programa ve sıradan geliştirme araçlarına erişimle ne kadar ileri " +"gidebileceğini görmek istedim. Touhou'nun yeniden inşası bana öğrenmem " +"gereken önemli bir proje verdi." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Erken ilerleme şaşırtıcıydı. Ben her adımı seçmeden bir soruşturma devam " +"edebilir. Başarısız bir karşılaştırma aracıyı başka bir arayana " +"gönderebilir. Küçük bir teşhis yazabilir ve daha sonra ne deneyeceğine karar" +" vermek için sonucu kullanabilir. Bu özgürlüğü vermek bir fark yarattı: " +"Projenin yönüne ve kontrollerinin güvenilir olup olmadığına daha fazla " +"dikkat edebilirdim." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"Tempo önce dikkatimi çekti. Sonra mevcut projenin ötesinde neyin hayatta " +"kalacağını merak etmeye başladım. Bir sonraki oyun yeni öğrendiğimiz her " +"şeyden faydalanır mı?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: insan işi üzerine inşa etmek" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08{ph1} , Bozulmaz Gece, GensokyoClub'NUN yeniden " +"{ph2}inşasının{ph3} devamı olarak başladı. Halka açık kaynakları bana sağlam" +" bir temel verdi. Devamında koruduğum yapı bilgisi ve katkıların tarihi ile " +"geldi." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"İçe aktarılan geçmiş, halka açık 10 Ağustos kontrol noktasında sona erer. " +"Bağımsız devamım 13 Ağustos'ta başladı. 19 Ağustos'a kadar defter, " +"tanımlanan 1.107 oyun işlevinin tümü için kaynak kaydetti." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Devam başladıktan yaklaşık on bir gün sonra, 24 Ağustos'ta oynanabilir bir " +"Linux yeniden yapılanma limanı işlendi. Bunu bir Web baskısı izledi. Yerel " +"Linux 64 bit sürümü 30 Ağustos'ta geldi." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Beni şaşırtan şey, çalışmanın insanların yürütebileceği bir programa " +"ulaşmasıydı. Oraya ulaşmak, bireysel bir işlevin ötesinde aşağıdaki " +"sorunları gerektiriyordu. İki işlev yalıtılmış olarak doğru görünse bile, " +"yanlışlıkla paylaşılması gereken ayrı durum kopyalarını kullanabilirler." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Bu, referans kontrollerini işin merkezinde yaptı. Onlara {ph0}doğrulama " +"referansları (kahinler){ph1} diyorum. Bir kod karşılaştırması, yeniden " +"yapılandırılmış bir işlevin orijinal talimatları yeniden üretip üretmediğini" +" bize söyleyebilir. Bir çalışma zamanı denetimi, uygulanan bir rotanın " +"beklenen duruma ulaşıp ulaşmadığını bize söyleyebilir. Temsilci bir açıklama" +" önerir ve onu test eder; Bir uyumsuzluk ona araştırması gereken belirli bir" +" şey verir." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Yanlış sabitle tam bir eşleşme" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Doğrulama referansı (oracle), birinin yazdığı bir yazılımdır. TH08 bana bu " +"yazılıma ne kadar güvenebileceğine dair net bir hatırlatma yaptı." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"Eylül ayında, aşağı akış Anahtarı bağlantı noktası tarafından bildirilen bir" +" hata, öğenin otomatik toplanmasına geri döndü. Yeniden oluşturulan kaynak, " +"oyuncu gücünü {ph0}'a karşı kontrol etti. Orijinal, maksimum güç eşiği olan " +"{ph1}'ı kullandı." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"Normal güç negatif değildir, bu nedenle yeniden yapılandırılmış güç kontrolü" +" etkin bir şekilde her zaman yerine getirilmiştir. Toplama çizgisinin " +"üzerinde, oyun maksimum güç gerektirmeden öğeleri çekebilir. Koşuldaki diğer" +" istisnalar doğruydu. Bu sabit davranışı değiştirdi." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}Yine de işlev tam karşılaştırmayı çoktan geçmişti.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Yeniden oluşturma, bir sabiti farklı bir adrese koyabilir. Karşılaştırma " +"aracı, derlenmiş talimatlardaki adresleri orijinaliyle karşılaştırmadan önce" +" ayarlayarak bunu hesaba kattı. Ancak, başvurulan adreste depolanan kayan " +"nokta değerini hiçbir zaman kontrol etmedi." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Bu çekte bir delik bıraktı. Yeniden yapılandırılan talimatı orijinalin " +"{ph0}'ına yönlendirebilirken, kaynak hala {ph1}dedi. Yönerge baytları " +"eşleşti. Kaynak farklı bir şey ifade ediyordu." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"{ph0}2 Eylül düzeltmesi{ph1} kaynağı düzeltti ve karşılaştırmanın başvurulan" +" sabitin gerçek baytlarını kontrol etmesini sağladı. Daha {ph2}geniş bir " +"denetim{ph3} daha sonra 1.548 kayan noktalı sabit referansı inceledi. Kabul " +"edilen beş işlevde on iki yanlış referans daha buldu." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"Karşılaştırma şimdi bu tür her kayan nokta sabitini kontrol ediyor. " +"Testleri, reddedildiklerinden emin olmak için kasıtlı olarak yanlış değerler" +" içerir. Zayıf kontrolü geçen sonuçları da tekrar gözden geçirmek zorunda " +"kaldık." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}Doğrulama referansının (oracle) da yeniden yapılandırılması " +"gerekiyordu.{ph1} Tamir etmek, oyunu tamir etmenin bir parçasıydı." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Ekip çoğunlukla ajanlarla çalışan bir kişi olduğunda bu önemlidir. " +"Ürettikleri her hattı kişisel olarak inceleyemem, bu yüzden güvenimin çoğu " +"onların kontrollerine dayanıyor. Paylaşılan doğrulama referansı'nın (oracle)" +" kör noktası, fark etmeden önce birçok araştırmayı etkileyebilir. " +"Denetleyicinin gerçekte neyi doğruladığını anlamam ve başarısız olması " +"gereken durumlara karşı test etmem gerekiyor." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"Çalışmalar devam ederken, bu kontroller deponun bir parçası haline geldi. " +"Kaynak değişikliklerinin nedenleri ve daha önceki bir oturumun daha önceki " +"bir oturumun durduğu yerden devam etmesine izin veren notlar da öyle. " +"{ph0}Kaynak kod deposu, projenin çalışma belleği haline geliyordu.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Başarılı bir parti bize hem kurtarılan kodu hem de bir sonraki parti " +"için daha iyi bir ortam sağladı.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "İki farklı yeniden yapılanma fikri" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub'NUN {ph0}kamuya açık BENİOKU{ph1}, bu tür çalışmalarla olan " +"anlaşmazlığını açıkça ortaya koyuyor. Bildirim, tamamlanana kadar daha fazla" +" gelişmenin özel olarak gerçekleşeceğini duyurdu. Bir pasaj okur:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"Bu alandaki dolandırıcıların (AI ayrıştırmaları ve bağlantı noktaları) " +"çalışmalarımızdan aldığı yükseliş, gelecekteki ayrıştırma çabaları için kötü" +" bir imaj çiziyor…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"Bildiride ayrıca bakıcılar üzerindeki psikolojik ücret de açıklanmaktadır. " +"Katkı politikaları, öncelikle yapay zeka ile üretilen çekme taleplerini " +"hariç tutar. Boş zamanlarını zor işlere harcadılar ve bu iş devam etmemi " +"mümkün kıldı. Arkasındaki çabaya saygı duyuyorum. Tartışmak istediğim " +"anlaşmazlık, yeniden yapılanmanın nasıl ilerlemesi gerektiği ve bir katkının" +" nasıl değerlendirilmesi gerektiği ile ilgili." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"Bildiğim manuel iş akışında, bir işlev hakkında bir anlayış geliştirmek ve " +"onu yeniden oluşturmak genellikle aynı kişiye düşüyordu. Bir proje büyük " +"ölçüde o kişinin uzmanlığına dayanıyordu. Katılımcıya olan güven önemliydi " +"çünkü akıl yürütmenin çoğu onlar çalışırken gerçekleşti." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Mevcut projeler zaten kaynağında bilgiyi koruyor ve araçlar oluşturuyor. " +"Benim için değişen şey, bir ajanın bu bilgiyi bir sonraki soruşturmayı kendi" +" başına yürütmek için kullanabilmesiydi." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"Devamımda, bir sonucu kabul etmenin amacına ve standardına karar veriyorum. " +"Ajanın soruşturma konusunda geniş bir özgürlüğü var. Önerilen yeniden inşası" +" daha sonra ilgili kontrollerden kurtulmak zorundadır. İşin çoğunu bir " +"temsilci yapmış olsa bile, başka bir kişinin neden bir uygulamayı " +"seçtiğimizi inceleyebilmesini istiyorum." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Bu zor bir geçiş olabilir. Yıllarca süren özenli çalışma, çok daha hızlı " +"ilerleyen bir devamlılığın temeli olabilir. Bu, krediyle ilgili gerçek " +"soruları gündeme getiriyor. Ayrıca, bir katkıyı kabul etmeden önce " +"bakıcıların bilmesi gerekenleri de değiştirir." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"Endüstriyel benzetme bunu düşünmeme yardımcı oluyor. Bir zanaatta, sürecin " +"çoğu, onu gerçekleştiren kişinin becerisine bağlıdır. Makine, bu becerinin " +"gerekli olduğu yerde değişir. Birisi hala süreci tasarlamalı ve çıktısının " +"ne zaman yanlış olduğunu anlamalıdır. Farklı topluluklar bu değişimin ne " +"kadarını üstlenmek istediklerini seçebilir." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Benim seçimim, miras kalan eser kredilendirilerek ve tarihi korunarak açık " +"bir şekilde devam etmektir. Yeni çalışmanın gözden geçirilebilir olmasını " +"istiyorum. Bu bize bu yaklaşımın ne kadar ileri gidebileceğini sormanın ve " +"yol boyunca neyin yanlış gittiğinden öğrenmenin bir yolunu sunuyor." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Kaynak: GensokyoClub 10 Ekim 2026'da kontrol edilen {ph0}BENİOKU " +"bildirimi{ph1} ve {ph2}katkı politikası{ph3}. Alıntı kısaltılmış bir " +"alıntıdır. TH08 {ph4}kredileri ve kaynağı{ph5} devam sınırını kaydeder." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: deneyim birleştirmeye başlar" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095{ph1}, Mermiyi Vur, bu deneyimin değerini görmeyi çok daha " +"kolaylaştırdı. Deposu 29 Ağustos'ta defterde sıfır onaylanmış oyun işleviyle" +" başladı. Hala oyunu öğrenmek zorundaydık. Ancak bir yeniden yapılanmaya " +"nasıl başlanacağı ve nasıl devam ettirileceği hakkında çok daha fazlasını " +"zaten biliyorduk." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"7 Eylül'e gelindiğinde, tanımlanan 697 oyun işlevinin tümü kaynağa sahipti. " +"8 Eylül'e kadar 696 kesin karşılaştırma olarak kabul edilmişti. Programın " +"tamamı 9 Eylül'de bağlantılıydı. Windows i386 yeniden yapılandırması, " +"başlatmadan yaklaşık on iki gün sonra 10 Eylül'de oynanabilir olarak " +"işaretlendi." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Bunu ilk projenin hızından daha heyecan verici buldum. Yeni bir hedef, başka" +" bir oyun üzerinde yapılan işten yararlanabilir. Deneyim, araçlarda ve " +"projenin organize edilme biçiminde zaten mevcuttu." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Örneğin, TH08 bize birleştirilmiş programa erken dikkat etmeyi öğretmişti. " +"Kurtarılan birkaç işlev aynı duruma bağlıysa, yalıtılmış karşılaştırmaları " +"önemli bir soruyu açık bırakır. Birlikte çalıştıklarını görmeliyiz. Bu ders," +" TH095'NUN tüm program yapısına nasıl yaklaştığımızı şekillendirmeye " +"yardımcı oldu." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Ben oradayken kafamda kalan bir ders faydalıdır. Başka bir oturumun " +"çalışabileceğini kontrol ettikten sonra, devam ettikten sonra yardımcı " +"olmaya devam edebilir. Bir sonraki temsilci, sonuca yol açan soruşturmayı " +"tekrar etmeden sonucu kullanabilir." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Kayan nokta sabit hatası da o belleğe aittir. Bir referansı kontrol etmenin " +"neden arkasındaki verileri de kontrol etmeyi gerektirdiğini açıklar. Bu " +"düzeltmeyi kodla birlikte tutmak, sonraki projelerin eski çekin kör " +"noktasını devralmaktan kaçınmasına yardımcı olur." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}Yöntem, bir sonraki oyun için başlangıç materyalinin bir parçası haline" +" gelir.{ph1} Bir sonraki projenin çabalarının çoğunu, hedefiyle ilgili " +"gerçekte yeni olan şeylere harcayabiliriz." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Aynı fayda daha sonra katılan kişiler için de geçerlidir. Çalışmaya devam " +"etmeden önce bir kararı inceleyebilir ve kontrolünü tekrar yapabilirler. " +"Kaynağın neden bu şekilde göründüğünü bulmak için tüm projenin geçmişini " +"yeniden yapılandırmaları gerekmez." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: iş akışı farklı bir mimariden sağ çıkıyor" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} Lotus{ph1} Land Story adlı TH04, bu çalışmayı PC-98 DOS dönemine " +"taşıdı. Hedef şimdi dört işbirliği programı olan 16 bitlik bir ortamdı. " +"Donanım davranışını anlamak, Windows oyunlarından farklı kanıtlar " +"gerektiriyordu. Mevcut {ph2}ReC98 çalışması{ph3} bize burada da değerli " +"bilgiler ve kaynak materyaller verdi." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"DOS yeniden yapılandırması şimdi çalışıyor. Manuel testimde, sonları boyunca" +" Normal rotaları tamamladım ve tasarrufları kontrol ettim. Mevcut çalışma " +"yerel bir 64 bit bağlantı noktasıdır. Çalışan bir DOS sürümü oluşturmak, " +"önce bu bağlantı noktasına bir başvuru verir." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"Mimari, araştırmamız gereken şeyi değiştirdi. Ayrıca, çalışmamızı kontrol " +"ettiğimiz derleyiciyi ve çalışma zamanını da değiştirdi. Ancak ajan yine de " +"bir soruyu sonuca kadar takip edebilir ve bu sonucun bir sonraki deneye " +"rehberlik etmesine izin verebilir." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Oyundan sona geçişi düşünün. Hangi devletin bu sınırı aştığını ve bundan " +"hangi programın sorumlu olduğunu bilmemiz gerekiyor. Bu DOS ürününe karşı " +"araştırabileceğimiz bir şey. Kanıt ve kontroller mevcut olduğunda, bir " +"temsilci, bir Windows başlığında olduğu gibi soru üzerinde de çalışabilir." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"Bu nedenle TH04 argüman için önemlidir. Önemli bir platform değişikliği bizi" +" yeni bir çalışma şekliyle baştan başlamaya zorlamadı. Mimari sorunu " +"tanımladı; iş akışı hala bize bunu çözmenin bir yolunu verdi." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"64 Bit bağlantı noktası için artık yeni uygulamayı dos'ta kurtarılmış " +"davranışlara karşı inceleyebiliriz. Yeniden yapılanmadan elde edilen bilgi, " +"limana inşa edilecek bir şey verir." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"10 Ekim 2026 itibariyle proje durumu: {ph0}DOS yeniden yapılandırma ve " +"manuel test{ph1} · {ph2}64 bit bağlantı{ph3} noktası. Liman geliştirme " +"aşamasındadır." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Tam koddan okunabilir koda" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Bir yeniden yapılanma işe yaradığında, başka birinin bunu anlayabilmesini " +"istiyorum." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Bana göre, montaj ve ham ofsetler eski arkadaşlar gibi hissedebilir. Bunun " +"biraz sıra dışı bir \"okunabilir\" tanımı olduğunun farkındayım.\" Çoğu " +"insan, yürütülebilir dosyanın bellek düzenini kafasında tutmadan oyunun " +"mantığını takip etmeyi tercih eder." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"{ph0}Anlamsal yeniden yapılanmanın{ph1} devreye girdiği yer burasıdır. " +"Kurtarılan bir alan hala esas olarak ofseti ile bilinebilir. Rolünü " +"açıklayana kadar oyunun onu nasıl kullandığını takip ediyoruz. O zaman ona " +"anlamlı bir isim ve kanıtlara uyan bir tür verebiliriz. Akıl yürütmeyi " +"kaynakla birlikte tutarız, böylece bir sonraki kişi bu yorumun nereden " +"geldiğini görebilir." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Bu özellikle bir yazılım bağlantı noktası için önemli hale gelir. Mutlak bir" +" adres bana eski yürütülebilir dosyada bir şeyin nerede yaşadığını söyler. " +"64 bitlik bir uygulamaya, hangi nesnenin o duruma sahip olması gerektiğine " +"karar vermede çok az yardım sağlar. Davranışı güvenli bir şekilde taşımak " +"için eski bellek erişiminin arkasındaki ilişkiyi kurtarmamız gerekiyor." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "Şu anda kullandığım sipariş:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Kesin bir taban çizgisini kurtarın.{ph1} Yeniden oluşturulan parçaları " +"geçmiş derleyici ile derleyin. İlgili kodu ve verileri orijinal " +"yürütülebilir dosyayla karşılaştırın. Çözülmemiş farklılıkları kaydedin, " +"böylece bir sonraki aşama net bir başlangıç noktasına sahip olur." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Orijinal platformda oluşturun ve oynayın.{ph1} Orijinal mimariyi ve " +"derleyiciyi kullanarak bu parçaları gerçek programa bağlayın. Önemli oyun " +"yollarını kullanın. Yalıtılmış bir işlev karşılaştırmasının kaçırdığı " +"paylaşılan durum veya başlatma ile ilgili sorunları burada bulabiliriz." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Anlambilimi her iki referansa göre yeniden oluşturun.{ph1} Her " +"seferinde oyunun tutarlı bir bölümünü alın ve kurtarılan kaynağının ne " +"anlama geldiğini belirleyin. Tam karşılaştırmaları ve oynanabilir tarihsel " +"yapıyı korurken temsilini geliştirin." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Modern limanı yapın.{ph1} Yerleşik davranışı, yerel bir 64 bit yapı " +"gibi yeni ortama taşıyın. Yeniden yapılandırılmış orijinal platform oyunu, " +"bağlantı noktasının nasıl davrandığını karşılaştırmak için bir referans " +"olmaya devam ediyor." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"İkinci aşamadan itibaren oynanabilir yapı, üçüncü aşamada {ph0}ikinci bir " +"doğrulama referansı (oracle){ph1} haline gelir. İlk doğrulama referansı " +"(oracle), değiştirilen kaynağımızın hala ilgili orijinal kodu ve verileri " +"yeniden üretip üretmediğini kontrol eder. İkincisi, yeniden yapılandırılan " +"programın egzersiz yaptığımız yollar boyunca hala doğru şekilde " +"oluşturulduğunu ve davrandığını kontrol eder." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Farklı hatalar yakalarlar. Bir tür değişikliği oluşturulan yönergeleri " +"değiştirebilir. Sahiplik değişikliği, eyaletin farklı kopyalarını kullanarak" +" oyunun iki bölümünü bırakabilir. Her iki kontrolün de mevcut tutulması, " +"acenteye bir refaktörü daha fazla taşımadan önce soruşturmada somut bir " +"başarısızlık sağlar." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Bir ismin kendi kanıtına ihtiyacı vardır. Kesin bir karşılaştırma, bir " +"alanın gerçekten “yenilmezlik süresi\" anlamına gelip gelmediğini bize " +"söyleyemez.\" Bunu oyunun nasıl yazdığına ve kullandığına göre " +"belirlemeliyiz. Anlam belirsiz kalırsa, tarafsız bir isim bir sonraki " +"okuyucu için kendinden emin bir tahminden daha faydalıdır." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Bu düzeni projelerle öğrendik. TH08, daha sonraki geçmiş platform " +"denetimlerinden bazılarından önce zaten oynanabilir bağlantı noktalarına " +"sahipti. Bu, bazı kusurları görmeyi zorlaştırdı. {ph0}Fabrikanın mevcut iş " +"akışı{ph1}, orijinal platform yapısını ilk sıraya koyar, böylece anlamsal " +"çalışma, taşıma başlamadan önce referans olarak kullanabilir." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}Tam yeniden yapılanma bize bir referans veriyor. Anlamsal yeniden " +"yapılanma, kurtarılan bilgiyi kullanılabilir hale getirir.{ph1} Daha sonra " +"her ikisine de bir liman inşa edilebilir." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Bunu endüstriyel bir değişim yapan nedir" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Bu projeler dikkatimi çektiğim yerde değişti. Ajanlar soruşturmanın çoğunu " +"ileriye taşıyabildiklerinde, çalışma ortamlarını iyileştirmek yapabileceğim " +"en faydalı şeylerden biri haline geldi. Daha iyi bir araç, ihtiyacı olan " +"sonraki her işleve yardımcı olabilir." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"Özerklik burada önemlidir. Yararlı bir sonraki adım genellikle ancak " +"başarısız bir deneyden sonra netleşir. Bir ajanın bu sonucu beklenmedik bir " +"yerde takip etmek için yeterli özgürlüğe ihtiyacı vardır. Her adımı yazmamı " +"beklemek zorunda kalırsa, işin çoğu dikkatime bağlı kalır." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Ajanın yanlış hipotezler yapmasını bekliyorum. Önemli olan, onları test edip" +" sonuçtan öğrenip öğrenemeyeceğimizdir. Başarısız bir kontrol, hatayı tekrar" +" deneyecek kadar iyi anlamasına yardımcı olmalıdır. Birikmiş kanıtların bir " +"proje kilometre taşını destekleyip desteklemediğine hala karar vermem " +"gerekiyor." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA, aracıya analiz araçlarına erişim sağlar. Bir işlevin arayanıyla ilgili " +"bir soru, doğrudan o arayanı incelemeye yönlendirebilir. Yeniden " +"yapılandırma projesi derleyiciyi ve kendi referans kontrollerini sağlar. " +"Aracı, önerdiği kaynağı test etmek ve açıklamasının nerede geçerli olduğunu " +"görmek için bunları kullanabilir." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"TH08 hatası, bu kontrollerin neden kendi mühendislik dikkatini hak ettiğini " +"gösterir. Aynı karşılaştırma yüzlerce işlevde kullanıldığında, içindeki bir " +"boşluk, bir uygulamadaki bir hatadan çok daha uzağa yayılabilir. " +"Denetleyiciyi test etmek, daha sonraki tüm çalışmalarda kullanılabilen geri " +"bildirimi geliştirir." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"Endüstriyel analojinin burada yararlı bir tarihsel örneği vardır. Boulton ve" +" Watt, motor valflerinin ayarlanmasına yardımcı olmak için {ph0}1796'da bir " +"buhar motoru göstergesi{ph1} tanıttı. Bir kayıt versiyonu, piston stroku " +"boyunca basıncı izledi. Motorun iç davranışını incelemeye hazır hale " +"getirdi. Karşılaştırma araçlarımız da benzer bir amaca hizmet ediyor: Biz " +"onu geliştirirken makinelerin ne yaptığını incelememize izin veriyorlar." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Bu endüstriyel değişimin ilk aşamalarındayız.{ph1} Altyapının çoğu hala" +" olgunlaşmamış durumda. Temsilciler, kontrollerimizin desteklemek için " +"tasarlandığından daha hızlı hareket edebilir, bu nedenle süreç onlarla " +"birlikte gelişmelidir. Paylaşılan bir araçta bir kusur bulduğumuzda, onu " +"onarmalı ve etkilediği sonuçları tekrar gözden geçirmeliyiz. Bir sonraki " +"proje daha sonra daha güçlü bir aracı devralabilir." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Herhangi bir konuşmanın pratik bir sınırı da vardır. Büyük bir yeniden " +"yapılanma bitmeden sona erecek. Kaynak kod deposu, son kararın nedenini " +"kaybetmeden başka bir oturumun devam etmesini mümkün kılmalıdır." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"{ph0}Touhou Yeniden Yapılanma Fabrikası{ph1} bu ihtiyaçtan doğdu. Projelere " +"çeklerini ve derslerini ileriye taşımak için ortak bir yol sunar. Bir oyun " +"üzerinde çalışmak, diğerinin başlangıç koşullarını iyileştirebilir." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"Endüstriyel analojiyi benim için anlamlı kılan şey budur. Deneyim, " +"başkalarının kullanabileceği araçların bir parçası olmaya başlar. Bu " +"araçları geliştirmek, bir sonraki kişinin - veya bir sonraki temsilcinin - " +"ne kadarını yapabileceğini değiştirir." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Şimdi düşünebileceğimiz projeler" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Hız önemlidir çünkü başlama kararını değiştirir. Bir oyun tersine " +"mühendislik yapmak için büyüleyici olabilir ve yine de gerçekçi olarak " +"verebileceğimden daha fazla kendi dikkatimi talep edebilir. Birçok proje " +"fikir olarak kalacaktır." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Şimdi böyle bir projeyi tekrar tekrar araştırarak sürdürmenin bir yolunu " +"görebiliyorum. Çalışan bir yeniden yapılanma elde etmek, bir yazılım " +"bağlantı noktasını daha pratik hale getirir. Okunabilir anlambilimi " +"kurtarmak, bir başkasının bir modu keşfetmesini kolaylaştırır. Oyunu anlamak" +" için harcanan çaba, ilk sürüm yayınlandıktan sonra karşılığını vermeye " +"devam edebilir." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Şimdi bilmediğim bir programa bakıyorum ve soruyorum: {ph0}hangi erişim, " +"geri bildirim ve birikmiş bilgi, bir temsilcinin bu konuda güvenilir bir " +"şekilde çalışmasına izin verir?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Bu soru, daha önce yalnız bırakacağım projeleri düşünmemi sağlıyor. Her biri" +" bir sonrakine yaklaşma şeklimizi geliştirebilir. Bunun bizi ne kadar ileri " +"götürebileceğini araştırmaya devam etmek istiyorum." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Proje kilometre taşları ve kaynakları" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Tarihler, 10 Ekim 2026'da herkese açık GitHub geçmişine göre kontrol edilen " +"kayıtlı proje kontrol noktalarını açıklar. Geçen süre, taahhütler arasındaki" +" takvim zamanıdır. Kaynak varlığı, tam karşılaştırmalar, yapı ve çalışma " +"zamanı sonuçlarının her biri farklı bir kilometre taşı olarak adlandırılır." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08:{ph1} {ph2}13 Ağustos devamı{ph3}, {ph4}19 Ağustos kaynak " +"defteri{ph5}, {ph6}24 Ağustos Linux bağlantı{ph7} noktası, {ph8}26 Ağustos " +"Web sürümü{ph9} ve {ph10}30 Ağustos 64 bit Linux sürümü{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095:{ph1} {ph2}29 Ağustos başlangıç defteri{ph3}, {ph4}7 Eylül " +"kaynak defteri{ph5}, {ph6}8 Eylül karşılaştırmaları{ph7}, {ph8}9 Eylül " +"bağlantısı{ph9} ve {ph10}10 Eylül oynanabilir yapı kaydı{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04:{ph1} {ph2}10 Ekim devir teslimi, çalışan DOS yeniden " +"yapılandırmasını, bakıcının tam Normal rota testini ve mevcut 64 bit " +"aşamasını{ph3} kaydeder." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} TH08 doğrulama başvurusu (oracle) düzeltmesi:{ph1} {ph2}bildirilen " +"otomatik toplama hatası{ph3}, {ph4}kaynak ve karşılaştırma düzeltmesi{ph5} " +"ve {ph6}tam kayan nokta sürekli denetimi{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Anlamsal yeniden yapılanma:{ph1} {ph2}TH08 okunabilirlik oyun " +"kitabı{ph3} ve {ph4}Fabrikanın aşama sırası ve iki doğrulama yolu{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Endüstri tarihi:{ph1} {ph2}Bilim Müzesi Grubunun buhar motoru gösterge " +"kaydı{ph3}, 1796 girişini ve basınç kayıt mekanizmasını açıklar." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Yöntem:{ph1} Fabrikanın {ph2}temsilci özerkliği{ph3} ve {ph4}oyunlar " +"arası bilgi{ph5} belgeleri çalışma prensiplerini ve dersleri korur." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "" +"{ph0}Daha fazla makale{ph1} * {ph2}Bir TH04 araştırmasını keşfedin{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Tersine Mühendisliğin Endüstri Devrimi - REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0, manuel tersine mühendislik, AI ajanlarıyla Touhou rekonstrüksiyonu" +" ve bilginin TH08, TH095 ve PC-98 TH04'DA nasıl birleştiğini yansıtır." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Projeler arasında taşınan deneyim" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Touhou yeniden yapılanma denemesi" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Ana{ph1}{ph2} Sayfa/{ph3} Dinozor hız laboratuvarı" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "İncele → yeniden oluştur → değiştir" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Dinozorun hız kuralını yeniden oluşturun." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Oyunun ivmesini yeniden oluşturmak için önce hızını kontrol eden kuralı " +"bulun. REA {ph0}çalışan komut dosyasını döndürdü;{ph1} Bu mini oyunu " +"{ph2}ayarlanabilir hızda oluşturmak için kuralını kullandık.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Hızı oynayın ve değiştirin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Kurtarılan kuralı okuyun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Yeniden yapılanmayı kontrol edin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Analizi deneyin{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Hızı oynayın ve değiştirin" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Oynat düğmesine basın, ardından kaktüsün üzerinden atlayın. Daha yavaş veya " +"daha hızlı bir oyun denemek için hız kaydırıcısını hareket ettirin; sabit " +"bir hıza geçer. 6'dan başlamak ve yavaş yavaş tekrar hızlandırmak için " +"kurtarılan kuralı seçin." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Yeniden oluşturulan oyunu oyna" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Oyna" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Zıpla ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Yeniden başlat" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Hız" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Kurtarılan hızlanma kuralını kullanın" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Orijinal kural: 6'dan başlayın, ardından 13'e doğru artırın." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Kendi hızınızı ayarlamak için kaydırıcıyı hareket ettirin. Boşluk veya " +"Atlama bir kaktüsü temizler." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Yeniden yapılandırmayı oynatmak için JavaScript'YU etkinleştirin. Yukarıdaki" +" kod ve açıklama okunabilir durumda kalır." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Döndürülen REA komut dosyasını okuyun" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"{ph0}Wayou'nun Chromium'DAN türetilmiş tarayıcı sürümünü{ph1} REA ile " +"inceledik. Yüklenen {ph2}, bu dalı oyunun güncelleme işlevine dahil etmek:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Ayarlar {ph0}, {ph1} ve {ph2}'tür. Oyun bu dalı çarpışma olmadan bir " +"güncellemede çalıştırır." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Yeni oyunda aynı kuralı kullanın" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Kopyala" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Mini oyun bu işlevi otomatik hızlanma için kullanır. Kaydırıcıyı hareket " +"ettirmek bunun yerine sabit bir hız sağlar. Çizim, atlama fiziği ve " +"dikdörtgen çarpışma kontrolleri bu öğretim oyunu için yeni kodlardır; " +"simülasyonu saniyede 60 güncellemede ilerler." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}Hız kuralını indirin{ph1} * {ph2}Oyun kodunu okuyun{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Yeniden yapılanmayı kontrol edin" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Orijinal oyunun güncelleme işlevini engeller ve otomatik zamanlama devre " +"dışı olarak adlandırdık. Kaydedilen hızları, kurtarılan kuralın tekrarı ile " +"karşılaştırın." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Güncellemeler" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Orijinal oyun" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Yeniden kural" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Hız kontrolünü çalıştırın" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Değerler üç ondalık basamağa yuvarlanır. Şube eklemeden önce kontrol eder, " +"böylece son artış 13'ün biraz üzerinde hız alabilir." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Analizi kendiniz deneyin" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Kodlama aracınızla REA'YU ayarlayın.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Kullanarak {ph0}{ph1}tarayıcı bağlantı adımlarını{ph2} sayfa URL'si olarak." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Aracınıza sayfa URL'sini ve yerel hata ayıklama bitiş noktasını verin, " +"ardından bu istemi kopyalayın." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Bu dinozor oyununu incelemek için REA kullanın. Neden daha " +"hızlı oluyor? Hız kuralını gösterin, ardından ayarlanabilir hıza sahip küçük" +" bir versiyon oluşturun.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Bir takip isteyin: {ph0}\"Atlama yüksekliği nerede hesaplanır? Yeni sürüme " +"bir atlama yüksekliği kontrolü ekleyin.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Kaynak: {ph0}denetlenen hız kodu{ph1}, Chromium Yazarları. {ph2}Telif hakkı " +"ve BSD lisansı{ph3}. REA 4.1.0, Chrome 150'de çalışan HTTP sürümünü " +"denetledi." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome Dinozor Oyunu: Hız Kuralını Yeniden Oluşturun - REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Dinozor oyununun hız kuralını REA ile okuyun, yeniden oluşturun, ardından " +"hızı değiştirin ve oynayın." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Dinozor hız rekonstrüksiyonu" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Dinozor mini oyunu. Oyun odaklanırken Atlama düğmesini kullanın veya Boşluk " +"tuşuna basın." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Yeniden oluşturulan hız kuralını kopyala" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Dinozor analizi istemini kopyala" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Anasayfa{ph1} / SSS" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA SSS." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Kurulum, güncellemeler, analiz ve sorun giderme." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Konular" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Kurulum ve güncellemeler{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Analiz{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Sorun giderme{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Veri ve paylaşım{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Kurulum ve güncellemeler" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "REA’yı nasıl kurarım?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Terminal * aracı kurulumu" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Kopyala" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"Kurulum, REA’nın MCP bağlantısını kaydeder ve ilgili analiz skill’ini " +"yükler. Tamamlandığında ajanınızı yeniden başlatın, ardından dosya yolunu ve" +" sorunuzu verin. Gereksinimler ve ilk analiz için {ph0}kurulum " +"kılavuzuna{ph1} bakın." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Hangi kodlama aracıları REA kullanabilir?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Yerel MCP sunucularını destekleyen herhangi bir aracı. Kurulum içerir Claude" +" Code, Claude Masaüstü, Codex, Cursor, Gemini CLI, Windsurf, Devin, " +"OpenCode, Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP ve " +"VS Code . Grok Bot'un konektörü sohbetinden eklenir." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Kodlama aracınızı bağlayın{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "REA’yı nasıl güncellerim?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA, hata düzeltmeleri de dahil olmak üzere sık sık yayınlanır. CLI'YU npm " +"ile kurduysanız :" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Terminal * kurulu CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Güncelleştirme tarafından yazdırılan kur yenile komutunu izleyin. Aracınızı " +"{ph0} aracılığıyla kurarsanız, çalıştırın:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Terminal * aracı kurulumunu yenile" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Değişiklikleri kontrol edin ve ajanınızı yeniden başlatın. REA bağlantısı " +"belirli bir paket sürümünü kullanır; yeni sürüme geçmek için kurulumu tekrar" +" çalıştırın. Tek seferlik CLI kullanımı için {ph0} ifadesinden sonra komutu " +"ekleyin." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Beceriyi yüklüyor mu skills.sh yeter mi?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"Beceri, temsilcinize soruşturma talimatları verir. REA sunucusunu bağlamak " +"için MCP {ph0}kurulumunu{ph1} çalıştırın ve eşleşen beceriyi yükleyin, " +"ardından aracınızı yeniden başlatın, böylece araçları çağırabilir." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Analiz" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "REA ile neleri analiz edebilirim?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Sahip olduğunuz yazılım türüyle başlayın:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Yerel yürütülebilir dosyalar ve kitaplıklar{ph1}: işlevler, derleme, " +"sözde kod ve referanslar." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} JavaScript ve Electron uygulamaları{ph1}: modüller, içe aktarmalar, " +"IPC ve kaynak konumları." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Tarayıcı sayfaları{ph1}: komut dosyaları, istekler ve çalışma zamanı " +"gözlemleri." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA ayrıca yönetilen derlemeler, Android apk'lar, ürün yazılımı ve " +"paketlenmiş kaynaklar için iş akışlarına sahiptir. Çalışılan soruşturmalar " +"için {ph0}vaka incelemelerine bakın{ph1}." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Hopper, Ghidra veya IDA'YA ihtiyacım var mı?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"Makine kodu programlarının derinlemesine analizi bunlardan birini kullanır. " +"Statik JavaScript ve .NET denetimi, sağlanan dosyalarla çalışır ve makine " +"kodu programları motorunun analizine ihtiyaç duymaz." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Mevcut Ghidra veya IDA kurulumunuzu bağlayın veya kurulumun Hopper'YU " +"algılamasına izin verin ve bir kurulum önerin. Ev sahibiniz ve hedefiniz " +"hangi sağlayıcının kullanılabileceğini belirler. {ph0}Makine kodu " +"programlarının analizini ayarlayın{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "REA'YU kodlama aracısı olmadan kullanabilir miyim?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Evet. CLI aynı analiz iş akışlarını kullanır. Yerel bir JavaScript veya " +"Electron uygulaması için:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Terminal * statik uygulama analizi" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Yolu ayıklanan bir uygulama klasörü veya ASAR dosyasıyla değiştirin. Kurulum" +" seçenekleri için CLI'YU {ph0}kullanın.{ph1}" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "REA hangi kodu döndürür?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"Yerel makine kodu analizi; assembly, sözde kod, işlev çağrıları, referanslar" +" ve ilgili sabitleri döndürür. JavaScript analizi ise modülleri, " +"aralarındaki ilişkileri ve kaynak kod konumlarını döndürür." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Temsilciniz bu bulguları davranışı açıklamak veya bir uygulamayı yazmak ve " +"test etmek için kullanır. DX-Ball {ph0}hesaplaması{ph1} ve {ph2}CTF bayrak " +"denetleyicisi{ph3}, bu işlemin nasıl çalıştığını gösterir." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "Ajanıma ne sormalıyım?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Ona yerel bir hedef ve araştırması gereken bir davranış verin. Bir " +"JavaScript veya Electron uygulaması için:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Yolu hedefinizle değiştirin. {ph0}Kılavuzlar{ph1}, yerel, Electron ve " +"tarayıcı örnekleri için bilgi istemleri sağlar." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Sorun giderme" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Temsilcim neden REA araçlarını göremiyor?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Aracınızı Kur'dan sonra yeniden başlatın veya yeniden bağlayın. REA kaydını " +"{ph0} kontrol edin; Codex için :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Terminal * bir müşteriyi kontrol edin" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"{ph0} claude_code veya {ph1} gibi istemci kimliğinizle değiştirin{ph2}. " +"Rapor eksik veya eski bir kayıt gösteriyorsa, bu istemci için kur'u " +"çalıştırın:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Terminal * bir müşterinin kurulumunu onarın" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Planını gözden geçirin ve istemciyi yeniden başlatın. Kayıt sağlıklıysa " +"ancak araçlar yoksa, istemcinin MCP bağlantı hatasını kontrol edin. Daha " +"{ph0}fazla kurulum teşhisi{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Önce Hopper'YU çalıştırmam gerekiyor mu?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA, bir işlem gerektiğinde Hopper'YU başlatır. macOS'DA, katılımsız " +"analizden önce ilk çalıştırma demo modu seçimini veya lisans aktivasyonunu " +"tamamlayın. {ph0}Yerel sağlayıcı kurulumuna bakın{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Bir hatayla karşılaşırsam ne yapmalıyım?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}REA'YU güncelleyin{ph1}, aracınızı yeniden başlatın ve aynı görevi " +"yeniden deneyin. Yeni bir sürüm sorunu zaten düzeltebilir." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Devam ederse, REA sürümünüz, işletim sisteminiz, hedef türünüz, yeniden " +"oluşturma adımlarınız ve hata çıktınızla ilgili {ph0}bir sorun açın{ph1}. " +"Sorun, makine kodu programlarının analizini içerdiğinde sağlayıcı adını " +"ekleyin." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Veri ve paylaşım" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "REA uygulamamı yüklüyor mu?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA makinenizdeki hedefleri analiz eder. Aracınız sonuçları alır ve model " +"sağlayıcısının veri politikası bu sonuçlar için geçerlidir." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Bir örneği nasıl paylaşabilir veya katkıda bulunabilirim?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Yararlı bir REA örneğiniz var mı? Görmeyi çok isteriz. Hedefi, sorunuzu, " +"bulguları ve bunları bir {ph0}sorun{ph1} veya {ph2}çekme isteğinde{ph3} " +"nasıl kontrol ettiğinizi paylaşın. Kısa kod alıntıları ve rakamları, " +"başkalarının soruşturmayı takip etmesine yardımcı olur." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Hata raporları, özellik istekleri, belgeler ve kod iyileştirmeleri de " +"memnuniyetle karşılanmaktadır. {ph0}Topluluktaki{ph1} bir örneği de " +"tartışabilirsiniz." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA SSS: Kurulum, Güncellemeler ve Sorun Giderme" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Yaygın REA sorularının yanıtları: kurulum, güncellemeler, analiz araçları, " +"kodlama aracıları, sorun giderme ve paylaşım örnekleri." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "REA hakkında sıkça sorulan sorular" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "REA kurulum komutunu kopyalayın" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "REA güncelleme komutunu kopyala" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Aracı kurulum yenileme komutunu kopyala" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "REA CLI analiz komutunu kopyalayın" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Örnek çözümleme istemini kopyala" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "İstemci tanılama komutunu kopyala" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Kapsamlı kurulum komutunu kopyala" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Home{ph1} / İlk araştırmanız" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Nerede olduğunu öğrenin{ph0}dışa aktarılan notlar gider." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Küçük bir uygulamayı incelemek, Notları dışa aktar düğmesini takip etmek ve " +"bir ayrıntıyı kendiniz kontrol etmek için REA kullanın." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "Bu alıştırmada" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Kurmak{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. İhracat hakkında soru sorun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Cevabı takip et{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Bir tahmini kontrol edin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Başka bir soru sor{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Aracınızı REA'ya bağlayın" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Kopyala" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Veya bu komutu terminalinizde çalıştırın:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Planı gözden geçirin, kurulumu onaylayın ve aracınızı yeniden başlatın. " +"Zaten bağlandınız mı? Aşağıdan devam edin." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. CSV'NUN nerede yazıldığını sorun" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"Örnek, {ph0}Notları Dışa Aktar{ph1} düğmesine sahip altı dosyadan oluşan bir" +" Electron uygulamasıdır. Aracınız, Electron'YU yüklemeden veya başlatmadan " +"kodunu inceleyebilir." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Aracınız dosyaları indirir ve paketlenmemiş klasörü inceleme için REA'YA " +"verir." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Örnek ZİP dosyasını indirin{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Temsilciniz dosya indiremiyorsa, bu arşivi kendiniz açın. {ph0} klasörünün " +"yolunu ve aynı dışa aktarma sorusunu verin." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Cevabı koda geri takip edin" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Dosya ve satır referanslarıyla kısa bir açıklama arayın:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Düğme bir {ph0} mesajı gönderir. Ana işlem notları CSV olarak biçimlendirir " +"ve {ph1}. Sütunlar {ph2} ve {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Düğmeden dosya yazıcısına" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"REA'NUN statik analizi, mesajı işleyicisiyle eşleştirir. Hedef koddan " +"okunur." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Dosya yolu, biçimlendirici ve yazma çağrısı bu işleyicide birlikte bulunur. " +"Temsilcinizden, cevabı onları dışarıda bırakırsa bu satırları göstermesini " +"isteyin." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}Tam kod izlemesine ve kaydedilen REA sonucuna bakın{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Bir tahmini kontrol edin" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Virgül, CSV sütunlarını ayırır. Bir not başlığının kendisi virgül veya " +"tırnak işareti içeriyorsa ne olur?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Kontrolü kendin yap" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Paketlenmemiş {ph0} klasöründe bir terminal açın:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Bu komut, Bash veya Zsh gibi here-document desteğine sahip bir kabuk " +"kullanır. Aracınız aynı JavaScript'YU platformunuzun kabuğunda " +"çalıştırabilir." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Başka bir soru sor" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Aynı sohbette bir takip yapmayı deneyin:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "Dosya yazılamazsa ne olur? Hatayı sayfaya geri izleyin." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Veya temsilcinize kendinize ait bir uygulama verin ve bir düğme, dosya veya " +"davranış hakkında soru sorun." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Notion metin ve HTML'yi nasıl kopyalar{ph1}{ph2} Paketlenmiş bir " +"Electron uygulamasındaki pano özelliğini izleyin.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}DX-Ball stereo ses konumlandırmasını nasıl hesaplar{ph1}{ph2} Orijinal " +"talimatları ve yeniden yapılanmanın kontrollerini okuyun.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Kurulum veya analiz sorunlarını giderme{ph1}{ph2} REA'YU güncelleyin ve" +" takılırsanız bağlantıyı kontrol edin.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "İlk Tersine Mühendislik Araştırmanız - REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Küçük bir Not uygulamasında REA'yu deneyin. Temsilcinizi kurun, dışa " +"aktarılan notların nereye gittiğini sorun ve örnek bir başlıkla CSV " +"biçimlendiriciyi kontrol edin." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "İlk REA araştırmanız" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "REA kurulum istemini kopyalayın" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Kurulum komutunu kopyala" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Notları Kopyala soruşturma istemi" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "CSV onay istemini kopyala" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Biçimlendirici onay komutunu kopyala" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Ana{ph1} sayfa / Başlayın" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "REA'YU ayarlayın." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"REA'YU kodlama aracınıza bağlayın veya terminalinizden yerel bir uygulamayı " +"inceleyin." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Bir terminal açın ve kontrol edin:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Terminal" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Kopyala" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows Powershell'in" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Koşulları kabul etmeniz istenirse Y yazın. Powershell'i kapatın, tekrar " +"açın, ardından {ph0} çalıştırın." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"PowerShell daha sonra {ph0}npx'i{ph1} çalıştırdığınızda {ph2} diyorsa, bunu " +"bir kez çalıştırın ve tekrar deneyin:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Homebrew kullanıyorsanız :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Aksi takdirde:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Terminali kapatın, tekrar açın, ardından:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"Yükleyicinin kıvrılması ve sıkıştırması gerekir (Debian / Ubuntu'da: " +"{ph0}curl{ph1}unzip{ph2}). Terminali kapatın, tekrar açın, ardından:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Dağıtımınızın kendi {ph0} paketi genellikle 22.19'dan eskidir, bu nedenle " +"bunun yerine kullanıyorsanız {ph1} kontrol edin." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Normal bir yükleyiciyi mi tercih edersiniz? LTS sürümünü şuradan indirin: " +"{ph0}nodejs.org{ph1} ." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Kurulum seçenekleri" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Kodlama aracınızı bağlayın{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}CLI'YU kullanın{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Makine kodu programlarının analizini ayarlama{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Yardım almak{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Kodlama aracınızı bağlayın" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"REA kodlama aracınıza bağlanmak için kur'u çalıştırın. İstemci seçenekleri " +"arasında Claude Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build ve " +"desteklenen diğer MCP istemcileri bulunur. Grok Bot'un konektörü sohbetinden" +" eklenir." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Kodlama ajanlarında yeni misiniz?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Kodlama aracısı, tarayıcı sekmesi yerine bilgisayarınızda çalışan bir yapay " +"zeka yardımcısıdır. Dosyaları okuyabilir ve komutları çalıştırabilir ve " +"değişiklik yapmadan önce sorar. REA, tersine mühendislik araçları sağlar." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Henüz bir tane yoksa, birini seçin, yükleme sayfasını takip edin ve oturum " +"açın:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code{ph2}{ph3} tarafından Anthropic . Ücretli bir Claude " +"planına ihtiyacı var." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex{ph2}{ph3} tarafından OpenAI . ChatGPT hesabınızla oturum " +"açın." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode{ph2}{ph3}, açık kaynak. Seçtiğiniz model sağlayıcısını " +"bağlayın." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Ardından açın ve aşağıdaki istemi içine kopyalayın. Aracı, REA'NUN " +"kurulumunu çalıştırır ve herhangi bir şeyi değiştirmeden önce planı size " +"gösterir." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Veya kurulumu kendiniz çalıştırın" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Terminali nasıl açarım?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows:{ph1} Başlat menüsünü açın, {ph2}PowerShell{ph3} yazın ve " +"Enter tuşuna basın." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS:{ph1} {ph2} {ph3} tuşuna basın, {ph4}Terminal{ph5} yazın ve " +"Enter tuşuna basın." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "{ph0} Linux:{ph1} çoğu masaüstünde {ph2} {ph3} {ph4} tuşlarına basın." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"{ph0} {ph1} ile bir komut yapıştırın ( macOS : {ph2} {ph3}; Linux " +"terminalleri: {ph4} {ph5} {ph6}), ardından Enter tuşuna basın." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"İstemcinizi seçin ve kurulum planını gözden geçirin. REA, MCP bağlantısını " +"ve eşleşen araştırma becerisini ekleyerek mevcut yapılandırmanın yedeğini " +"alır. Değişiklikleri uygulamadan önce sorar." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Kur tamamlandığında istemcinizi yeniden başlatın." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Müvekkilimi nasıl yeniden başlatırım?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Masaüstü uygulamaları{ph1} (Claude Masaüstü, Cursor, Windsurf, VS " +"Code): uygulamadan tamamen çıkın, ardından tekrar açın. Pencereyi kapatmak " +"yeterli değil. macOS'DA {ph2} {ph3} tuşuna basın; Windows'DA varsa tepsi " +"simgesinden de çıkın." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Terminal aracıları{ph1} (Claude Code, Codex , Gemini CLI ): oturumdan " +"çıkın ve yeniden başlatın." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Temsilcinize bir hedef yol ve belirli bir soru verin. Bir JavaScript veya " +"Electron uygulaması için şununla başlayabilirsiniz:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"{ph0} dosyasına bakın ve verileri nasıl dışa aktardığını bulun. İlgili giriş" +" noktalarını, aramaları ve bağımlılıkları, bulgularınızın kaynak " +"konumlarıyla birlikte gösterin." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Yolu yerel hedefinizle değiştirin." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Bir klasörün tam yolunu nasıl alabilirim?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows:{ph1} Dosya Gezgini'nde klasöre sağ tıklayın ve {ph2}Yol " +"olarak kopyala'yı{ph3} seçin. Windows 10'da sağ tıklarken Shift tuşunu " +"basılı tutun." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS:{ph1} Finder'da klasöre sağ tıklayın, Seçeneği basılı tutun ve " +"{ph2}Yol Adı olarak \"...\" Kopyala'yı{ph3} seçin." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Herhangi bir sistem:{ph1} klasörü bir terminal penceresine sürükleyin " +"ve yolu görünür." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" +"Bir terminalde, boşluk içeren bir yolun etrafına tırnak işaretleri koyun." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "CLI'YU kullanın" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Uygulamayı çalıştırmadan bir JavaScript veya Electron uygulama klasörünü " +"veya ASAR arşivini analiz edin:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Statik uygulama analizi" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Yolu çıkarılan uygulama dizininizle değiştirin veya {ph0} dosyası. " +"Windows'DA {ph1} burada çalışıyor." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Bir uygulamayı nerede bulabilirim.asar dosyası mı?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron uygulamaları genellikle bir {ph0} klasöründe saklar:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0}Windows:{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (uygulamaya sağ tıklayın ve {ph3}Paket içeriğini " +"Göster'i{ph4} seçin)" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux:{ph1} genellikle {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "Bazı uygulamalar başka bir yere yüklenir. Uygulama için {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Sonuç, uygulamayı tanımlar, modüller arasındaki bağlantıları gösterir ve " +"kaynak konumlarını verir. REA'NUN çözemediği bağlantılar sonuçta " +"işaretlenir." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Kabuğunuzda kalıcı bir {ph0} komutu istiyorsanız:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "CLI'YU kurun" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}JavaScript uygulama kılavuzu ile devam edin{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Makine kodu programlarının analizini ayarlama" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Makine kodu programlarının yerel bir analiz aracına ihtiyacı vardır. " +"Aşağıdan birini seçin ve yapılandırın, ardından REA'YA yürütülebilir " +"dosyanızı veya kitaplığınızı verin." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Bir araç seçin: Ghidra, Hopper veya IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Mevcut bir Ghidra 12.1 kullanın.x kurulum ve Linux veya macOS'DA, x64 veya " +"arm64'te 64 bit JDK 21 veya daha yenisi. Ghidra kurulumunuzun ana bilgisayar" +" mimariniz için yerel bir kod çözücüye ihtiyacı vardır. Kur'u çalıştırmadan " +"önce yolları ayarlama:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Ghidra kurulumunuzu bağlayın" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra bağlantısı · macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Her iki yolu da mevcut kurulumlarınızla değiştirin. Kur bunları denetler ve " +"seçtiğiniz istemci için geçerli ayarları kaydeder. Linux arm64'te, " +"Ghidra'NUN yerel kod çözücüsünü ayrı ayrı oluşturmanız gerekebilir." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Ghidra'YU Windows'ya bağlayın" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64, yerel x86 ve x64 PE uygulamaları ve sabit yerel NTFS " +"sürücülerindeki dll'ler için deneysel, salt okunur desteğe sahiptir. Mevcut " +"bir Ghidra 12.1 kullanın.x kurulum ve 64 bit JDK 21 veya daha yenisi:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra bağlantısı * Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"İki yolu kurulumlarınızla değiştirin, ardından kurulum planını gözden " +"geçirin." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Hopper'YU macOS veya Linux'YA bağlayın. Yukarıdaki kurulum komutunu " +"çalıştırın; Mevcut bir kurulumu algılar veya onayınız için bir kurulum planı" +" sunar." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"macOS'DA, katılımsız bir analizden önce Hopper'NUN ilk deneme modu seçimini " +"veya lisans etkinleştirmesini tamamlayın." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"Doğrulanmış IDA kurulumları, ekli bir GUI veya başsız bir veritabanı için " +"mevcut bir MCP kaydıyla Windows kullanır. Linux ve macOS başsız analizi " +"doğrulanmamıştır." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Mevcut bir IDA MCP kaydını bağlayın" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Yukarı akış sunucusunun çalışma {ph0}, {ph1} ve isteğe bağlı {ph2} bir JSON " +"dosyasında saklayın. {ph3} girdisi olan varolan bir {ph4} nesnesi de kabul " +"edilir. Kurulumdan önce REA dosyasını bu dosyaya yönlendirin:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA bağlantısı * Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"Ekli profil, IDA'DA zaten açık olan orijinal ikili ile yukarı akış eski " +"1.4.0 araçlarını kullanır. Başsız profil, yukarı akış veritabanı süpervizörü" +" API'sini ve {ph0}; gerçek doğrulama, bir IDA 9.3 Windows x64 süpervizörünü " +"kapsar. Doktor, IDA'YU başlatmadan kaydı kontrol eder." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"CLI sorgusunda {ph0} ile REA'YA orijinal yürütülebilir yolu verin. Bir aracı" +" için, {ph1}REA kayıt ortamına REA_İDA_MCP_CONFİG ekleyin ve ikili dosyayı " +"açarken IDA öğesini seçin." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "" +"Mevcut bir Ghidra kurulumu için aşağıdaki işlevlerden birini inceleyin::" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Fonksiyon analizi" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "{ph0} incelemek istediğiniz işlev adı veya adresle değiştirin." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "Makine kodu programları oturumlarının analizi nasıl çalışır?" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Her CLI komutu ikili dosyayı içe aktarır ve analiz eder, ardından oturumunu " +"kapatır. Aracınızın MCP sorguları, oturum açıkken içe aktarılan ikili " +"dosyayı yeniden kullanır." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}İşlev sonucunun kurtarılmış bir hesaplamaya nasıl yol açtığını görmek " +"için makine kodu programlarının analizi örneğini izleyin{ph1}." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Yardım almak" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Temsilciniz REA'YU görmüyorsa" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Kur'dan sonra istemciyi yeniden başlatın veya yeniden bağlayın. REA " +"bağlantısını {ph0} kontrol edin; Codex için :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Bir müşteriyi kontrol et" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Bir sağlayıcının dikkat etmesi gerekiyorsa" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Kullandığınız sağlayıcıyı kontrol edin. Ghidra için :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Bir sağlayıcıyı kontrol edin" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "Rapor, başarısız kontrolü ve önerilen bir sonraki adımı verir." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} REA SSS{ph1}{ph2} Güncellemeler, aracılar ve analizler hakkında hızlı " +"cevaplar.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Bir ikili, bir Electron uygulaması ve bir tarayıcı için çalışılan bir " +"araştırma kılavuzu seçin{ph1}{ph2}.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} GitHub sorunları{ph1}{ph2} Komut ve tanılama ile ilgili bir sorun " +"bildirin.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} REA topluluk{ph1}{ph2} Soruları, soruşturmaları ve devam eden " +"çalışmalar.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "REA'YU Kurun ve Kodlama Aracınızı Kurun" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"REA'YU kodlama aracınıza bağlayın veya terminalden yerel bir JavaScript veya" +" Electron uygulamasını inceleyin. Kurulum, ilk sorular ve yerel sağlayıcı " +"kılavuzları." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Node.js sürüm kontrolünü kopyalayın" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Windows için Node.js kurulum komutunu kopyalayın" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "PowerShell yürütme ilkesi komutunu kopyala" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Homebrew Node.js kurulum komutunu kopyalayın" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "macOS için fnm kurulum komutunu kopyalayın" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "macOS için Node.js 24 komutlarını kopyalayın" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Linux için fnm kurulum komutunu kopyalayın" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Linux için Node.js 24 komutlarını kopyalayın" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA başlangıç kılavuzu" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "REA kurulum istemini kopyalayın" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Aracı kurulum komutunu kopyala" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "JavaScript analiz komutunu kopyalayın" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "CLI kurulum komutunu kopyalayın" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Ghidra bağlantısını kopyala * macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Windows PowerShell için Ghidra bağlantısını kopyalayın" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Windows PowerShell için IDA bağlantısını kopyalayın" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Yerel işlev analizi komutunu kopyala" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "İstemci tanılama komutunu kopyala" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Sağlayıcı tanılama komutunu kopyala" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Ana{ph1} Sayfa / {ph2}Kılavuzlar{ph3} / Tarayıcı gözlemi" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Ne olduğunu görün{ph0}tıkladığınızda." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Bir eylemi, ağ isteğini ve bir indirme oluşturan JavaScript'YU bağlamak için" +" küçük bir tarayıcı uygulaması kullanın." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "Bu kılavuzda" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Örnek{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Tarayıcıyı aç{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Temsilcinize sorun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}CLI'DAN yakalama{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}İsteği ve komut dosyasını okuyun{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Dışa Aktar'ı tıklattığınızda ne olur?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"{ph0}Notes tarayıcı örneğinde{ph1} {ph2}Notları Dışa aktar{ph3} düğmesi " +"bulunur. Tıklamak {ph4}, iki notu CSV olarak biçimlendirir ve bir indirme " +"başlatır." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "CSV indirmek için tıklayın" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 *{ph1}{ph2} Notları Dışa aktar'ı tıklattığınızda{ph3}{ph4}, yakalama" +" çalışırken tarayıcınızda eylemi gerçekleştirin.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA{ph1}{ph2} İsteği kaydedin{ph3}{ph4} Seçilen sayfadan istek " +"URL'sini, yanıt durumunu ve JSON yapısını yakalayın.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * Aracınız{ph1}{ph2} Dışa aktarma kodunu okudu{ph3}{ph4} Gözlenen " +"isteği {ph5} dışa {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Notları Dışa Aktar'ı tıklatmadan önce yakalamayı başlatın." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Uzaktan hata ayıklama ile Chrome'yu açın" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Barındırılan Notlar örneğini ayrı bir tarayıcı profili ve yerel hata " +"ayıklama bağlantı noktasıyla açın. Linux üzerinde :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Örnek tarayıcıyı başlatın" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Kopyala" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Yüklü tarayıcınızın yürütülebilir yolunu macOS veya Windows'DA kullanın. " +"Sayfa URL'sini incelemek istediğiniz başka bir sayfayla değiştirebilirsiniz." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA bu mevcut tarayıcıya bağlanır. Sayfanın kontrolünü elinizde tutar, " +"işlemi gerçekleştirir ve işiniz bittiğinde tarayıcıyı kapatırsınız." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Temsilcinizden bir eylemi izlemesini isteyin" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Notları Dışa Aktar'ı tıklatırken bu sayfayı incelemek için " +"REA kullanın. Hangi isteği yapar ve CSV nasıl oluşturulur?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Örnek istemi. Aracınıza hata ayıklama bitiş noktasını verin, {ph0} ve sayfa " +"URL'si. Tıklamadan önce yakalamayı başlatmasına izin verin." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Temsilciniz sayfa hedefini keşfeder, bir gözlem penceresi başlatır ve ortaya" +" çıkan kanıtları okur. Daha sonra dışa aktarmanın arkasındaki komut " +"dosyasını inceleyebilir." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Veya terminalden yakalama" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Sayfanın hedef kimliğini bulun:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Sayfayı bul" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Notes örnek URL'sini içeren hedefi seçin. {ph0}Aşağıdaki TARGET_İD öğesini " +"kimliğiyle değiştirin, ardından çalıştırın:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Sonraki on saniyeyi yakalayın" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Komutun birkaç saniye bağlanmasına izin verin, ardından o tarayıcıda " +"{ph0}Notları dışa aktar'ı{ph1} tıklayın. Sonuç, gözlem penceresi sona " +"erdikten sonra gelir." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Yakalanan sonuç, seçilen sayfayı, o penceredeki ağ etkinliğini ve JSON " +"yanıtının şeklini içerir. Daha önceki istekler bu yakalamanın dışındadır." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "İsteği okuyun ve komut dosyasını dışa aktarın" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Yerel Notlar örneğinde REA 4.1.0 ile kaydedildi" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Yakalanan gerçek" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Değer" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Talep" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Yanıt" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "İstek başlatıcı" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * komut dosyası" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Yanıt yapısı" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} {ph1} ve {ph2} alanları ile" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Yüklenen komut dosyalarını okuyun" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"İstek veri kaynağını tanımlar ve REA dışa {ph0}. Verilerin nasıl " +"kullanıldığını görmek için yakalanan komut dosyası kaynağını okuyun:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"İndirme, JSON yanıtı kullanılarak sayfada oluşturulur. CSV biçimlendirme " +"adımı komut dosyasından gelir; ağ yakalama, bu tıklamanın {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "{ph0}. Virgül veya tırnak işareti içeren başlıklardan nasıl kaçar?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Yüklü bir JavaScript veya Electron uygulaması için dosyaları ve işlem " +"sınırlarını takip etmek üzere {ph0}uygulama iş akışına{ph1} devam edin." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Tarayıcı ve Ağ Analizi - REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"REA ile bir Not dışa aktarımını gözlemleyin: bir tarayıcı sayfası seçin, bir" +" tıklama yakalayın, isteği inceleyin ve dışa aktarma komut dosyasını " +"izleyin." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Tarayıcı gözlemi" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Kopyala örnek tarayıcıyı başlat" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Örnek istemi kopyala" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Sayfayı kopyala bul" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Sonraki on saniyeyi kopyala" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Kopyala yüklenen komut dosyalarını oku" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Ana{ph1} Sayfa / Rehberler" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REA kılavuzları." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Yerel bir işlevi, bir Electron dışa aktarımını veya bir tarayıcı isteğini " +"analiz edin. Her kılavuz bir bilgi istemi, kod ve sonuçlar içerir." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "İlk soruşturma" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "REA'YU ayarlama" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Kodlama aracınızı bağlayın veya terminalden REA kullanın." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "REA ile başlayın" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Makine kodu programları" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Sol / sağ ses konumunun bir hesaplamasını kurtarın" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Bir Windows oyun yürütülebilir dosyasıyla başlayın. Talimatları inceleyin, " +"bir arayanı takip edin, sayısal sabitleri okuyun ve kurtarılan C'yi kontrol " +"edin." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Makine kodu programlarının analizi kılavuzu" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript VE Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Bir CSV dışa aktarımını izleyin" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Küçük bir Not uygulaması, oluşturucu, ön yükleme ve ana işleme bir özellik " +"yayar. API, IPC kanalı ve dosya yazıcısını bağlamak için REA kullanın." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript ve Electron kılavuzu" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Daha büyük bir paketlenmiş uygulama için {ph0}Notion pano köprüsü{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Tarayıcı davranışı" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Bir tıklamayı gözlemleyin" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Bir çalışma Notları örneği açın, bir dışa aktarma isteği yakalayın ve " +"yanıtını karşıdan yüklemeye dönüştüren kodu bulun." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Tarayıcı gözlem kılavuzu" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Tersine Mühendislik Kılavuzları - REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Kısa çalışılmış örneklerle REA'YU öğrenin: yerel bir hesaplama, bir Electron" +" CSV dışa aktarma ve bir tarayıcı isteği." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}Ana{ph1} Sayfa / {ph2}Kılavuzlar{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Bir Electron izleyin {ph0} CSV dışa aktarma." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Sayfa apı'sinden Electron IPC aracılığıyla CSV dosya yazıcısına bir düğme " +"tıklaması izleyin." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "Bu kılavuzda" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Örnek{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Temsilcinize sorun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Dışa aktarma kodunu izleme{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Örneği deneyin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}CSV yazıcısını inceleyin{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "\"Notları dışa aktar\" nereye gidiyor?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Bu kılavuz küçük bir Electron uygulaması kullanır. {ph0}Notları Dışa " +"Aktar'a{ph1} tıklamak sayfadaki bir API'yi çağırır, ana işleme geçer ve bir " +"CSV yazar. Davranış birkaç dosyaya yayılmıştır." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "CSV, Electron süreçleri boyunca dışa aktarır" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Oluşturucu → notları önceden yükle{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}, ön " +"{ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}İşlemler arasında{ph1}{ph2}{ph3}{ph4}{ph5} Ön yükleme, bir IPC kanalı " +"çağırır: ana işleme adlandırılmış bir ileti.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Ana işlem{ph1}{ph2} Bir dışa aktarma işleyicisi{ph3}{ph4}{ph5} bu " +"kanalı işler ve CSV yazıcısını çağırır.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} notları biçimlendirir → {ph1} {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA, değişmez IPC çağrısını işleyicisiyle eşleştirir ve açıkta kalan API'yi " +"tanımlar. Yol koddan çıkarılır; Bir çalışma zamanı yakalama neyin " +"yürütüldüğünü kontrol edebilir." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "CSV dışa aktarma hakkında soru sorun" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Aracınızı REA'ya bağlayın{ph1} ve ona uygulama dizinini veya ASAR " +"dosyasını verin:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Kopyala" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Bu uygulamada notları dışa aktardığımda ne olacağını bulmak" +" için REA kullanın. CSV nerede oluşturulur?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "Örnek istemi. Uygulama klasörünün veya {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA uygulama dosyalarını okur ve giriş noktalarının, modüllerin ve işlem " +"sınırlarının bir haritasını oluşturur. Aracınız, soruşturmayı dışa aktarma " +"özelliğine daraltmak için bu haritayı kullanır." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Dışa aktarma kodunu izleme" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "Sayfa küçük bir API çağırır" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"Sayfa yöntem adını biliyor. Uygulama, ön yüklemede yaşar ve bu da onu " +"işleyiciye gösterir." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA {ph0} ve değişmez kanal {ph1}. Bu çağrıyı ana işlemdeki tek eşleşen " +"işleyiciyle eşleştirir." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"İşleyiciyi okumak orijinal soruyu yanıtlar: {ph0} notları biçimlendirir ve " +"ana işlem {ph1}." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Aşağıdaki indirilebilir örnekte REA 4.1.0 tarafından kaydedilmiştir. Kaynak " +"konumları API, kanal ve işleyici bulgularına eşlik eder." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Örneği kendiniz analiz edin" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Örnek ZİP dosyasını indirin{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Altı kaynak dosyaya göz atın" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Statik uygulama analizi" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Yolu, fermuarını açtığınız klasörle değiştirin. Normalized_result içinde bir" +" IPC kanalı ve bir eşleşen işleyici bulmalısınız{ph0}. Kaynak konumları " +"normalized_result {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Kendi uygulamanız için dizini veya ASAR yolu ile aynı komutu kullanın. Bir " +"aracı, REA'NUN özellik izleme araçlarıyla değişmez bir dizeyi, API adını " +"veya IPC kanalını takip edebilir." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "CSV yazıcısını inceleyin" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"{ph0}. Hangi girdiler CSV yazıcısına ulaşır ve dosyayı yazmak başarısız " +"olursa ne olur?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Bu ayrıntıları incelemek için kaynak konumlarını kullanın. Hesaplanan kanal " +"adları ve belirsiz işleyiciler çözülmeden kalabilir; çalışma zamanı " +"gözlemleri size bunları araştırmanın başka bir yolunu sunar." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Takip et Notion pano köprüsü{ph1} {ph2}Paketlenmiş bir Electron " +"uygulamasına aynı yaklaşımı uygulayın.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Bir tarayıcı dışa aktarımının Gerçek bir tıklama yakaladığını " +"gözlemleyin{ph1}{ph2} ve hangi istekte bulunduğunu görün.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Bir özellik yerel koda bağlı olduğunda yerel bir işlevi ikili olarak " +"takip{ph1}{ph2} etmeye devam edin.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "JavaScript ve Electron Analizi - REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"REA ile bir oluşturucu API'sı, ön yükleme ve IPC işleyicisi aracılığıyla bir" +" Notes CSV dışa aktarımını izleyin. İndirilebilir örnek dosyalar ve " +"doğrulanmış bir analiz sonucu içerir." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript VE Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Örnek istemi kopyala" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Statik uygulama analizini kopyala" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Ana{ph1} Sayfa / {ph2}Kılavuzlar{ph3} / Makine kodu programlarının " +"analizi" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "DX-Ball'NUN kurtarma{ph0}sol / sağ ses konumunun hesaplanması." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Orijinal talimatları inceleyin, girişi ve sabitleri belirleyin, ardından " +"kurtarılan C'yi kontrol edin." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "Bu kılavuzda" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Örnek{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Temsilcinize sorun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}REA sonuçlarını okuyun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Kurtar ve kontrol et{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Kendi ikili dosyanızı kullanın{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Sol / sağ stereo ses konumlandırmasını hesapla" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"DX-Ball'DA bir tuğla vuruşu yatay bir ekran konumu sağlar. Ses kodu onu sola" +" / sağa kaydırma değerine dönüştürür." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"Başlangıç işlevi {ph0}olan 0x00406400, kısa bir ayrıştırıcı sonucuna " +"sahiptir: {ph1} çağrısı. REA ayrıca aracıya eksik aritmetiği araştırmanın " +"bir yolunu veren talimatlarını ve arayanlarını da döndürür." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Bu şartlarda yeni misiniz?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Talimatlar:{ph1} işlemcinin çalıştırdığı adımlar, {ph2} veya {ph3} gibi" +" okunabilir biçimde gösterilir." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Decompiler sonucu / sözde kod:{ph1} bir analiz aracının talimatları " +"tekrar C benzeri koda dönüştürme girişimi. Bu örnekte olduğu gibi parçaları " +"kaçırabilir." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Arayan:{ph1} bunu çağıran bir işlev. Hangi değerlerin iletildiğini " +"gösterir." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Adres:{ph1} programdaki 0x00406400 gibi onaltılık yazılmış bir {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Sabitler:{ph1} programda saklanan, ham bayt olarak okunan ve kodu " +"çözülen sabit sayılar." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Üç kanıt, bir hesaplama" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * Yönergeler{ph1}{ph2} Bir tamsayı girişi{ph3}{ph4} Yığın okuması, " +"kayan nokta yönergelerinin kullandığı değeri sağlar.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * Arayan{ph1}{ph2} Bir ekran koordinatı{ph3}{ph4} Tuğlaya çarpan " +"arayan {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * Veri baytları{ph1}{ph2} Başvurulan baytların sayısal " +"sabitleri{ph3}{ph4} {ph5}, {ph6}'a ve bir ölçek değerine çözülür.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA yönergeleri, işlev çağrısı ilişkisini ve baytları sağlar. Ajan onları " +"birlikte yorumluyor." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Davranış hakkında soru sorun" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"REA'YU {ph0}aracınıza bağladıktan{ph1} ve {ph2}makine kodu programlarının " +"analizi aracını kurduktan{ph3} sonra, yerel yürütülebilir dosyayı ve bir " +"soruyu sağlayın:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Hangi analiz aracını kullanmalıyım?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA, yerel programları okumak için bunlardan birine ihtiyaç duyar:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper{ph1} (macOS veya Linux): REA'NUN kurulumu onu algılar veya " +"kurmayı teklif eder. macOS'DA Hopper'YU bir kez açın ve ilk analizinizden " +"önce demo modunu seçin veya bir lisansı etkinleştirin." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra{ph1} (macOS veya Linux; Windows üzerinde deneysel): ücretsiz, " +"ancak mevcut bir Ghidra 12.1'e ihtiyacı var.x kurulum ve 64 bit JDK 21 veya " +"daha yenisi." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA{ph1} (Windows): MCP kaydı olan mevcut bir IDA kurulumu için." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Adımlar için {ph0}Makine kodu programlarının analizini ayarlama{ph1} " +"konusuna bakın." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Kopyala" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}DX-Ball'NUN stereo ses konumlandırmasını nasıl " +"hesapladığını bulmak için REA kullanın. Hesaplamayı açıklayın ve kodu " +"gösterin.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Örnek istemi. Aracınıza yerel DX-Ball 1.07 yürütülebilir dosyanızın yolunu " +"verin. REA, DX-Ball içermez, bu nedenle kendi kopyanızı kullanın veya sahip" +" olduğunuz başka bir küçük Windows programı hakkında aynı tür soruları " +"sorun." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Bir dosyanın tam yolunu nasıl alabilirim?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows:{ph1} Dosya Gezgini'nde dosyayı sağ tıklatın ve {ph2}Yol " +"olarak kopyala'yı{ph3} seçin. Windows 10'da sağ tıklarken Shift tuşunu " +"basılı tutun." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS:{ph1} Finder'da dosyaya sağ tıklayın, Seçeneği basılı tutun ve " +"{ph2}Yol Adı olarak \"...\" Kopyala'yı{ph3} seçin." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Herhangi bir sistem:{ph1} dosyayı bir terminal penceresine sürükleyin " +"ve yolu görünür." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "REA sonuçlarını okuyun" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Girişi oku" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Talimatlar bir tamsayı argümanı yükler ve kayan nokta aritmetiği için " +"dönüştürür. Bu, ilk sözde kod görünümünde bulunmayan girdidir." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Arayanı takip et" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA, tuğlaya çarpan arayanı tanımlar. Önceki talimatları döşeme koordinatını" +" 30 ile çarpar; {ph0} (20) eklemek tuğlanın ekran konumunu verir." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Başvurulan sabitleri okuyun" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"Aritmetik bu adreslere başvurur. Baytları okumak gerçek değerleri sağlar; " +"talimat sırası aracıya bunların nasıl kullanıldığını söyler." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Kurtarılan işlevi yazın ve kontrol edin" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"1.0 ölçeğiyle, 0, 320 ve 640 ekran konumları, tamsayı dönüşümünden önce " +"-500, 0 ve 500 ile eşleşir. Hesaplama, ekranın merkezini stereo alanın " +"ortasına yerleştirir." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"Aracı kullandı REA C'yi yazmak için bulguları. Ayrı kontroller, 3.205 girişi" +" orijinal x86 işleviyle karşılaştırdı ve tam işlevin derlenmiş 63 baytının " +"tümünü yeniden üretti." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}Tüm inceleme ve assembly-to-C karşılaştırmasına bakın{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Kendi ikili dosyanızla deneyin" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Makine kodu programları sağlayıcısının bir analizini bağlayın{ph1}, " +"ardından aracınıza yerel bir yürütülebilir dosya veya kitaplık ve " +"araştırılacak bir özellik verin. Faydalı başlangıç soruları arasında \"Bu " +"dosya nasıl ayrıştırılır?\" veya \"Bu menü eylemini hangi işlev işler?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Bir işlev adını veya adresini zaten biliyorsanız, bunu terminalden " +"sorgulayabilirsiniz. Yapılandırılmış bir Ghidra kurulumu için:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Fonksiyon analizi" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Hedef yolu ve {ph0} yolu kendi işlev adınız veya adresinizle değiştirin. Her" +" CLI çağrısı ikili dosyayı içe aktarır ve analiz eder, ardından oturumunu " +"kapatır. Aracınızın MCP sorguları, oturum açıkken içe aktarılan ikili " +"dosyayı yeniden kullanır." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Talimatlar ve referanslarla birlikte sözde kodu okuyun. Bir sonuç bir " +"çağrıyı veya değeri çözümsüz bıraktığında, bir sonraki soru olarak bu konumu" +" kullanın." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Yerel İkili Analiz - REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"REA ile yerel bir hesaplamayı kurtarın: talimatları inceleyin, bir arayanı " +"takip edin, sabitleri okuyun ve yeniden yapılandırılmış C'yi kontrol edin." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Makine kodu programlarının analizi" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Örnek istemi kopyala" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Kopyalama işlevi analizi" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "REA'YU ayarlama" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}REA'YU ayarlama{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}RE nedir?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}REA nasıl yardımcı olur?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Dinozor oyunu{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Hesap makinesi{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}REA'YU deneyin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Daha derine inin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Yardım ve geri bildirim{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Topluluk{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Kodlama aracınızla tersine mühendislik" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Yazılımın nasıl{ph0}çalıştığını öğrenin." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA, kodlama ajanınıza bir programı incelemek ve ne yaptığını açıklamak için" +" gereken araçları sağlar." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "RE'Yİ zaten biliyor musun? {ph0}Analiz kılavuzlarına atla →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Daha derine inmek ister misin? {ph0}Blogu Oku →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Bu istemi kodlama ajanınıza yapıştırın:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Kopyala" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Ya da terminalde şu komutu çalıştırın:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "" +"Kurulum planını inceleyip onaylayın, ardından ajanınızı yeniden başlatın." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Tersine mühendislik nedir?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"{ph0}Programın kendisini inceleyerek{ph1} yazılımın nasıl çalıştığını " +"anlamaktır." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"Amaç: Bir özelliği {ph0}açıklamak{ph1}, {ph2}değiştirmek{ph3} veya yeniden " +"{ph4}inşa etmek için yeterince iyi anlayın.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "REA’dan önce · {ph0}Kendiniz{ph1} araştırırsınız" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Dalları çöz" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} İzleme çağrıları" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Kuralı kurtar" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Orijinal x64 * seçilen talimatlar{ph1}{ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * Hangi şube?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Aynı yere iki atlayış. Bunlar hangi operatörler?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Komut kimliklerine bakın, ardından dalı etiketleyin." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Böl ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Çarpın ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Çağrılan işlevler ne yapıyor?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"“100 açıktır. Aramalar sadece adres. {ph0}Hangisi bölünüyor? Hangi değer " +"giriyor?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Yardımcı işlevleri inceleyin ve depolanan değerleri izleyin." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Bölmek" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * Kural nedir?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Bu yol diğer girdiyle çarpılır. Yani% 10, + 'dan sonra {ph0}200'ün% 10'u " +"anlamına{ph1} gelir.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "İşlenenleri adlandırın ve her iki operatör yolunu da kontrol edin." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Açıklayıcı uzman akıl yürütme" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Talimatları çözer, işlev çağrılarını takip eder ve hesaplamayı yeniden " +"yapılandırırsınız.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "REA ile · {ph0}Ajanınıza{ph1} sorarsınız" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Tek bir istem." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Ajanınıza {ph0}günlük dille{ph1} sorun." + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Örnek bilgi istemi * Hesap Makinesi" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Örnek cevap · bulgulara dayanarak" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "+ 'Dan sonra, % düğmesi {ph0}ilk sayının bir yüzdesini alır.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA’nın sağladıkları" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "İşleyicinin talimatları, derlenmiş kod ve çağrılar." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Ajanınızın açıklaması" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "" +"Hangi dalın uygulandığı, neyi hesapladığı ve nasıl yeniden oluşturulacağı." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Yüklü Hesap Makinesi dll'sinden seçilen derleme. Düşünceler ve cevaplar " +"bulguları göstermektedir. Hesap {ph0}Makinesi örneğine devam edin ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}İki örnek deneyelim.{ph1} Bir oyunun hızını değiştirin, ardından Hesap " +"Makinesine dönün ve% düğmesini yeniden oluşturun." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Örnek 01 * Chrome'nun dinozor oyunu" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Dinozor neden hızlanıyor?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Hedef" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Oyunu {ph0}ayarlanabilir hızda yeniden oluşturun.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Neden tersine mühendislik?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"İvmesini yeniden üretmek için {ph0}koşu oyununda kurala{ph1} ihtiyacımız " +"var: ne kadar hızlı başladığı, ne kadar arttığı ve ne zaman durduğu." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Yeniden oluşturulan oyunu oyna" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Oyna" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Zıpla ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Yeniden başlat" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Hız" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Kurtarılan hızlanma kuralını kullanın" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Orijinal kural: 6'dan başlayın, ardından 13'e doğru artırın." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Kendi hızınızı ayarlamak için kaydırıcıyı hareket ettirin. Boşluk veya " +"Atlama bir kaktüsü temizler." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Yeniden yapılandırmayı oynatmak için JavaScript'YU etkinleştirin. Yukarıdaki" +" kod ve açıklama okunabilir durumda kalır." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA’nın döndürdüğü sonuç" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Komut dosyası aslında sayfada çalışıyor.{ph1} Aracı güncelleme işlevini" +" ve hız ayarlarını okur, ardından bu kuralı yeni bir oyunda kullanır." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Örnek istemi * Dinozor oyunu" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Bu dinozor oyununu incelemek için REA kullanın. Neden daha " +"hızlı oluyor? Hız kuralını gösterin, ardından ayarlanabilir hıza sahip küçük" +" bir versiyon oluşturun.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Denetlenen hedef: {ph0}wayou'nun Chromium'dan türetilmiş tarayıcı " +"sürümü{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}6'dan başla.{ph1} Hız {ph2}13{ph3}'ün altındayken çarpışma olmadan her " +"güncellemeye {ph4}0,001{ph5} ekleyin." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Hız laboratuvarını açın" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Her bölüm ne yapar" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 * REA{ph1}{ph2} Çalışan oyunun senaryosunu okuyun{ph3}{ph4} Gerçek " +"kodunu ve ayarlarını aracıya döndürün.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * Temsilciniz{ph1}{ph2} Kuralı yeniden oluşturun, bir kontrol " +"ekleyin{ph3}{ph4} Hız kaydırıcılı küçük bir oyunda kurtarılan ivmeyi " +"kullanın.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 *{ph1}{ph2} Hızı değiştirir ve oynarsınız{ph3}{ph4} Orijinal ivmeyi " +"deneyin, ardından kendi hızınızı seçin.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Komut dosyasına, kontrollere ve analizin nasıl deneneceğine bakın" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA, HTTP tarayıcı sürümünü yerel bir hata ayıklama bağlantısı aracılığıyla " +"denetledi ve yüklenen {ph0}, kaynağı ve özeti dahil." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Engeller ve otomatik zamanlama devre dışı bırakılmış, kontrollü bir tarayıcı" +" kontrolünde orijinal oyunun güncelleme işlevini çağırdık. 4.000 " +"güncellemeden sonra hız 10.0'dı; 10.000'den sonra 13.0'dı ve bir ondalık " +"basamağa yuvarlandı." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"Yeni mini oyun bu hız kuralını koruyor. Çizim, atlama ve çarpışma kodu küçük" +" bir öğretim uygulamasıdır. Yeni kodu görmek için {ph0}laboratuvarı " +"açın{ph1} ve aynı hız kontrolünü yapın." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Hedefi kendiniz incelemek için {ph0}dinozor sayfasını{ph1} kullanarak " +"{ph2}tarayıcı bağlantı adımlarını{ph3} izleyin. Aracınıza bu sayfa URL'sini " +"ve yerel hata ayıklama bitiş noktanızı verin, ardından yukarıdaki istemi " +"kopyalayın." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Denetlenen hız kodu{ph1} * {ph2}Chromium Yazarları · BSD lisansı{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Örnek 02 * Windows Hesap Makinesi" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Hesap Makinesi’nin % düğmesini yeniden oluşturun." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"{ph0}Hem + hem de × 'yi doğru işleyen küçük bir hesap makinesi " +"oluşturun.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Aynı düğme {ph0}+ ve × 'den sonra farklı kurallar kullanır.{ph1} Yüzdenin " +"hangi sayıya uygulandığını bulmak için yüklü uygulamayı inceliyoruz." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Hesaplamayı deneyin" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Sıfırla" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "200'ün% 10'u = 20. Sonra 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Denetlenen yüzde kuralının etkileşimli gösterimi." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Bir dal 100'e bölünür. Diğeri de ilk sayı ile çarpılır.{ph1} Aracı, % " +"düğmesini yeniden oluşturmak için her ikisini de kullanır." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Bu örnek için {ph0} ve {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Örnek komut istemi * % düğmesini " +"yeniden oluştur" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Windows Hesap Makinesinin% düğmesini incelemek için REA " +"kullanın. Kuralları + ve × 'den sonra kurtarın, ardından her ikisini de " +"kullanan küçük bir hesap makinesi oluşturun.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "İle +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}İlk sayının% 10'unu alın.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "İle ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}% 10'u 0.1.200 × 0.1 = 20'ye çevirin{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Yüklü uygulamadan çalışan bir% düğmesine" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA kütüphaneyi okur{ph1}{ph2}% işleyicinin kodunu " +"döndürür{ph3}{ph4} İşlev operatörü kontrol eder ve {ph5} sabitini " +"kullanır.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * Temsilciniz bunu yorumlar{ph1}{ph2} Kuralları açıklayın ve " +"çoğaltın{ph3}{ph4} Dalı Microsoft'un kaynağıyla çapraz kontrol edin, " +"ardından + ve × üstünü deneyin.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Gerçek kodu ve cevabın nasıl kontrol edildiğini görün" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"REA 4.1.0: Windows Hesap Makinesi 11.2508.4.0, x64 ile denetlendi. " +"Okunabilir özet, kurtarılan dalı açıklamak için Microsoft'un genel " +"kaynağından gelen adları kullanır." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Yüzde uygulaması{ph1} * {ph2}Microsoft'un test durumları{ph3} * " +"{ph4}Yerel kurulum kılavuzu{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "İlk soruşturmanız" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Küçük bir uygulamada REA'yu deneyin." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Notlar örneğimizi indirin, CSV dışa aktarımını izleyin ve değiştirilen bir " +"girişi kontrol edin." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Kılavuzlu örneği deneyin" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Daha derine inmek ister misiniz?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Temsilcinize neyi anlamak veya inşa etmek istediğinizi söyleyin. REA ile, " +"{ph0}bu web sitesini klonlamaktan{ph1} {ph2}bir oyunu yürütülebilir " +"dosyasından yeniden oluşturmaya kadar her konuda birlikte " +"çalışabilirsiniz.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Örnek bilgi istemi * Web sitesi" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Evet, bu." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Örnek istemi * Oyun rekonstrüksiyonu" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Bu oyunu yürütülebilir dosyasından yeniden oluşturmak için " +"REA kullanın. C'deki oyun mantığını kurtarın ve orijinaline karşı test " +"edin.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}DX-Ball örnek olay incelemesine bakın →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "Kurulum ve analiz adımları için hedefinizi seçin:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Makine kodu programları" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Yürütülebilir dosyalar ve kitaplıklardaki işlevleri, dizeleri, referansları " +"ve işlev çağrısı ilişkilerini inceleyin." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Makine kodu programlarının analizi kılavuzu" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript VE Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Modülleri, rotaları, ıpc'yi ve yerel bağımlılıkları bir uygulama klasöründen" +" veya ASAR arşivinden eşleyin." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Uygulama iş akışları" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Tarayıcı ve çalışma zamanı etkinliği" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Seçilen tarayıcıyı veya işlem etkinliğini yakalayın, ardından sonuçları " +"koşular arasında karşılaştırın." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Tarayıcı gözlem kılavuzu" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Sorunuz var mı?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Sss'yi okuyun{ph1}, Discord'DA {ph2}bizimle sohbet{ph3} edin veya " +"hatalar ve özellik istekleri için {ph4}bir GitHub sorunu açın{ph5}." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Topluluğa katıl" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Soruşturmaları paylaşın ve Discord'DAKİ diğer REA kullanıcılarından yardım " +"alın. Proje güncellemeleri için X'te REA'YU takip edin." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA - Kodlama Aracınız için Tersine Mühendislik" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Kodlama aracınızla uygulamaları, ikili dosyaları ve tarayıcı davranışını " +"tersine mühendislik yapın. Net kılavuzları izleyin ve REA ile etkileşimli " +"örnekleri deneyin." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "REA kurulum istemini kopyalayın" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Kurulum komutunu kopyala" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Manuel Hesap Makinesi analizini takip edin" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Hesap Makinesi yüzdesi sorusunu kopyala" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Dinozor mini oyunu. Oyun odaklanırken Atlama düğmesini kullanın veya Boşluk " +"tuşuna basın." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Dinozor analizi istemini kopyala" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Hesaplamayı seçin" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Hesap makinesi analiz istemini kopyala" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Web sitesi proje istemini kopyala" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Oyun yeniden yapılandırma istemini kopyala" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Anasayfa{ph1} / {ph2}Vitrinler{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Örnek olay incelemesi * Aegis Kimlik Doğrulayıcı" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Bir kimlik doğrulayıcı nasıl çalışır{ph0}bir giriş kodu oluşturun?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Altı basamaklı bir kod her 30 saniyede bir değişir. Hesaplamayı bir Android " +"APK'da bulmak için REA kullanın, ardından kontrol edebileceğiniz bir saatle " +"yeniden oluşturun." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * Resmi sürüm APK * 6.9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Aegis'YU GitHub'DA görüntüleyin" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "Bir APK'DAN yeniden oluşturabileceğiniz bir koda" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * Özelliği bulun{ph1}{ph2} 3,077 sınıflar → oluşturma " +"yöntemleri{ph3}{ph4} REA paketi arar ve görüntüleme ve kopyalama eylemleri " +"tarafından kullanılan kodu izler.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * Hesaplama Süresini + hesap anahtarını okuyun{ph1}{ph2} → altı " +"basamaklı{ph3}{ph4} REA yöntemleri ve varsayılanları döndürür. Ajan nasıl " +"bir araya geldiklerini açıklıyor.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * Saati yeniden oluşturun ve kontrol{ph1}{ph2} edin. Kurallara " +"dikkat et.{ph3}{ph4}Yeni bir tarayıcı demosu kuralı yeniden üretir ve genel " +"referans durumlarına karşı kontrol eder.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "Bu vaka çalışmasında" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Temsilcinize sorun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Kod oluşturucuyu deneyin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Kodu REA ile bulun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Hesaplamayı okuyun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Yeniden yapılanmayı kontrol edin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}APK'YU kendiniz inceleyin{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Temsilcinize sorun" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"Uygulama değişen bir giriş kodu gösterir. Onu {ph0}neyin değiştirdiğini{ph1}" +" bulmak ve bu davranışı yeniden üretmek istiyoruz." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Kopyala" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"REA'NUN Android analizi yapılandırılmış olarak indirilen APK için bir örnek " +"istemi. APK {ph0}ve analiz kurulumunu edinin ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Kod oluşturucuyu deneyin" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"Uygulama zamanı {ph0}30 saniyelik bloklar halinde gruplandırır.{ph1} Bir kod" +" oluşturmak için blok numarasını hesap anahtarıyla birleştirir. Aynı anahtar" +" ve blok aynı kodu üretir." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Saati 60 saniye boyunca hareket ettirin" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Zaman" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "saniyeler" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Ayarlanabilir örnek saatimiz" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30 saniyelik blok" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Engel" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 saniye{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Oluşturulan kod" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Hesap anahtarı + blok → altı basamak" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Örnek zaman, saniye cinsinden" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 saniye" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 saniye" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"59 Saniyede: {ph0}287082.{ph1} 60 Saniyede: {ph2}359152.{ph3} Bir blok " +"içinde hareket etmek kodu değiştirmeden bırakır." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"Anahtar sabit, genel {ph0}RFC 6238 test verileridir{ph1}. Demo, APK'dan " +"kurtarılan hesaplamayı uygular." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"Diyagram sonucu 59 saniyede göstermektedir. Saati değiştirmek için " +"JavaScript'YU etkinleştirin." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Kodu REA ile bulun" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "APK'YU üç sınıfa daraltın" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} hesaplama adayıdır; diğer ikisi ilerleme çubuğu ve içe aktarılan " +"hesaplarla ilgilidir. TOTP, zamana dayalı bir kerelik şifre anlamına gelir." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Jeneratörü uygulamanın ekranına bağlayın" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA, zaman damgası aşırı yüklenmesini tanımlar ve temel yöntemin " +"arayanlarını bulur. Giriş Sahibini inceliyorum{ph0} daha sonra TotpInfo " +"çağıran ekranı {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"İstekler kısaltılmış bir giriş yolu gösterir. Sonuç sınıfı adları ortak " +"{ph0} öneki." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Hesaplamayı okuyun" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA, {ph0}saat dönüşümünü, varsayılan ayarları ve oluşturma yöntemlerini " +"döndürür.{ph1} Kurucular 30 saniyelik bir aralık ve altı basamak belirler; " +"zaman damgası yöntemi saniyeleri bir blok numarasına dönüştürür." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Zaman bloğu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Anahtar + blok" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Altı basamak" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Zaman bloğu seçer.{ph1} 30'dan 59'a kadar olan saniyelerin tümü blok " +"1'i verir. 60 Saniyede blok 2 olur." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}Anahtar da önemlidir.{ph1} Jeneratör, hesap anahtarını blokla " +"birleştirir. Farklı bir anahtara sahip bir hesap aynı anda farklı bir kod " +"gösterebilir." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Altı rakamı sakla.{ph1} 1.000.000'e bölündükten sonraki kalan, " +"gerektiğinde sıfırlarla doldurulur, böylece bir kod 0 ile başlayabilir." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Ekran için çizgi sarma ile çeşitli denetlenen yöntemlerden alıntılar. Sağ " +"panel açıklayıcı bir özettir. {ph0}Aegis kodu GPL-3.0'dır.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Jeneratörün içinde" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"Piyasaya sürülen APK, generateotp'yi kotlin'e yerleştiriyor{ph0}{ph1}. REA," +" TotpInfo çağrısını {ph2} ve bu gövdeyi döndürür; Orijinal kaynak yardımcı " +"hotp'yi {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"Son karma bayt bir konum seçer. Bu konumdaki dört bayt, pozitif bir 31 " +"bitlik sayı sağlar; biçimlendirme, onu istenen basamak sayısına indirir. " +"Yapıcının son argümanı, derleme tarafından tanıtılan kod biçimlendirme " +"dalını seçer." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Eşleşen sürüm kaynağıyla karşılaştırın{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Yeniden yapılanmayı kontrol edin" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Seçilen REA ile döndürülen Java yöntemlerini küçük bir test programında bir " +"araya getirdik. Çıktıları, zaman bloğu sınırları ve sıfırdan başlayan kodlar" +" da dahil olmak üzere {ph0}133 test vakasında{ph1} bağımsız bir yeniden " +"yapılandırmayla eşleşti." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Örnek zaman" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Altı haneli kod" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 saniye" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 saniye" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Jeneratör ayrıca {ph0}RFC 6238'de yayınlanan altı SHA-1 referans durumuyla " +"da eşleşir{ph1}. Tarayıcı uygulamasını bunlara karşı kontrol edin:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Referans kontrollerini çalıştırın" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Demonun hesaplamasını okuyun" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"Referans durumlarda sekiz basamak kullanılır. Kontrol ayrıca altı basamaklı " +"sonuçlarını da doğrular." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Doğrulama, çıkarılan Java yöntemlerini ve yeni demoyu çalıştırır. Android " +"APK statik olarak denetlendi." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "APK'YU kendiniz inceleyin" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}REA'YU macOS veya Linux'DA ayarlayın{ph1}, ardından bu iki dosyayı aynı" +" klasöre indirin. Windows'DA WSL gibi bir Linux ortamı kullanın." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Android analizinin tam bir JDK 17 veya daha yenisine ihtiyacı var. {ph0} " +"veya {ph1} ile seçin. Bu durumda JDK 21 kullanıldı." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "" +"REA dosyasını sağlayıcı dosyasına yönlendirin ve APK dosyasını inceleyin :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux'NIN sohbeti" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Aracınız yukarıdaki istemi kullanarak REA'NUN CLI'SU üzerinden devam " +"edebilir. {ph0}MCP için REA sunucusunun ortamına REA_JADX_MCP_JAR ekleyin ve" +" yeniden bağlayın." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Sıradaki soru: {ph0}Bir hesap sekiz basamak veya farklı bir zaman aralığı " +"kullandığında ne olur?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Kaynaklar" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Resmi Aegis 3.4.3 sürümü{ph1} * {ph2}Eşleşen kaynak taahhüdü{ph3} * " +"{ph4}GPL-3.0 lisansı{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}RFC 6238 referans durumları{ph1} * {ph2}Demo test verileri{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"9 Ekim 2026'da REA 6.1.0 ile denetlendi. Derlenmiş alıntılar Aegis'YA " +"yatırılır; diyagram, okunabilir özet ve tarayıcı yeniden yapılandırması yeni" +" öğretim materyalleridir." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK Tersine Mühendislik: Giriş Kodları - REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Aegis Android APK'YU REA ile inceleyin, altı basamaklı giriş kodu " +"hesaplamasını kurtarın ve ayarlanabilir bir saatle yeniden yapılandırmayı " +"deneyin." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK örnek olay incelemesi" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Aegis örnek istemini kopyala" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Giriş kodu hesaplamasını takip edin" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "APK denetim komutunu kopyalayın" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Anasayfa{ph1} / {ph2}Vitrinler{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Örnek olay incelemesi * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Bayrağı bulun{ph0}bir CTF ikilisi." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Küçük bir bayrak denetleyicisini incelemek, kurallarını denklemlere " +"dönüştürmek ve orijinal program baskısını REArea'yı{ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "maskeli kareler bayrak denetleyicisi * Kolay * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Orijinal meydan okumayı görüntüle" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "Bir ikiliden doğrulanmış bir cevaba" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * Kontrol Dizelerini Bulun{ph1}{ph2} → işlevleri kontrol{ph3}{ph4} " +"etme REA, bir girişi kabul eden veya reddeden istemi, referanslarını ve kodu" +" bulur.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * Kuralları ayıkla{ph1}{ph2} 36 karakter * 26 toplam{ph3}{ph4} REA, " +"her çekin arkasındaki talimatları ve verileri döndürür. Ajan onları " +"denklemlere dönüştürür.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * Kurtarılan bayrağı çözün ve çalıştırın{ph1}{ph2} → " +"Düzeltin!{ph3}{ph4}Bir Python betiği denklemleri çözer. REA, sonucu kabul " +"eden orijinal programı yakalar.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"Zorluk, Downunderctf'nin resmi deposunda yayınlanan joseph tarafından." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "Bu vaka çalışmasında" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Kontrol kodunu bulun{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Bir maske oku{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Okunabilir koda derleme{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Denklemleri çözün{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Cevabı kontrol et{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Kendin dene{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Kontrol kodunu bulun" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Bildiri 15 KB'lık bir yürütülebilir dosyadır. Bir bayrak ister, sonra {ph0} " +"veya {ph1}. Temsilcinize basit bir istekle başlayın." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Kopyala" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Ms_flag_checker'ı analiz etmek ve bayrağı bulmak için REA " +"kullanın. Kontrollerin nasıl çalıştığını açıklayın, ardından cevabı orijinal" +" programla doğrulayın.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"İndirilen zorluğun yerel olarak kullanılabildiği ve makine kodu " +"programlarının sağlayıcısına bağlı bir analizinin yapıldığı örnek bir bilgi " +"istemi." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "İşlevine giriş istemini takip edin" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"Başvuru, yürütülebilir dosyanın özgün işlev adları kaldırılmış olsa bile " +"aracıya araştırılacak bir yer verir." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Denetleyiciyi ve iki yardımcısını okuyun" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"İlk döngü 36 karakter kodunu kopyalar. Kontrol döngüsü bir maskenin kodunu " +"çözer, seçilen kodları toplar ve sonucu saklanan bir sayı ile karşılaştırır." +" 0x270 bayttaki {ph0}0x18{ph1} baytlık adımları 26 maske verir." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Bunlar, yeni bir REA analizinden seçilen sonuçlardır. Yerel hedef yol " +"görüntüleme için kısaltılmıştır; adresler REA içe aktarılan görüntüsü." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Bir kontrol bir karakteri ortaya çıkarır" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Denetleyici, girişi 6 × 6 ızgarada düzenler. Bir maske, hangi hücrelerin bir" +" miktara katkıda bulunduğunu seçer. Kompakt kodlaması, hücreleri atlamak " +"için negatif sayılar ve bunları seçmek için pozitif sayılar kullanır." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "Yedinci kontrol sadece bir pozisyon seçer. {ph0}Açık rakam{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Maskeyi ve hedefini ikiliden okuyun" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"MOVSX yönergesi, maske baytlarını imzalı değerler {ph0} okur. Bu yüzden " +"{ph1} -21 anlamına gelir. Hedef küçük endian bir tamsayıdır. Birlikte, bu " +"baytlar aracıya {ph2}55{ph3} olduğunu söyler, böylece karakter 7olur." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Talimatlardan okunabilir bir kontrole" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Toplama yardımcısını ve arayanını C'de aynı kurala bağlamak için bir adım " +"seçin." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Başlangıç" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Seçiniz" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Ekle" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Peşin" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Karşılaştır" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * seçilen orijinal talimatlar" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Okunabilir C * tek kontrol özeti" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * Sıfırdan başlayın.{ph1} {ph2} çalışan toplamı tutar." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * Maske hücresini kontrol edin.{ph1} Sıfır değeri karakteri atlar; " +"sıfır olmayan bir değer onu içerir." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * Bir karakter kodu ekleyin.{ph1} Girdinin aynı ofsetteki tamsayı " +"toplamına eklenir." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * Bir sonraki hücreye geçin.{ph1} Orijinal döngü, tamsayı başına " +"dört bayt ilerler ve altı hücreden oluşan altı satırı ziyaret eder." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * Saklanan hedefle karşılaştırın.{ph1} Arayan, toplamı {ph2} " +"cinsinden alır. Bir uyumsuzluk {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Talimatlar toplama yardımcısından ve arayanından gelir. C, açıklayıcı adlara" +" ve düzleştirilmiş 36 hücreli bir döngüye sahip açıklayıcı bir özettir." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "26 Denklemi çözün" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"Çoğu maske birkaç hücre seçer. Örneğin, ilk kontrol 16 karakter kodu ekler " +"ve toplam 1441 gerektirir. Örtüşen seçimler, küçük bir Python betiğinin " +"birlikte çözebileceği denklemler verir." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python * çözücü alıntı" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3, bu denklemleri karşılayan değerleri bulan bir çözücüdür. Bu alıntı, " +"çıkarılan çekleri kullanır ve harf, rakam, alt çizgi ve parantez içeren bir " +"{ph0} bayrağı varsayar. Tam indirme, 26 maskenin ve hedefin tümünü içerir." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Tam çözücüyü indirin" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Cevabı orijinal programla kontrol edin" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REA işlem yakalama, çözülen bayrağı kabul eden orijinal yürütülebilir " +"dosyayı kaydeder. Seçilen bir karakteri {ph0} {ph1} değiştirmek, ilk toplamı" +" 1441 yerine 1440 yapar ve program bunu reddeder." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Giriş" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Gözlenen çıktı" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Çıkış kodu" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Çözücünün bayrağı" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Bir karakter değişti" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Kurtarılan bayrağı ve yakalanan çıktıyı göster" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * orijinal program çıktısı" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Bayrağı kopyala" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"Kurtarılan değer, ikili dosyayı çözdükten sonra kontrol edilen " +"düzenleyicilerin yayınlanmış meydan okuma meta verilerindeki bayrakla da " +"eşleşir." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Kaynak, hedef kimliği ve analiz detayları" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Linux x64'te Ghidra 12.1.4 ile REA 4.1.0 kullanılarak 8 Ekim 2026'da yeni " +"analiz ve iki işlem kaydı. İkili, soyulmuş bir x86-64 ELF, 15.248 bayttır." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Dize referansları, işlevler ve sabitler, düzenleyicilerin kaynağını veya " +"çözümünü okumadan önce incelendi. Python çözücü ve diyagram bu REA " +"sonuçlarından oluşturulmuştur." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Organizatörlerin kaynağıyla karşılaştırın{ph1} * {ph2}Meta verilere ve " +"bayrağa meydan{ph3} okuyun * {ph4}REA kanıt notları{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Kendin dene" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Orijinal mücadeleyi ve çözücüyü tek bir klasöre indirin. Aracınızla " +"araştırmak veya birlikte verilen komut dosyasını çalıştırmak için yukarıdaki" +" istemi kullanın." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Terminal * çöz ve çalıştır" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Komut dosyası bir aday bayrağı yazdırır; Programın istemine yapıştırın. " +"Çözmenin Python ve {ph0} ihtiyacı var. Orijinal yürütülebilir dosyayı " +"çalıştırmak için Linux x86-64 gerekir." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Kodlama aracınızla REA'YU kurun" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "CTF Tersine Mühendislik: DownUnderCTF Bayrak Denetleyicisi - REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Downunderctf'nin maskelenmiş kareler bayrak denetleyicisini çözmek için REA " +"kullanın. Kontrol işlevlerini bulun, maskeleri çıkarın ve kurtarılan bir " +"bayrağı orijinal programla karşılaştırın." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "CTF bayrak denetleyicisi vaka çalışması" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "CTF örnek istemini kopyala" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "CTF maskesi denklemi; daha küçük ekranlarda yatay kaydırma" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"Yedinci maske 21 hücreyi atlar, 21 konumunu seçer, ardından 14'ü atlar. " +"Sadece bu hücre toplamına katkıda bulunur. Gerekli karakter kodu 55'tir, " +"yani karakter 7'dir." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "CTF kontrolünü takip edin" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "CTF derlemesini kopyala" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Okunabilir CTF kontrolünü kopyala" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "CTF çözücü alıntısını kopyala" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Kurtarılan bayrağı kopyala" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "CTF çözücü komutlarını kopyala" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Anasayfa{ph1} / {ph2}Vitrinler{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Örnek olay incelemesi * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "DX-Ball'YU yeniden oluşturma {ph0}yürütülebilir dosyasından." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"Amaç, 1996 Windows oyununun sürdürülebilir bir C versiyonudur. REA, " +"acentenin orijinali, her seferinde bir işlevi incelemesine yardımcı olur." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows ı386 * C * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"REA talimatları, arayanları ve veri okumalarını sağlar; yeniden yapılandırma" +" projesi sonucu uygular ve test eder. {ph0}Açık şekil{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "Bu vaka çalışmasında" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Proje{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Ses tavası{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Sonucu kontrol etme{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Çalışmaya devam et{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "tutulan C fonksiyonları" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "orijinal kodla karşılaştırmalar" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "eşleşen derlenmiş baytlara sahip işlevler" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Proje kontrol noktası: 7 Ekim 2026. {ph0}İlerleme defteri{ph1} * {ph2}Test " +"kapsamı{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Proje şu ana kadar" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Kurtarılan kod, tahta ve kaynak işlemeyi, tuğla vuruşlarını, animasyonları, " +"parçacıkları ve bonus üretimini kapsar. Mevcut yapılar, denetim yardımcı " +"programları ve bir analiz kitaplığı sağlar. Oynanabilir oyun üzerindeki " +"çalışmalar top ve kürek fiziği, güçlendirme kullanımı ve Windows " +"entegrasyonu ile devam ediyor." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Sol / sağ ses konumunun hesaplanmasını bulma" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Bir tuğla vurulduğunda, yatay konumu ses koduna geçirilir. Soruşturma, bu " +"ekran koordinatının nasıl sola / sağa kaydırma değeri haline geldiğini " +"kurtarmak için gerekliydi." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Kopyala" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}DX-Ball'NUN stereo ses konumlandırmasını nasıl " +"hesapladığını bulmak için REA kullanın. Hesaplamayı açıklayın ve kodu " +"gösterin.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Yerel yürütülebilir dosyanın bulunduğu kodlama aracınız için örnek bir komut" +" istemi. Aşağıdaki araştırma, REA sorgularını ve cevabın arkasındaki " +"kanıtları göstermektedir." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"Aracı, işlevi incelemek, tuğlaya çarpan arayanını takip etmek ve " +"yürütülebilir dosyadaki sabitleri okumak için REA kullandı. Bu sonuçlar, " +"aşağıdaki C işlevini yazmak için gereken girdi ve aritmetiği sağladı." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"0x406400 için ilk işlev sonucu{ph0}, FUN_00406400 {ph1} bildiren ve {ph2} " +"öğesini çağıran sözde kodu içeriyordu. Talimat görünümü bir yığın girişi ve " +"kayan nokta işlemleri gösterdi. Bu tutarsızlık, ajana araştırmaya devam " +"etmesi için somut bir neden verdi." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "İlk decompiler görünümü" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"Çıktı bir dönüşüm çağrısı gösterir. Aşağıdaki talimatları okumak, o çağrıyı " +"besleyen girdiyi ve hesaplamayı ortaya çıkarır." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "REA aracılığıyla yanıtlanan üç soru" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Eksik girdiyi kurtar" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"İşlev sonucu, sahte kod ve arayanların yanı sıra talimatları içerir. Burada," +" {ph0} kod çözücü görünümünde eksik olan tamsayı girdisini gösterir." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Girişi anlamak için arayanı takip edin" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA bu arayanı ilk sonuçta tanımladı. Önceki talimatları {ph0}tile_x'i 30'a " +"ölçeklendirir; 20 eklemek tuğlanın ekran koordinatını verir, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Bellek adreslerinin arkasındaki değerleri okuyun" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Döndürülen baytlar, iki aritmetik sabiti ve ilk kaydırma ölçeğini oluşturur." +" Aracı artık C ifadesi için gereken değerlere sahiptir." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "REA'NUN bulgularından C'ye" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Aşağıdaki beş adımı izleyin. Her seçim, orijinal talimatları ve " +"bildirdikleri C satırlarını vurgular." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Giriş" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Çarpın" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Çıkar" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Ölçek" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Dönüş" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Orijinal x86 * alıntı" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Yeniden inşa edilmiş C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * Girişi okuyun.{ph1} Talimat görünümü REA işlev sonucu okur {ph2} " +"ve kullanır {ph3} tamsayıyı yüklemek için. Arayanı REA aracılığıyla takip " +"etmek, C parametresi {ph4} ekran koordinat anlamını belirler." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * 1.5625 ile çarpın.{ph1} FMUL, 0x420068'de iki {ph2} {ph3}. " +"Tarafından döndürülen baytlar REA 's {ph4} kod çözme 1.5625'e{ph5} C aynı " +"sabiti kullanır." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * 500.0'ı çıkarın.{ph1} {ph2}, 0x420070'te iki katı {ph3}. REA bayt" +" sonucu {ph4}'a çözülür ve hesaplamanın merkezini ekran koordinatı {ph5}'ye " +"kaydırır." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * Depolanan ölçeği uygulayın.{ph1} İkinci {ph2} 0x4210a0 değerini " +"okur{ph3} Bu genel, tutulan kaynakta dxball_pan_scale olarak " +"adlandırılır{ph4} REA ikinci bayt okuması, başlangıç değerini {ph5} olarak " +"belirler." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * Bir tamsayı döndürür.{ph1} {ph2}0x406430 {ph3}, REA aranan " +"sonuçlar. C sonucu {ph4} atar; original-x86 karşılaştırmaları döndürülen " +"değeri kontrol eder." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"Derleme alıntısı giriş, aritmetik ve dönüş talimatlarını seçer. Aşağıdaki " +"tam liste, araya giren depoları ve işlev kurulumunu ve temizlemeyi de " +"içerir." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Tam montaj ve destekleyici kanıtlar" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA sonucu * 0x406400-0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Arayan ne sağlar" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"0x411f40 değerindeki tuğla çarpma işlevi{ph0}, döşeme koordinatını 30 " +"ölçeklendirir, 20 ekler ve ardından çağrıdan önce iter:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Verilerin okuduğu şey" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA bayt okur, küçük uçlu çiftler olarak çözülür" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Adres" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Değer" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "İçin kullanılır" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "İlk çarpma" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Çıkarma" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} başlangıçta" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Saklanan pan ölçeği" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Karma sabitlenmiş DX-Ball 1.07 hedefi için REA 4.1.0 ile kaydedildi. " +"Bağlantılı soruşturma notları Kanıt Kimliklerini saklar." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Tutulan kaynak{ph1} * {ph2}Soruşturma notları ve kanıt " +"referansları{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Kurtarılan işlevi kontrol etme" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"Kurtarılan işlev iki denetimden geçer: dönüş değerleri orijinaliyle eşleşir " +"ve derlenmiş baytları yürütülebilir dosyayla eşleşir." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3.205 davranış vakası" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Testler orijinal x86 işlevini yürütür ve dönüş değerini tutulan C ile " +"karşılaştırır. 0, 0,5, 1, 20 ve -1 olmak üzere beş kaydırma ölçeğinde 0'dan " +"640'a kadar olan her tamsayı konumunu kapsar." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 eşleşen bayt" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"C işlevi, sabitlenmiş VC4.0 araç zinciri ile derlenir. Derleyici tekrarı, " +"gözden geçirilen yer değiştirmeleri uyguladıktan ve başvurulan sabitleri " +"kontrol ettikten sonra tam işlevle eşleşir." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"1 Ölçeğinde, kurtarılan hesaplama sol kenarda -500, merkezde 0 ve sağ " +"kenarda 500 döndürür. Ses çalışmasının bir sonraki kısmı, bu değeri oyunun " +"ses arka ucuyla bütünleştirmektir." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Derleyici tekrar ayrıntılarını okuyun{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Soruşturmaya devam et" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"Aynı yaklaşım parçacık güncellemeleri, patlama kuyrukları ve bonus üretimi " +"için de kullanılıyor: ilgili işlevleri inceleyin, durumlarını ve " +"bağımlılıklarını kurtarın, ardından uygulamayı orijinaliyle karşılaştırın." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Ses kaydırma işlevini kendiniz incelemek için DX-Ball projesinin kurulum " +"talimatlarını izleyin ve eşleşen orijinal hedefini sağlayın. Sonra koş:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "DX-Ball kasasında" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} DX-Ball deposu{ph1}{ph2} Akım kaynağı, ilerleme ve yerel kurulum.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} REA analiz iş akışı{ph1}{ph2} Hesaplamayı takip edin, ardından aynı " +"yaklaşımı kendi ikili dosyanızla kullanın.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Parçacıklar ve bonus üretimi{ph1}{ph2} Durum, kuyruklar ve piksel " +"yazımları hakkında daha geniş bir araştırma.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball Tersine Mühendislik: Ses Kaydırma - REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"İkili analizden REA aracılığıyla sürdürülen C, orijinal-x86 testlerine ve " +"derlenmiş işlev baytlarının eşleşmesine kadar bir DX-Ball yeniden " +"yapılandırmasını izleyin." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "DX-Ball ses kaydırma incelemesi; daha küçük ekranlarda yatay kaydırma" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.EXE işlevi 0x00406400, REA ile denetlenir. Tuğlaya çarpan bir arayan," +" 20 artı 30 kez tile_x sağlar. Talimatlar x'i yükleyin, 1.5625 ile çarpın, " +"500.0'ı çıkarın, pan_scale uygulayın ve bir tamsayı döndürün. Tutulan C, " +"3.205 durumda orijinal x86'ya karşı bağımsız olarak ve 63 baytla eşleşen " +"VC4.0 derleyici tekrarı ile kontrol edilir." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball rekonstrüksiyon vaka çalışması" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Örnek istemi kopyala" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Sol / sağ ses konumunun hesaplanmasını takip edin" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Orijinal derleme alıntısını kopyala" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Sesi kopyala-kaydırma işlevi" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Tam ses kaydırma düzeneğini kopyalayın" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "DX-Ball analiz komutunu kopyalayın" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Anasayfa{ph1} / Vitrinler" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA vaka çalışmaları." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, oyunlar, Electron ve kod, rakamlar ve kontrol edilen sonuçlarla CTF" +" mücadelesi." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android * APK analizi" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Bir kimlik doğrulayıcı oturum açma kodunu nasıl oluşturur?" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Yayınlanan APK'DA Aegis'NUN altı basamaklı kod hesaplamasını bulun. " +"Oluşturma yöntemlerini REA ile izleyin, ardından kodun neden her 30 saniyede" +" bir değiştiğini görmek için bir demo saatini hareket ettirin." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Android vaka çalışmasını okuyun" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * Makine kodu programlarının analizi" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "CTF bayrak denetleyicisini çözme" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"REA ile kolay bir indirme zorluğunu inceleyin. Kontrol fonksiyonlarını " +"bulun, maskeleri ve toplamları denklemlere dönüştürün, ardından çözülen " +"bayrağı orijinal programla doğrulayın." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "CTF vaka çalışmasını okuyun" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Yerli * Yeniden Yapılanma" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball'NUN sol / sağ ses pozisyonunun hesaplanması" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"1996 Windows oyunundan sol / sağ ses konumu hesaplamasını kurtarın. REA " +"talimatları, arayan referansları ve sayısal sabitler, orijinal davranışa ve " +"derlenmiş 63 baytın tümüne karşı kontrol edilen küçük bir C işlevine yol " +"açar." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "DX-Ball örnek olay incelemesini okuyun" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * Özellik izleme" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Notion metni ve HTML'yi nasıl kopyalar" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Sayfaya bakan bir API'yi Notion 's paketlenmiş JavaScript . IPC " +"sarmalayıcılarını sistem panosuna kadar takip edin, ardından küçük bir HTML " +"işaretleyicisinin zengin blok verilerini bir kopyaya nasıl bağlı tuttuğunu " +"görün." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Notion örnek olay incelemesini okuyun" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS * Yeniden Yapılandırma" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "TH04 bir mermi halkasını nasıl hedefliyor" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Orijinal 16 bit açı yardımcısını REA ile inceleyin. Çarpma, bölme ve " +"koordinat işlemlerini okunabilir C ++ ile eşleştirin, ardından oynatıcıya " +"yönelik bir halkayı nasıl ürettiklerini görün." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "TH04 örnek olay incelemesini okuyun" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Adım adım kılavuzlar" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Kılavuzlar yerel bir hesaplama, bir Electron dışa aktarma ve bir tarayıcı " +"isteğinden geçer. Her biri bir bilgi istemi ve somut bir hedefle başlar." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Kılavuzları okuyun" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Tersine Mühendislik Vaka Çalışmaları - REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Kod, şekiller ve demolar aracılığıyla REA araştırmalarını takip edin: bir " +"Android kimlik doğrulayıcı, DX-Ball, Notion, TH04 ve bir DownUnderCTF bayrak" +" denetleyicisi." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Anasayfa{ph1} / {ph2}Vitrinler{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Örnek olay incelemesi * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Notion nasıl kopyalanır{ph0}metin ve HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Bir pano çağrısını izleyin Notion 's sayfa API'sı, ön yükleme ve ana işlem " +"aracılığıyla Electron 's pano yazıcısı." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion Masaüstü 7.6.1 · JavaScript * REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Notion'NUN masaüstü paketinin içindeki köprü" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * Sayfaya bakan API{ph1} {ph2}{ph3}{ph4} {ph5}Ön yükleme, " +"çağrılabilir bir yöntem ortaya çıkarır.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * Sarıcı ipcrenderer'ı önceden {ph1}yükleyin{ph2}{ph3}{ph4}kanal ve " +"argümanları sarmalayıcıyı çağır{ph5} gönderir.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * Ana işlem işleyicisi{ph1} {ph2}{ph3}{ph4}alıcı{ph5}, hangi " +"sayfanın gönderdiğini kontrol eder.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * Sistem panosu{ph1} {ph2}{ph3}{ph4}yazma (veri){ph5} Electron, " +"sağlanan metni ve HTML'yi yazar.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Bir kanal iki tarafa katılır: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Paketlenmiş kod, ön yükleme ve ana işlemde aynı kanalı kullanır. " +"Sarmalayıcıların çözülmesi, bu adların arkasındaki Electron çağrılarını " +"ortaya çıkarır." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "Bu vaka çalışmasında" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Pano köprüsünü takip edin{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Bir bloğun yapısını korumak{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Daha fazla örnek ve kaynak{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Kopyalama işlemi nereye gidiyor?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"Sayfa {ph0}. Ön yükte uygulanması bir sarmalayıcıdır. Yararlı soru, bu " +"sarıcının ne gönderdiği ve hangi kodu aldığıdır." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Kopyala" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Notion'NUN metin ve HTML'yi sistem panosuna nasıl " +"kopyaladığını izlemek için REA kullanın. Her adımda kodu " +"gösterin.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Kodlama aracınız tarafından kullanılabilen Notion'NUN yerel uygulama " +"paketine sahip örnek bir komut istemi." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA okumaya nereden başlayacağınızı bulur" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Sekme ön yüklemesini REA ile çözümlemek, sayfaya maruz kalan API'yi ve bir " +"IPC isteği gönderen çağrıyı bulur. Her iki bulgu da küçültülmüş paketteki " +"kaynak aralıklarıyla birlikte gelir:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA bulguları → açılacak iki yer" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"REA 4.1.0 ile kaydedilen Notion'NUN sekme ön yüklemesindeki yeni bir {ph0} " +"sonucundan seçilen alanlar. Pozisyonlar, orijinal paketin satırını ve sıfır " +"tabanlı sütunu kullanır." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"Aracı bu konumları açar, birleştirilmiş apı'de pano üyesini bulur ve " +"ınvokerınmain'i okur{ph0}. Çağrı sitesi {ph1} sağlar. Bu isim, ajana ana " +"pakette araması gereken kesin bir şey verir. Aşağıdaki dört alıntı, " +"bağlandığı rotayı göstermektedir." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Dört kısa kod parçası" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Okunabilir değişken adlarıyla paketlenmiş JavaScript'DAN " +"basitleştirilmiştir. İlgisiz üyeler atlanır." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Sayfaya maruz kalan apı'den başlayın" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Bu üye kanal adını sağlar. ınvokerInMain uygulaması, isteğin sayfanın " +"sürecinden nasıl ayrıldığını {ph0} anlatır." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Önyüklemenin sarmalayıcısını çözme" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"Döndürülen işlev, bağımsız değişkenleri Electron istek ve yanıt IPC'Sİ " +"aracılığıyla iletir. Artık ana işlem tarafında {ph0} arayabiliriz." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Alıcının nasıl kaydedildiğini kontrol edin" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Ana işlem başka bir sarmalayıcı kullanır. {ph0} yöntemi bir ıpcMain " +"kaydeder{ph1}." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Yazıyı ve gönderen kontrolünü bulun" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Gidilecek yer burası. Göndereni kontrol ettikten sonra işleyici, sağlanan " +"verileri Electron pano API'sı. Kanal ve çözümlenen iki sarmalayıcı, açıkta " +"kalan yöntemi bu çağrıya bağlar." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Kopyalanan bir blok yapısını nasıl korur?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Notion'NUN web editörü, electronApı aracılığıyla metin ve HTML {ph0}. Blok " +"verilerini yerel olarak saklar ve bunları bağlamak için kopyalanan HTML'ye " +"bir kimlik koyar." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "Kayıtlı blok verilerine HTML bağlantıları" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "HTML Kimliğini oku" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Aynı yerel kimliği bulun" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Notion blok verilerini geri yükle" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Açıklayıcı metin ve kimlik. Kaydedilen modül testi, kimlikler eşleştiğinde " +"blok verilerini geri yükler; eski bir girdi yalnızca metin ve HTML döndürür." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"Yapıştırmada, Notion HTML kimliğini arar ve kaydedilen kopyaya karşı kontrol" +" eder. Eşleşen kimlikler blok verilerini geri yükler." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"13 Temmuz 2026'da önbelleğe alınan web varlıklarından kaydedilen pano " +"biçimi." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Daha fazla örnek ve kaynak" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Başka bir örnek: İşaretleme tabloları" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion, Markdown'u blok verilerine ayrıştırır. Bu örnek, bir tablonun " +"üstbilgi ve veri satırlarına nasıl dönüştüğünü gösterir." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Notion'NUN Markdown ayrıştırıcısı aracılığıyla bir tablo" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Çıkarılan bir Markdown ayrıştırıcısından kaydedilen çıktı. Tablo satırlar ve" +" hücreler haline gelir." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Başka bir yol: çevrimdışı SQLite bağlantısı" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Notion'NUN oluşturucu, getsqlitemeta'yı IPC aracılığıyla ister{ph0} Ana " +"işlem bir mesaj kanalı oluşturur ve bir bağlantı noktasını işleyiciye, " +"diğeri ise bir SQLite yardımcı programı işlemine verir. Sonraki ifade " +"grupları ve sonuçları bu bağlantı noktası üzerinden gider." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"Bu aktarımın ardından, veritabanı çalışmasının nerede çalıştığı ve yalnızca " +"ilk IPC isteğinin izlenmesinin neden sonraki konuşmayı kaçırdığı açıklanır." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Kaynaklar ve alıntıların nasıl okunacağı" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Pano köprüsü, Notion Desktop 7.6.1'in {ph0}: ön yükleme ve {ph1}. Alıntılar " +"küçültülmüş değişken adlarını genişletir ve ilgisiz kodu atlar; Gönderen " +"denetimi yardımcısı, altında yatan {ph2} çağrısıyla gösterilir." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Sanal pano ve İşaretleme örnekleri, 747001, {ph0}, {ph1} ve 422457 modülleri" +" de dahil olmak üzere 13 Temmuz 2026'da önbelleğe alınan web varlıklarından " +"{ph2}{ph3}. Bu varlıkların kendi versiyonları var. Kaydedilen problar, " +"çıkarılan modülleri ve küçük kablo demetlerini çalıştırdı; çıktıları, " +"yakalanan bir masaüstü UI oturumundan ziyade bu probları tanımlar." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"Burada gösterilen REA sonucu, yayınlanan REA 4.1.0 paketi ile kaydedilen " +"kaydedilmiş sekme ön yüklemesinin odaklanmış bir analizidir. API'yi bulur ve" +" işlemi başlatır. Pano üyesi ve eşleşen alıcı, paketteki sarmalayıcı " +"uygulamalarını okuyarak bağlanır." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"Markdown örneği 422457 ayrıştırıcı modülünü {ph0}. Kaydedilen modül " +"testleri, hem sayfa hem de sohbet filtrelerinin bu tabloyu koruduğunu " +"gösterir. Yapıştır / içe aktar, yapılandırılmış İşaretleme ve yapay zeka / " +"sohbet ayrıştırıcıları ayrı giriş noktalarına ve ara biçimlere sahiptir." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} JavaScript uygulama kılavuzu{ph1}{ph2} Küçük bir Electron " +"uygulamasının dışa aktarma özelliğini izleyin.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} DX-Ball yeniden yapılandırması{ph1}{ph2} İşaretli bir C işlevine " +"ilişkin yerel talimatları izleyin.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron Tersine Mühendislik: Pano - REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Electron'NUN ön yüklemesi, IPC sarmalayıcıları ve ana işlemi aracılığıyla " +"Notion'NUN pano API'sini kısa kod alıntıları ve zengin pano formatına bir " +"bakışla takip edin." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron örnek olay incelemesi" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Notion analiz istemini kopyala" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Notion ön yükleme alıntısını kopyalayın" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Kopyala Notion sarmalayıcı alıntısını çağır" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Notion işleyici sarmalayıcı alıntısını kopyala" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Kopya Notion pano alıcısı alıntı" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Yapıştırmada zengin pano verilerini geri yükleme" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "İçeriğe geç" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Anasayfa{ph1} / {ph2}Vitrinler{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Örnek olay incelemesi * Touhou 4: Lotus Ülkesi Hikayesi" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "TH04'NUN yeniden yapılandırılması{ph0}kurşun izleri." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Bir mermi halkası kısa bir açı hesaplamasıyla başlar. Orijinal DOS işlevini " +"incelemek için REA kullanın, ardından talimatlarını okunabilir C ++ olarak " +"izleyin." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 * 16 bit DOS * C ++ ve derleme" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "TH04 rekonstrüksiyonunu görüntüleyin" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Orijinal talimatlardan kontrol edilen kaynağa" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * Orijinal oyun{ph1}{ph2} ANA.PC-98 yürütülebilir " +"dosyasını{ph3}{ph4} ve mermi açısı yardımcısını çalıştırın.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * REA ile kontrol{ph1}{ph2} edin Talimatlar + referanslar{ph3}{ph4} " +"Yüklenen DOS kodunu doğrulayın ve yürütülebilir dosyadan açı hesaplamasını " +"okuyun.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * C ++ Boşluğunu okuyun{ph1}{ph2} → nişan al → döndür{ph3}{ph4} Her " +"işlemi sürdürülen yeniden yapılandırmaya bağlayın.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * Kaynağı kontrol{ph1}{ph2} edin Kaydedilen 2.139 eşleşen " +"bayt{ph3}{ph4} derleyici kontrolleri, bu yardımcıyı içeren madde işareti " +"oluşturma kodunu kapsar.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA, orijinal kodu ve analiz kanıtını döndürür. TH04 projesi, bakımı yapılan" +" kaynak ve derleyici denetimlerini sağlar." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "Bu vaka çalışmasında" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}Kurşun halkası{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}REA ne döndürür{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}C ++ 'ya derleme{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Kaynağı kontrol etme{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Projenin tamamı{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Bir yüzük oyuncuya nasıl nişan alır" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"Elly'nin saldırısı, ilk sayısı 16 olan bir nişan yüzüğü istiyor. Bir " +"yardımcı, her merminin yönünü hesaplar. Aynı halka sabit bir yöne bakabilir " +"veya oyuncuya doğru dönebilir." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Kodlama aracınız" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Kopyala" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}TH04'NUN bir mermi halkasını nasıl oluşturduğunu ve onu " +"oyuncuya nasıl hedeflediğini bulmak için REA kullanın. Hesaplamayı açıklayın" +" ve kodu gösterin.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Özgün yürütülebilir dosya ve yeniden yapılandırma ödemesinin yerel olarak " +"kullanılabildiği örnek bir komut istemi." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04, 256 açı biriminde saat yönünde tam bir dönüş depolar. 16 Madde işareti" +" için her dizin 16 birim ekler: {ph0}. Oyuncunun yönünü eklemek, bu " +"pozisyonları birlikte döndürür." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Sayı 16, oyuncu yönü 40 ve şablon dönüşü 0 için kurtarılan açı matematiğinin" +" bir örneği. {ph0}Açık şekil{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Kurtarılan kaynaktaki ateşleme şablonu" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Elly'nin halka saldırısı * kaynak alıntı" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Bu çizgiler, zorluk ve performans ayarından önce deseni seçer. " +"{ph0}Saldırının kaynağını okuyun{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "REA ne döndürür" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Her merminin hızını ve açısını ayarlayan işlev olan " +"bullet_velocity_and_angle_set{ph0} REA yönergelerini, sözde kodunu ve " +"referanslarını döndürür. Bu sonucun üç kısmı modeli açıklıyor." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Kodunu okumadan önce DOS görüntüsünü kontrol edin" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"Kontrol, yüklenen kodu ve yer değiştirme kayıtlarını sağlanan yürütülebilir " +"dosyaya bağlar. Yukarıdaki yol görüntüleme için kısaltılmıştır." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Yüzüğün çarpımını ve bölünmesini okuyun" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} madde işareti dizinini tutar. Vardiya 256 ile çarpar, ardından bölme " +"{ph1}. Bullet_template alanı tutulan kaynak {ph2}. Tam sıra aşağıda görünür." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Desenin oyuncuya doğru nereye döndüğünü bulun" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Yönerge işlenenleri iki koordinat farklılığı ve bir yön yardımcısı ortaya " +"çıkarır. Dönüş değeri göreceli halka açısına eklenir. Kaynak adları bu " +"adresleri okunabilir hale getirir; REA, aracının arkalarındaki orijinal " +"işlemleri kontrol etmesini sağlar." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Montajdan okunabilir C ++ 'ya" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Orijinal talimatları açı hesaplamasıyla eşleştirmek için bir adım seçin. Bu " +"özet, hedeflenen halka yolunu izler; Tam kaynak ayrıca yayılımları, " +"yığınları ve rastgele kalıpları da işler." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Dizin" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Boşluk" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Amaç" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Döndür" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Mağaza" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * orijinal 16 bit talimatlar" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Okunabilir C ++ * hedeflenmiş halka özeti" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * Madde işareti dizinini okuyun.{ph1} Yığın bağımsız değişkeni {ph2}" +" yüklenir. 16 Maddelik bir halkada, bu üye dizini 0'dan 15'e kadar çalışır." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Yönleri tam bir dönüş etrafında boşluk bırakın.{ph1} {ph2} 256 ile" +" çarpar. Sayım bir kelimeye sıfır genişletilir, ardından {ph3} ürünü bu " +"sayıma böler. 16 Sayısı için her indeks 16 açı birimi ilerletir." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * Oyuncu yönünü ekleyin.{ph1} İki çıkarma, oyuncu eksi orijinli " +"koordinatları oluşturur. Yön yardımcısı {ph2} içinde bir açı döndürür; Onu " +"eklemek tüm halkayı oynatıcıya doğru döndürür." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * Desenin dönüşünü ekleyin.{ph1} {ph2} şablon açısını ekler. " +"Elly'nin ilk şablonu onu sıfıra ayarlar; diğer desenler aynı yardımcıyı bir " +"dönüşle kullanabilir." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Son açıyı bir baytta tutun.{ph1} Mağaza, yumurtlama açısı alanına " +"{ph2} yazar. Değerler, tıpkı imzasız bayt dökümünün yaptığı gibi 255'ten " +"sonra sarılır. Çevreleyen kaynak da bu açıyı ve hızı hıza dönüştürür." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"Montaj, hedeflenen halka dalını, amaç hesaplamasını ve son depoyu seçer. " +"Yukarıdaki C ++ okunabilir bir özettir. Aşağıdaki derleyici denetimleri, " +"bağlantılı projedeki tutulan kaynak için geçerlidir." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Tutulan halkayı okuyun ve kaynağı hedefleyin" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Halka makro{ph1} * {ph2}Amaç ve hız kaynağı{ph3} * {ph4}Açı " +"gösterimi{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Tutulan kaynağı kontrol etme" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"TH04 projesinin kaydedilen kontrolleri, sabitlenmiş Turbo C ++ 4.0J araç " +"zinciri ile bu yardımcı da dahil olmak üzere madde işareti oluşturma kodunu " +"derler." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 eşleşen bayt" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Derlenmiş madde işareti oluşturma kodu, özgün yürütülebilir dosyanın 2.139 " +"baytlık bir bölümüyle eşleşir." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "İki temiz yapı" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"İki ayrı yapı aynı eşleşen baytları üretir. Kaydedilen giriş karmaları, " +"burada gösterilen korunan kaynakla eşleşir." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "3 Ekim 2026'da kaydedildi. {ph0}Derleyici denetimlerini okuyun{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Hedef kimlik ve analiz kapsamı" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Orijinal hedef" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156,258 bayt, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Yardımcı giriş" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0}rea'nınREA yüklenen görüntüsünde 0x2cfc8" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Orijinal dosya ofseti" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0} döndürülen {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Kayıtlı kod denetimi" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 Ekim 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Derleyici denetimleri, bu yardımcı da dahil olmak üzere tüm madde işareti " +"ekleme kodu bölümünü kapsar. Ayrıca HARİTA katkısını ve örtüşen yer " +"değiştirmeyi karşılaştırırlar." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA, {ph0} yük segmentinde statik DOS yük görüntüsünü doğruladı. Adresleri " +"bu analiz görüntüsünü tanımlar. İşlev sonucu, 517 baytlık bir aralıkta iki " +"aralıkta 503 gövde baytı bildirir; Yukarıdaki seçilen yönergeler, bildirilen" +" aralıklarda bulunur." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Kaynak adları ve derleyici denetimleri TH04 denetim noktası 0d72e980'den " +"{ph0}. Daha önceki yeniden yapılanma gözlemleri, projenin kendi analiz komut" +" dosyalarını kullandı; Bu sayfa, aynı orijinal hedefin yeni bir REA " +"incelemesini ekler. Sağlanan oyunun kimliği, bağımsız bozulmamış döküm " +"kaynağı hala açıkken, depo bildirimi tarafından sabitlenir." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"Şekil açı hesaplamasını göstermektedir. Tam oyun denetimleri, zamanlama ve " +"PC-98 donanım davranışı, yeniden yapılandırma projesinde ayrı çalışma zamanı" +" denetimlerine sahiptir." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "Tam TH04 rekonstrüksiyonu" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Proje, oyunun dört DOS ürününü bakımlı C ++ ve montajdan oluşturuyor. Madde " +"işareti oluşturmanın ötesinde, kaynak aşamaları, patronları, oluşturma, " +"girdi, menüleri, sonları ve puan işlemeyi kapsar." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}TH04 deposunu keşfedin{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Madde işareti oluşturma kaynağı{ph1}{ph2} Tam yardımcı, diğer desen " +"türleri ve şablon ayarı.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}DOS oluşturma ve çalıştırma kılavuzu{ph1}{ph2} Kaynağı oluşturun ve " +"projenin PC-98 öykünücüsü iş akışında test edin.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Geçerli proje durumu{ph1}{ph2} DOS doğrulaması ve ayrı yerel x64 " +"bağlantı noktası.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 Tersine Mühendislik: DOS Mermi Modelleri - REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"TH04'NUN orijinal 16 bit DOS kodunu REA ile inceleyin. Bir mermi halkasının " +"nasıl aralıklı ve oyuncuya yönelik olduğunu görmek için montajı ve " +"kurtarılan C ++ 'yı takip edin." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "Bu sayfada" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04 mermi deseni vaka çalışması" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "TH04 örnek istemini kopyala" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 sabit ve hedeflenmiş mermi halkaları; daha küçük ekranlarda yatay " +"olarak kaydırın" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"16 Mermi halkasının iki diyagramı. Sabit halka sıfır açıyla başlar. 40'lık " +"bir oyuncu yönü eklemek her yönü aynı miktarda döndürür; Vurgulanan ilk " +"mermi oyuncuya işaret eder. Her ikisi de 16 açı birimi veya 22,5 derecelik " +"bir aralık tutar." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "TH04 ateşleme şablonunu kopyala" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "TH04 hedefli halka hesaplamasını takip edin" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "TH04 derleme alıntısını kopyalayın" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Okunabilir hedefli halka hesaplamasını kopyala" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Başa dön" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Kopyala" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Kopyalandı" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Seçili" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Kod panoya kopyalandı." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Kod seçildi. Kopyalamak için klavyenizi kullanın." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA üzerinde GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Uzaklık {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Kaktüse vur. Başka bir hız dene." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Boşluk veya Atlama ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Tekrar oyna" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Oyna" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Duraklat" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Oynat düğmesine basın, ardından kaktüsün üzerinden atlayın." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Kaktüse vur. Tekrar Oynat düğmesine basın veya hızı değiştirin ve yeniden " +"başlatın." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Koşma. Boşluk veya Atlama bir kaktüsü temizler." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Duraklatıldı. Devam etmek için Oynat düğmesine basın." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Sabit hız: {speed}. Boşluk veya Atlama bir kaktüsü temizler." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Sabit hız: {speed}. Denemek için Oynat düğmesine basın." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Kurtarılan kural: 6'dan başlayın, ardından 13'e doğru artırın." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Sabit hız: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Kurtarılan kuralı tekrar oynattı. Dört değerin tümü, üç ondalık basamağa " +"yuvarlandığında kontrol edilen orijinal oyun kontrolüyle eşleşir." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"Tekrar oynatma, kaydedilen orijinal oyun değerlerinden farklıdır. Yukarıdaki" +" hız kuralını ve ayarlarını karşılaştırın." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}-{end} saniyeleri" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} saniye, zaman bloğu {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Etkileşimli hesaplama bu tarayıcıda kullanılamaz. Örnek, kodu 59 saniyede " +"gösterir." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Kontrol etme…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} kontroller geçti (altı ve sekiz basamakta altı referans " +"durumu)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "Başvuru denetimleri çalıştırılamadı. Tekrar deneyin." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Bilgisayarda düşünen bir analist" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Bir kontrol bir karakteri ortaya çıkarır" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"Yedinci maske, altıya altıya giriş ızgarasında yalnızca 21 konumunu seçer. " +"Karakter kodu 55'e eşit olmalıdır, bu nedenle karakter 7'dir. Diğer maskeler" +" farklı pozisyonlar seçer ve daha fazla denklem verir." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "Yedinci çek. Hücre etiketleri, 0'dan başlayarak giriş konumlarıdır." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Kodlanmış maske: -21, + 1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "21 Hücreyi atla. 1'i seçin. 14'ü atla. 0'da dur." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Bu miktara yalnızca bir hücre katkıda bulunur" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "Bayrağın 21. konumu 7 içermelidir." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Seçili: bir hücre" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 maske 26 denklem verir." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Bayrağı bulmak için onları birlikte çözün." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball ses pan araştırması" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA, bir DX-Ball işlevi için talimat, arayan ve bayt okuma kanıtı sağlar. " +"Bir yığın girişi 1.5625 ile çarpılır, 500 ile dengelenir, ölçeklenir ve bir " +"tamsayıya dönüştürülür. Tutulan C, 3.205 orijinal x86 durumunda ve ayrı bir " +"63 baytlık derleyici tekrarında kontrol edilir." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Yığın" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "girdi x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "Tamsayı" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "dönüş" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Yeniden kurulan işlev" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "Bakımlı C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Tuğla çağrısı" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Orijinal kod" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "karşılaştır" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3.205 test" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "VC4.0 derleme" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 bayt eşleşti" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA araştırma akışı" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Yerel bir hedef hakkında bir soru sorun. REA, yerel analiz bağdaştırıcıları" +" aracılığıyla inceler ve izler, kanıt döndürür ve temsilcinizin açıkladığı, " +"uyguladığı ve test ettiği gibi takip sorularını destekler." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Sor" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Ajan + yerel hedef" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "App / dosya / tarayıcı" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. İncele ve izle" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Kanıtları oku" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Kod / referanslar /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "bilinmeyenler" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Uygula" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Ajanınız" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Açıkla / oluştur / test et" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Analiz araçları" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Yerel analiz adaptörleri" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Sonraki soru" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: bir mermi halkasını aralıklamak ve hedeflemek" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Saat yönünde tam bir dönüş 256 açı birimine sahiptir. On altı mermi sıfır, " +"on altı, otuz iki, 240'a kadar açılardan başlar. Kırk örnek bir oyuncu yönü " +"eklemek, on altı yönü de bir araya getirir; ilk mermi oyuncuya işaret eder. " +"Şablon dönüşü sıfırdır." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Sabit halka" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "İlk mermi: açı 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Nişan yüzüğü" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "İlk mermi: oyuncu yönü" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Merkez" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Oyuncu" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Aynı aralık: 256 ÷ 16 = 16 açı birimi = 22,5 °" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Örnekler" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Başlangıç" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Rehberler" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Kaynak kod" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "MIT lisansı" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Topluluğa katıl" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "X’te takip et" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * seçilen komut dosyası kaynağı" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Kaynak kod" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Beklenen biçimlendirici çıktısı" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Talimatlar" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Arayan" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Sabitler" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "C işlevi" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Düğme" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "Ön yükleme API'sı" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSV dosyası" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Tıklamanız" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Yakalanan istek" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Komut dosyasını dışa aktar" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA sonuç * özet.ıpc'den alıntı" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA talimat alıntısı * 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA arayan alıntı * 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "REA bayt sonuçları * küçük endian çiftleri olarak yorumlanır" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Kurtarılan C * alıntı" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "REA’nın nasıl çalıştığını görün ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Kurulum rehberi" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Vitrinler →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Denetlenen komut dosyasından seçilen ayarlar" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "% işleyicisinin okunabilir özeti" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * seçilen orijinal talimatlar" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "Operatör Kimlikleri * Microsoft'un kaynağı" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "X'te @reatools'u takip edin" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Ajan → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → temsilci * seçilen sonuçlar" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → aracı * yöntemler ve arayanlar" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * seçilen derlenmiş Java" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Okunabilir özet * temsilcinin yorumu" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP, komple gövde" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "İndir Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Android analiz sağlayıcısını indirin" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Ajan → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → temsilci * seçilen sonuçlar" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → ajan * seçilen talimatlar" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Aracı → REA * read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → aracı * yedinci girişler" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Orijinal çalıştırılabilir * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Orijinal mücadeleyi indirin" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Çözücüyü indirin" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA sonuç * sözde kod alıntısı" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Ajan → REA * {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → ajan * talimat alıntısı" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → temsilci * arayan alıntı" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Aracı → REA * iki {ph0} isteği" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REA bayt sonuçları * çiftler olarak deşifre edildi" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Kendi hedefinizle başlayın" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK'NIN sohbeti" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Kod oluşturma" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Kurtarılan kural" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Ayarlanabilir saat" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "İkili" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Kodu kontrol etme" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Denklemler" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Doğru!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Çalıştırılabilir" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA bulguları" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Kurtarılan C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Doğrulama" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Paketlenmiş uygulama" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "Açık API" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "IPC sarmalayıcıları" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Pano" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Orijinal DOS kodu" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA talimatları" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Açı hesaplaması" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Mermi halkası" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "Açık sayfa API'sı" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Oluşturucu IPC çağrısı" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Sistem panosuna gönderildi" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Notion tarafından yerel olarak kaydedildi" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "İşaretleme girişi" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Yapılandırılmış ayrıştırıcı çıktısı * alıntı" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Kendi uygulamanızı analiz edin" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Ajan → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → aracı * seçilen alanlar" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Ajan → REA * {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → ajan * talimat alıntısı" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Aynı işlev sonucu * amaç alıntısı" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "İlgili tutulan C ++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Halka makro * TH04 şubesi, alıntı" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Açı ve hız * kaynak alıntı" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "10'a ne olduğunu görmek için % tuşuna basın." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "200'ün% 10'u 20'dir. Eklemek için = tuşuna basın." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "Çarpma için 10, 0,1 olur. Çarpmak için = tuşuna basın." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "Çeviri güncelleniyor. Şimdilik bu sayfayı ingilizce olarak okuyun." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}{ph3}Verileri nasıl dışa aktardığını analiz etmek ve " +"açıklamak için REA kullanın. İlgili kodu ve kaynak konumlarını " +"gösterin.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3} kullanarak REA’yı kur ve bu kodlama ajanına bağla. " +"Önce kurulum planını göster ve onayımı bekle. Ardından kurulumu " +"doğrula.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}\"{ph1}{ph2}{ph3}Yeni bir örnek klasöre indirin ve paketini açın. " +"Notları Dışa Aktar'ı tıklattığımda ne olacağını bulmak için REA kullanın. " +"Nerede {ph4}yazıldığını, hangi alanları içerdiğini ve ilgili dosyaları ve " +"satırları gösterin.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3} kullanarak REA’yı kur ve bu kodlama ajanına bağla. " +"Önce kurulum planını göster ve onayımı bekle. Ardından kurulumu " +"doğrula.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}{ph3} kullanarak REA’yı kur ve bu kodlama ajanına bağla. " +"Önce kurulum planını göster ve onayımı bekle. Ardından kurulumu " +"doğrula.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}İncelemek için {ph3}REA kullanın. Bu web sitesini benim " +"için klonla.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Yeniden yapılanma ·{ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"{ph0} ve npm kullanılabilir, kurulumu çalıştırın, kodlama aracınızı seçin ve" +" önerilen değişiklikleri gözden geçirin." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Verilen bir örnek * {ph0} ve npm * Kodlama aracınız" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Claude Code, Codex veya Cursor gibi bir kodlama aracısı kullanın. {ph0} ve " +"npm; {ph1}kurulum kılavuzu desteklenen sürümleri listeler{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Sayfa * {ph1}{ph2}{ph3}Notları dışa aktar {ph4}{ph5}Notları{ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Köprü * {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}, ana işleme adlandırılmış bir " +"mesaj gönderir.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}İşleyici * {ph1}{ph2}{ph3}Biçimlendiriciyi {ph4}{ph5}{ph6}{ph7} ve " +"dosyayı yazar.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * satır 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}\"{ph1}{ph2}Kimliği 1 ve başlığı olan bir not için CSV değerini tahmin " +"{ph3}edin. Ardından{ph4}{ph5}, kontrol etmek için örneğin biçimlendiricisini" +" çalıştırın. Tahmini ve gerçek çıktıyı gösterin.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Başlık bir tırnak içinde kalır; Her tırnak işareti iki katına çıkar. Bu, " +"biçimlendiriciyi doğrudan {ph0} ile kontrol eder." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} * CSV biçimlendirici" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"İhtiyacın {ph0}olacak 22 (22.19+), 24 (24.11+) veya 26+. npm ile birlikte " +"gelir{ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "{ph0} yok mu, emin değil misiniz?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"{ph0}, v22.19+, v24.11+ veya v26+ yazdırırsa hazırsınız demektir. Daha eski " +"bir sürüm yazdırıyorsa veya \"tanınmıyor\" / \"komut bulunamadı\" ise, {ph1}" +" 24 LT:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * örnek kaynak alıntı" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "{ph0}Örneği açın{ph1} * {ph2}İndir {ph3}{ph4}* {ph5}İndir{ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * örnek kaynak" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Örneği indirin ve fermuarını açın. Arşiv, eksiksiz {ph0} klasörünü içerir. " +"{ph1} ve npm; Bu örnek için Electron gerekli değildir." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"İlk kez veya eksik {ph0} mi yoksa kodlama ajanı mı? {ph1}Adım adım kurulum " +"kılavuzunu izleyin →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "" +"Örneğin: {ph0}Hesap Makinesi neden {ph1} için 220 sonucunu veriyor?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Windows Hesap Makinesini incelemek için REA kullanın. Neden" +" {ph3}220 veriyor?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA * yüklendi {ph0}* seçili satırlar" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Neden {ph0}{ph1}220 verdiğini gördük.{ph2} Şimdi hem + hem de × için " +"kuralları kurtaralım ve deneyelim." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 * REA okur {ph1}{ph2}{ph3}Hesap Makinesi uygulamasını " +"başlatır{ph4}{ph5} Kod açılır {ph6}. Aracı daha sonra yüklü uygulamanın " +"kitaplığını seçer.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Aegis-v3.4'ü incelemek için REA kullanın.{ph3}. Altı " +"basamaklı giriş kodunu nasıl oluşturduğunu bulun, neden her 30 saniyede bir " +"değiştiğini açıklayın ve zamanı değiştirebileceğim küçük bir demoyu yeniden " +"oluşturun.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} * API üyesi" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} * IPC yardımcısı" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "main /{ph0} * işleyici yardımcısı" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "ana /{ph0} * pano alıcısı" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Yeniden yapılanma * dino-hız.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Node.js ve npm kullanılabilir, kurulumu çalıştırın, kodlama aracınızı seçin " +#~ "ve önerilen değişiklikleri gözden geçirin." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Verilen bir örnek * Node.js ve npm * Kodlama aracınız" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Claude Code, Codex veya Cursor gibi bir kodlama aracısı kullanın. Node.js ve" +#~ " npm; {ph0}kurulum kılavuzu desteklenen sürümleri listeler{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Sayfa * oluşturucu.js{ph1}{ph2} Dışa aktarma notları " +#~ "{ph3}{ph4}Notları{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Köprü * ön yükleme.js{ph1}{ph2}{ph3}{ph4}{ph5}, ana işleme " +#~ "adlandırılmış bir mesaj gönderir.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}İşleyici * ana.js{ph1}{ph2} notlar yazın.csv{ph3}{ph4} Biçimlendiriciyi" +#~ " {ph5} ve dosyayı yazar.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Kimliği 1 ve başlığı Merhaba, \"CSV\" olan bir not için REA" +#~ " tahmin edin. Ardından, örneğin toCsv biçimlendiricisini Node.js. Tahmini ve" +#~ " gerçek çıktıyı gösterin.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Başlık bir tırnak içinde kalır; Her tırnak işareti iki katına çıkar. Bu, " +#~ "biçimlendiriciyi doğrudan Node.js ile kontrol eder." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js * CSV biçimlendirici" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "Node.js 22 (22.19+), 24 (24.11+) veya 26+. npm Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "Node.js yok mu, emin değil misiniz?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "{ph0}, v22.19+, v24.11+ veya v26+ yazdırırsa hazırsınız demektir. Daha eski " +#~ "bir sürüm yazdırıyorsa veya \"tanınmıyor\" / \"komut bulunamadı\" ise, " +#~ "Node.js 24 LT:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Örneği açın{ph1} · Dışa {ph2}aktarmayı indirin.js{ph3} * {ph4}Notları " +#~ "indirin.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Örneği indirin ve fermuarını açın. Arşiv, eksiksiz {ph0} klasörünü içerir. " +#~ "Node.js ve npm; Bu örnek için Electron gerekli değildir." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "İlk kez veya eksik Node.js mi yoksa kodlama ajanı mı? {ph0}Adım adım kurulum" +#~ " kılavuzunu izleyin →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "" +#~ "Örneğin: {ph0}Hesap Makinesi neden 200 + 10% için 220 sonucunu veriyor?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}REA Hesap Makinesini incelemek için Windows kullanın. " +#~ "Neden% 200 + 10 220 veriyor?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "{ph0}200 +% 10'un neden 220 verdiğini gördük.{ph1} Şimdi hem + hem de × için" +#~ " kuralları kurtaralım ve deneyelim." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 * REA kireç okur.exe{ph1}{ph2} Hesap Makinesi uygulamasını " +#~ "başlatır{ph3}{ph4} Kod {ph5}. Aracı daha sonra yüklü uygulamanın kitaplığını" +#~ " seçer.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Aegis-v3.4.3'ü incelemek için REA kullanın.indir apk. Altı " +#~ "basamaklı giriş kodunu nasıl oluşturduğunu bulun, neden her 30 saniyede bir " +#~ "değiştiğini açıklayın ve zamanı değiştirebileceğim küçük bir demoyu yeniden " +#~ "oluşturun.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/ön yükleme.js * API üyesi" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/ön yükleme.js * IPC yardımcısı" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "ana / dizin.js * işleyici yardımcısı" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "ana / dizin.js * pano alıcısı" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "ana.js * satır 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "ihracat.js * örnek kaynak alıntı" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "oluşturucu.js * örnek kaynak" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "ön yükleme.js * örnek kaynak" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "ana.js * örnek kaynak" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * yüklenen dizin.js * seçilen satırlar" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}/ absolute / path / to / app'yi analiz etmek ve verileri " +#~ "nasıl dışa aktardığını açıklamak için REA kullanın. İlgili kodu ve kaynak " +#~ "konumlarını gösterin.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}REA kurun ve npx rea-agents@latest setup kullanarak bu " +#~ "kodlama aracısına bağlayın. Onay için kurulum planını gösterin, ardından " +#~ "kurulumu doğrulayın.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}İndir https://rea.tools/examples/notes-example.zip ve " +#~ "paketini açın. Notları Dışa Aktar'ı tıklattığımda ne olacağını bulmak için " +#~ "REA kullanın. Notların nerede olduğunu göster.csv yazılır, hangi alanları " +#~ "içerir ve ilgili dosyalar ve satırlar.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}REA kurun ve npx rea-agents@latest setup kullanarak bu " +#~ "kodlama aracısına bağlayın. Onay için kurulum planını gösterin, ardından " +#~ "kurulumu doğrulayın.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}REA kurun ve npx rea-agents@latest setup kullanarak bu " +#~ "kodlama aracısına bağlayın. Onay için kurulum planını gösterin, ardından " +#~ "kurulumu doğrulayın.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64'nın sohbeti" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}İncelemek için REA kullanın https://rea.tools/. Bu web " +#~ "sitesini benim için klonla.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "kod[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400'nın sohbeti" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× pan_ ölçek" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2} Herhangi Bir Şeyi Tersine Mühendislik{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/uk/messages.po b/website/locales/uk/messages.po new file mode 100644 index 000000000..b67e875ec --- /dev/null +++ b/website/locales/uk/messages.po @@ -0,0 +1,13446 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Головний{ph1} сторінка / Блог" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Блог." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Думки про реверс-інжиніринг." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Реконструкція гри{ph0}Вигадування" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "Промислова революція в області реверс-інжинірингу" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"Чому мене навчив посібник з оновлення та реконструкції TH08, TH095 та TH04 " +"про агентів, перевірку та знання, які використовуються в різних проектах." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Прочитайте статтю" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Автор: N0zoM1z0 · 10 жовтня 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Топ" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "Блог REA - думки про реверс-інжиніринг" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Роздуми про реверс-інжиніринг, засновані на практичному досвіді роботи з REA" +" і агентами штучного інтелекту." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-Дізнайтеся, як працює програмне забезпечення. Зворотне проектування за " +"допомогою вашого програміста." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Головна REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Основна навігація" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA на GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Приєднатися до REA в Discord" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Стежити за REA в X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Головний{ph1} сторінка / {ph2}Блог{ph3} / Реконструкція Тохоу" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Есе · Реконструкція Тохоу" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "Промислова революція в області реверс-інжинірингу." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Автор: N0zoM1z0 · 10 жовтня 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Головне" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Надайте агентам самостійність у проведенні розслідування.{ph1} " +"Встановіть чітку мету та критерії прийнятності, а потім дозвольте агенту " +"вирішити, що робити далі." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Використовуйте сховище та Git як робочу пам'ять.{ph1} Зберігайте логіку" +" в коді. Контрольні точки Git дозволяють продовжити наступний сеанс після " +"завершення діалогу." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Дозвольте доказам вирішити, що ви стверджуєте.{ph1} Переконливе " +"пояснення все ще потребує перевірки. \"Невідомо\" - це правильна відповідь, " +"коли докази неповні." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Перевірте також посилання для перевірки (oracle).{ph1} Спробуйте " +"варіанти, які він повинен відхилити. Якщо помилка не виявлена, перегляньте " +"попередні результати, які залежали від неї." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}Ми знаходимося на зорі промислової революції в RE.{ph1} Методи все ще " +"розробляються. Нам ще багато чого належить вивчити." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Як досвід з'єднує" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Управління{ph1} персоналом * мета і критерії прийнятності" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Самостійність" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Агент" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Виберіть експеримент.{ph0}Висуньте гіпотезу." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Перевірка" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Еталон перевірки" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Тестування на{ph0}конкретні посилання." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Репозиторій" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Робоча пам’ять" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Кодекс, докази,{ph0}перевірки та уроки." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Невідповідність{ph0}{ph1}Перегляньте гіпотезу{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Краще{ph0}{ph1}вихідна точка{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Повторне використання" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Минути{ph1} * Зберегти результат і його докази" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Кожен наступний проект стає найкращою відправною точкою. Це включає " +"виправлення перевірок, коли ми виявляємо прогалини." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "У цій статті" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Серпень 2026 року{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08: продовження{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Два підходи{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095: рецептура{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: різні архітектури{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}Від точного до читабельного{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Промисловий зсув{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Що стає можливим{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Що змінилося в серпні 2026 року" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"До цієї роботи я багато займався зворотним проектуванням вручну. Я перевіряв" +" функцію, поки не знайшов пояснення, а потім перевірив це пояснення в " +"програмі. Просуваючись далі, я витрачав більше свого часу на наступну " +"функцію. Це також означало, що я тримав у голові все більш об'ємну картину." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"Велика частина моєї роботи пов'язана з іграми. Я реконструюю їх, щоб я міг " +"зрозуміти їх поведінку і врешті-решт перенести на програмний порт або мод. " +"Саме цей досвід лежить в основі цієї статті. Цей метод може бути корисним в " +"інших областях, але в кожній області потрібно встановити, що можна " +"перевірити за допомогою надійних посилань." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"У серпні 2026 року я почав серйозно вивчати re, керований агентами. Я хотів " +"побачити, як далеко може зайти агент, маючи доступ до програми та звичайних " +"інструментів розробки. Touhou reconstruction дав мені значний проект, де я " +"міг це зрозуміти." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Перші результати були вражаючими. Розслідування могло б тривати без моєї " +"участі у виборі кожного окремого кроку. Невдале порівняння могло б " +"відправити агента до іншого абонента. Можна було б написати невелику " +"діагностику і використати результат, щоб вирішити, що робити далі. Надання " +"цієї свободи змінило ситуацію на краще: я зміг приділяти більше уваги " +"напрямку проекту і тому, чи заслуговують довіри його перевірки." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"В першу чергу мою увагу привернув темп. Потім я почав замислюватися над тим," +" що залишиться після поточного проекту. Чи буде в наступній грі корисно все," +" що ми тільки що дізналися?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: опора на людську працю" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08{ph1} , \"Вічна ніч\", починався як продовження " +"{ph2}реконструкція{ph3} GensokyoClub. Їх відкрите джерело дало мені значну " +"основу. Це прийшло разом із знанням конструкції та історією внеску, яку я " +"зберіг у продовженні." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"Імпортована історія закінчується на загальнодоступній контрольній точці 10 " +"серпня. Моє самостійне продовження почалося 13 серпня. До 19 серпня в " +"журналі були зареєстровані вихідні дані для всіх 1107 ідентифікованих " +"ігрових функцій." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"Відтворюваний порт реконструкції Linux був випущений 24 серпня, приблизно " +"через одинадцять днів після початку роботи над продовженням. Потім була " +"випущена веб-версія. 64-розрядна версія Linux для власної версії вийшла 30 " +"Серпня." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Мене вразило те, що в результаті роботи була створена програма, яку могли " +"запускати люди. Щоб досягти цього, потрібно було вирішити проблеми, що " +"виходять за рамки окремої функції. Навіть якщо дві функції виглядали " +"коректно окремо, вони могли випадково використовувати окремі копії state, " +"які повинні були бути спільними." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Це зробило перевірку посилань центральною в роботі. Я називаю їх " +"{ph0}перевірочними посиланнями (оракулами){ph1}. Порівняння коду може " +"сказати нам, чи відновлена функція відтворює оригінальні інструкції. " +"Перевірка під час виконання може сказати нам, чи реалізований маршрут " +"досягає очікуваного стану. Агент пропонує пояснення та перевіряє його; " +"невідповідність дає йому можливість дослідити щось конкретне." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Точний збіг з неправильною константою" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Посилання для перевірки (oracle)-це програмне забезпечення, яке хтось " +"написав. TH08 дав мені чітке нагадування про те, наскільки це програмне " +"забезпечення може залежати." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"У вересні помилка, про яку повідомив порт комутатора, знову призвела до " +"автоматичного збору предметів. У відновленому джерелі потужність програвача " +"була перевірена на рівні {ph0}. В оригіналі використовувалося значення {ph1}" +" - поріг максимальної потужності." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"Нормальна потужність невід'ємна, тому перевірка відновленої потужності " +"фактично завжди виконувалася. Вище лінії збору гра могла залучати предмети, " +"не вимагаючи максимальної потужності. Інші винятки з умови були вірними. Ця " +"константа змінила поведінку." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}Однак функція вже пройшла точне порівняння.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"При перестроюванні константа може бути поміщена за іншою адресою. Інструмент" +" порівняння враховував це, коригуючи адреси в складених інструкціях, перш " +"ніж порівнювати їх з оригінальними. Але він ніколи не перевіряв значення з " +"плаваючою комою, збережене за вказаною адресою." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Це залишило прогалину в перевірці. Це може призвести до того, що відновлена " +"команда вказує на початкове значення {ph0}, тоді як джерело все ще вказувало" +" {ph1}. Байти інструкції збіглися. Джерело мав на увазі щось інше." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"Виправлення, випущене {ph0}2 вересня, виправило{ph1} вихідний код і змусило " +"при порівнянні перевіряти фактичні байти константи, на яку посилається " +"посилання. Потім було проведено більше {ph2}широкий аудит{ph3}, в ході якого" +" було проаналізовано 1548 посилань на константи з плаваючою комою. Було " +"виявлено ще дванадцять неправильних посилань у п'яти прийнятих функціях." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"При порівнянні тепер перевіряється кожна така константа з плаваючою комою. " +"Тести використовують відомі неправильні значення, щоб переконатися, що вони " +"відхилені. Нам також довелося переглянути результати, які пройшли більш " +"слабку перевірку." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}Посилання для перевірки (oracle) також потребувало відновлення.{ph1} Її" +" виправлення було частиною оновлення гри." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Це важливо, коли команда складається в основному з однієї людини, яка працює" +" з агентами. Я не можу особисто перевіряти кожен рядок, який вони створюють," +" тому багато в чому я довіряю їх перевіркам. \"Сліпа пляма\" в системі " +"загального контролю (oracle) може вплинути на багато розслідувань, перш ніж " +"я це помічу. Я повинен зрозуміти, що насправді перевіряє засіб перевірки, і " +"протестувати його на предмет випадків, які повинні завершитися невдачею." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"У міру продовження роботи ці перевірки ставали частиною репозиторію. Так " +"само і причини змін вихідного коду і примітки, які дозволяли більш пізнього " +"сеансу продовжити роботу з того місця, на якому зупинилася попередня сесія. " +"{ph0}Репозиторій вихідного коду ставав робочою пам'яттю проекту.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Успішний запуск пакета дозволив нам відновити код та покращити " +"середовище для наступного пакета.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Дві різні ідеї реконструкції" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"{ph0}Публічний сайт GensokyoClub явно висловлює{ph1} свою незгоду з такого " +"роду роботою. У повідомленні повідомляється, що подальша розробка буде " +"вестися в приватному порядку до завершення. В одному уривку сказано:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"Зростання кількості шахраїв (декомпіляторів та портаторів штучного " +"інтелекту) у цій галузі на основі нашої роботи створює погану картину для " +"майбутніх зусиль з декомпіляції…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"У повідомленні також описується психологічне навантаження на супроводжуючих." +" Їх політика щодо вкладів виключає запити на перенесення, зроблені в " +"основному за допомогою штучного інтелекту. Вони присвятили свій вільний час " +"складній роботі, і ця робота допомогла мені продовжувати працювати. Я " +"поважаю зусилля, які стоять за цим. Розбіжності, які я хочу обговорити, " +"стосуються того, як повинна проходити реконструкція і як слід оцінювати " +"внесок." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"У звичному мені ручному робочому процесі розробка розуміння функції і її " +"реконструкція зазвичай покладалися на одного і того ж людини. Проект значною" +" мірою залежав від досвіду цієї людини. Довіра до розробника мала значення, " +"оскільки більша частина міркувань виникла під час його роботи." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Існуючі проекти вже зберігають знання у своїх оригінальних текстах та " +"інструментах для створення. Для мене змінилося те, що агент може " +"використовувати ці знання для проведення наступного розслідування " +"самостійно." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"У своєму продовженні я визначаю мету і стандарт прийняття результату. Агент " +"має широку свободу у проведенні розслідування. Потім запропонована " +"реконструкція повинна пройти відповідні перевірки. Я хочу, щоб інша людина " +"могла проаналізувати, чому ми вибрали певну реалізацію, навіть якщо агент " +"зробив більшу частину роботи." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Це може бути важким переходом. Роки ретельної роботи можуть стати основою " +"для подальшого розвитку, яке буде просуватися набагато швидше. У зв'язку з " +"цим виникають серйозні питання про кредитоспроможність. Це також змінює те, " +"що розробники повинні знати, перш ніж приймати внесок." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"Аналогія з промисловістю допомагає мені задуматися над цим. У ремеслі більша" +" частина процесу залежить від майстерності людини, яка його виконує. " +"Обладнання змінюється там, де потрібна ця навичка. Хтось все одно повинен " +"розробляти процес і розпізнавати, коли його результати неправильні. Різні " +"спільноти можуть вибрати, яку частину цих змін вони хочуть взяти на себе." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Мій вибір - продовжувати відкрито, враховуючи успадковану роботу та " +"зберігаючи її історію. Я хочу, щоб нова робота була доступна для " +"рецензування. Це дає нам можливість оцінити, наскільки далеко може пройти " +"цей підхід, і навчитися з того, що на цьому шляху йде не так." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"Джерело: {ph0}Повідомлення GensokyoClub на README{ph1}, перевірене 10 жовтня" +" 2026 року, і його {ph2}Політика щодо внесків{ph3}. Цитата є скороченою " +"витримкою. {ph4}Титри та Походження{ph5} TH08 вказують на межу продовження." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: досвід починає накопичуватися" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095{ph1}, Shoot the Bullet, значно спростив сприйняття цього " +"досвіду. 29 серпня почалося його оновлення з нульовими підтвердженими " +"ігровими функціями в реєстрі. Ми все ще мали вивчити гру. Але ми вже знали " +"набагато більше про те, як розпочати реконструкцію та як підтримувати її в " +"робочому стані." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"До 7 вересня всі 697 ідентифікованих ігрових функцій мали вихідний код. До 8" +" вересня 696 були прийняті як точні порівняння. 9 вересня вся програма була " +"підключена. Реконструкція Windows i386 була позначена як відтворювана 10 " +"вересня, приблизно через дванадцять днів після ініціалізації." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Я знайшов це більш захоплюючим, ніж швидкість першого проекту. Нова мета " +"могла б отримати вигоду від роботи над іншою грою. Досвід вже був присутній " +"в інструментах і в тому, як був організований проект." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"Наприклад, TH08 навчив нас звертати увагу на зібрану програму з самого " +"початку. Якщо кілька відновлених функцій залежать від одного стану, їх " +"ізольоване порівняння залишає відкритим важливе питання. Нам потрібно " +"побачити, як вони працюють разом. Цей урок допоміг нам сформулювати підхід " +"до побудови всієї програми TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Урок, який залишається в моїй голові, корисний, поки я там. Як тільки він " +"стає перевіркою, що можна запустити інший сеанс, він може продовжувати " +"допомагати і після того, як я перейду далі. Наступний агент може використати" +" результат, не повторюючи розслідування, яке призвело до нього." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Помилка, пов'язана з константою з плаваючою комою, також стосується цієї " +"пам'яті. Це пояснює, чому перевірка посилання також вимагає перевірки даних," +" які стоять за ним. Збереження цього виправлення в коді допомагає подальшим " +"проектам уникнути\" сліпої плями \" Старої перевірки." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}Цей метод стає частиною вихідного матеріалу для наступної гри.{ph1} У " +"наступному проекті ми можемо витратити більше зусиль, щоб внести щось " +"справді нове у свою мету." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Ті ж переваги доступні для тих, хто приєднається пізніше. Вони можуть " +"переглянути рішення та повторно перевірити його, перш ніж продовжувати " +"роботу. Їм не потрібно відновлювати всю історію проекту, щоб з'ясувати, чому" +" вихідний код виглядає саме так." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: робочий процес функціонує відповідно до іншої архітектури" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04{ph1}, Розробник Lotus Land Story, переніс цю роботу в епоху PC-98" +" для DOS. Тепер метою було 16-розрядне середовище з чотирма взаємодіючими " +"програмами. Для розуміння поведінки апаратного забезпечення були потрібні " +"інші дані, отримані з ігор Windows. Існуючий {ph2}робота{ph3} за ReC98 також" +" дала нам цінні знання та вихідні матеріали." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"Відновлення DOS зараз працює. Під час мого ручного тестування я відтворив " +"усі звичайні маршрути до їх закінчення та перевірив збереження. В даний час " +"використовується власний 64-розрядний порт. При установці робочої версії DOS" +" спочатку вказується посилання на цей порт." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"Архітектура змінила те, що нам потрібно було дослідити. Це також змінило " +"компілятор та час виконання, за допомогою яких ми перевіряли свою роботу. " +"Але агент все-таки міг довести питання до результату і використати цей " +"результат для наступного експерименту." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Розглянемо перехід від ігрового процесу до завершення. Нам потрібно знати, " +"який стан переходить через цю межу і яка програма відповідає за це. Це те, " +"що ми можемо дослідити на прикладі продукту DOS. Як тільки докази та чеки " +"будуть доступні, агент зможе опрацювати питання приблизно так само, як це " +"було з заголовком Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"Ось чому TH04 важливий для нашого аргументу. Суттєва зміна платформи не " +"змусила нас почати все спочатку з нового способу роботи. Архітектура " +"визначила проблему; робочий процес все ще давав нам можливість її вирішити." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Що стосується 64-розрядного порту, то тепер ми можемо порівняти нову " +"реалізацію з поведінкою, вже відновленою в DOS. Знання, отримані в " +"результаті реконструкції, дають порту основу для подальшого розвитку." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Стан проекту на 10 жовтня 2026 року: {ph0}реконструкція DOS та ручне " +"тестування{ph1} · {ph2}64-розрядний порт{ph3}. Порт знаходиться в розробці." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Від точного коду до читабельного коду" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Як тільки реконструкція завершиться, я хочу, щоб хтось інший міг це " +"зрозуміти." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Для мене асемблер і необроблені зміщення здаються старими друзями. Я " +"розумію, що це дещо незвичне визначення слова \"читабельний\". Більшість " +"людей воліли б слідувати логіці гри, не тримаючи в голові розташування " +"виконуваного файлу в пам'яті." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"Саме тут потрібно {ph0}семантична реконструкція{ph1}. Відновлене поле все ще" +" може бути відоме в основному з його зміщення. Ми стежимо за тим, як він " +"використовується в грі, поки не зможемо пояснити його роль. Тоді ми можемо " +"дати йому значущу назву та тип, який відповідає доказам. Ми аргументуємо " +"відповідно до джерела, щоб наступна людина могла зрозуміти, звідки походить " +"ця інтерпретація." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Це стає особливо важливим для програмного порту. Абсолютна адреса вказує " +"мені, де щось було у Старому виконуваному файлі. Це мало допомагає " +"64-розрядної реалізації вирішити, якому об'єкту має належати цей стан. Щоб " +"безпечно змінити поведінку, нам потрібно відновити зв'язок, що стоїть за " +"старим доступом до пам'яті." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "Порядок, який я зараз використовую, такий:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Відновіть точну базову лінію.{ph1} Скомпілюйте відновлені фрагменти за " +"допомогою історичного компілятора. Порівняйте відповідний код та дані з " +"оригінальним виконуваним файлом. Запишіть невирішені відмінності, щоб " +"наступний етап мав чітку відправну точку." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Створіть і грайте в неї на оригінальній платформі.{ph1} Об'єднайте ці " +"фрагменти в реальну програму, використовуючи оригінальну архітектуру і " +"компілятор. Використовуйте важливі елементи геймплея. Саме тут ми можемо " +"виявити проблеми із загальним станом або ініціалізацією, які були пропущені " +"при порівнянні ізольованих функцій." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Реконструюйте семантику відповідно до обох посилань.{ph1} Виділіть одну" +" цілісну частину гри за раз і з'ясуйте, що означає Відновлене джерело. " +"Поліпшіть її уявлення, зберігши точні порівняння і відтворювану історичну " +"структуру." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Створіть сучасний порт.{ph1} Перенесіть усталену поведінку в нове " +"середовище, наприклад, у власну 64-розрядну збірку. Реконструйована гра на " +"оригінальній платформі залишається еталоном для порівняння поведінки порту." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"Відтворювана збірка, отримана на другому етапі, стає {ph0}друге посилання " +"для перевірки (oracle){ph1} на третьому етапі. Перше посилання для перевірки" +" (oracle) перевіряє, чи все ще наш змінений вихідний код відтворює " +"відповідний вихідний код та дані. Другий перевіряє, що відновлена програма " +"як і раніше будує і поводиться коректно відповідно до обраних нами шляхами." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Вони виявляють різні помилки. Зміна типу може призвести до зміни " +"згенерованих інструкцій. Зміна власника може призвести до того, що дві " +"частини гри використовуватимуть різні копії state. Якщо обидві перевірки " +"будуть доступні, агенту не вдасться провести розслідування, перш ніж " +"проводити подальший рефакторинг." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Назва сама по собі вимагає підтвердження. Точне порівняння не може сказати " +"нам, чи дійсно поле означає \"Час невразливості\". Ми повинні встановити це " +"по тому, як гра його записує і використовує. Якщо значення залишається " +"невизначеним, нейтральний заголовок буде кориснішим для наступного читача, " +"ніж впевнене припущення." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Ми вивчили цей порядок в ході роботи над проектами. TH08 вже мав доступні " +"для відтворення порти до деяких пізніших перевірок історичних платформ. Це " +"ускладнювало виявлення деяких дефектів. {ph0}Поточний робочий процес " +"фабрики{ph1} ставить збірку оригінальної платформи на перше місце, тому " +"semantic work може використовувати її як довідковий матеріал перед початком " +"перенесення." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}Точна реконструкція дає нам посилання. Семантична реконструкція " +"дозволяє використовувати відновлені знання.{ph1} Потім порт може " +"використовувати обидва." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Що робить це промисловим зрушенням" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Ці проекти змінили напрямок моєї уваги. Після того, як агенти отримали " +"можливість проводити більшість розслідувань, покращення їх робочого " +"середовища стало однією з найкорисніших речей, які я міг зробити. Більш " +"досконалий інструмент міг би допомогти в будь-якій подальшій роботі, яка " +"його потребувала." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"Тут важлива самостійність. Корисний наступний крок часто стає зрозумілим " +"лише після невдалого експерименту. Агенту потрібна достатня свобода, щоб " +"досягти результату в несподіваному місці. Якщо йому доводиться чекати, поки " +"я пропишу кожен крок, більша частина роботи залишається залежною від моєї " +"уваги." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Я очікую, що агент висуне неправильні гіпотези. Важливо те, чи зможемо ми " +"перевірити їх і навчитися з результату. Невдала перевірка повинна допомогти " +"йому зрозуміти помилку досить добре, щоб спробувати ще раз. Мені все ще " +"потрібно вирішити, чи зібрані дані відповідають етапу проекту." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA надає агенту доступ до інструментів аналізу. Питання про викликає об'єкт" +" функції може привести безпосередньо до перевірки цього викликає об'єкта. " +"Проект реконструкції надає компілятор і свої власні перевірки посилань. " +"Агент може використовувати їх, щоб протестувати запропоноване джерело та " +"перевірити, чи відповідає його пояснення дійсності." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"Помилка TH08 показує, чому ці перевірки самі по собі заслуговують на увагу " +"інженерів. Коли одне і те ж порівняння використовується в сотнях функцій, " +"пробіл у ньому може поширитися набагато далі, ніж помилка в одній " +"реалізації. Тестування засобу перевірки покращує зворотний зв'язок, " +"доступний для всієї подальшої роботи." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"Промислова аналогія має тут корисний історичний приклад. {ph0}У 1796 році " +"Боултон і Ватт представили індикатор для парової машини, який допомагав " +"регулювати клапани двигуна{ph1}. Версія для запису тиску відстежувала хід " +"поршня. Це зробило доступним для контролю внутрішній стан двигуна. Наші " +"інструменти порівняння служать тій же меті: вони дозволяють нам вивчати, що " +"робить обладнання, і одночасно вдосконалювати його." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Ми знаходимося на ранній стадії цього промислового зсуву.{ph1} Більша " +"частина інфраструктури все ще знаходиться в стадії розробки. Агенти можуть " +"працювати швидше, ніж це передбачено нашими чеками, тому процес повинен " +"розвиватися паралельно з ними. Коли ми виявляємо дефект у загальному " +"інструменті, ми повинні його усунути та переглянути результати, на які він " +"вплинув. Наступний проект може успадкувати більш потужний інструмент." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Також існує практична межа для будь-якого окремого діалогу. Він завершиться " +"до завершення масштабної реконструкції. Сховище вихідного коду повинно " +"забезпечувати можливість продовження наступного сеансу без втрати причини, " +"по якій було прийнято останнє рішення." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"Проект {ph0}Touhou Reconstruction Factory{ph1} виріс з цієї потреби. Він дає" +" проектам можливість спільно проводити перевірки і витягувати уроки. Робота " +"над однією грою може покращити стартові умови для іншої." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"Саме це робить аналогію з промисловістю значущою для мене. Досвід стає " +"частиною інструментів, які можуть використовувати інші. Вдосконалення цих " +"інструментів впливає на те, скільки може зробити наступна людина — або " +"наступний агент." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Проекти, які ми тепер можемо розглянути" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Темп важливий, оскільки він змінює рішення про початок роботи. Гра може бути" +" цікавою для реінжинірингу і все одно вимагати від мене більше уваги, ніж я " +"міг би їй приділити. Багато проектів так і залишаться ідеями." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Тепер я бачу спосіб просунути такий проект за допомогою повторних " +"досліджень. Отримання робочої реконструкції робить порт програмного " +"забезпечення більш практичним. Відновлення читабельної семантики полегшує " +"комусь іншому вивчення мода. Зусилля, витрачені на розуміння гри, можуть " +"окупитися після запуску першої версії." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Тепер я дивлюся на незнайому програму і запитую: {ph0}який доступ, зворотній" +" зв'язок та накопичені знання дозволили б агенту надійно працювати з " +"нею?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Це питання змушує мене замислитися над проектами, які я б раніше залишив у " +"спокої. Кожен з них може покращити наш підхід до наступного. Я хочу " +"продовжувати вивчати, як далеко це може нас завести." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Основні етапи та джерела реалізації проекту" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Дати описують зареєстровані контрольні точки проекту, звірені з " +"загальнодоступною історією GitHub на 10 жовтня 2026 року. Минулий час-це " +"календарний час між фіксаціями. Наявність вихідного коду, точні порівняння, " +"збірка та результат виконання - все це вказує на різні етапи." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08:{ph1} {ph2}продовження від 13 серпня{ph3}, {ph4}вихідний код від " +"19 {ph5}серпня, порт Linux{ph6} від 24{ph7} серпень, {ph8}веб-версія від 26 " +"серпня{ph9} і {ph10}64-розрядний реліз Linux від 30 Серпня{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} оригінальна бухгалтерська книга за {ph2}29 серпня, " +"{ph3}Початкова бухгалтерська{ph4} книга за 7 вересня{ph5}, {ph6}порівняння " +"за 8 вересня{ph7}, {ph8}прив'язка за 9 вересня{ph9} і {ph10}запис про " +"створення гри за 10 вересня{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}передача від 10 жовтня{ph3} фіксує відновлення " +"робочої DOS, повне тестування розробником звичайного маршруту і поточну " +"64-розрядну фазу." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} Виправлення TH08 verification reference (oracle):{ph1} {ph2}помилка " +"автоматичного збору даних, {ph3}виправлення{ph4} вихідного коду та " +"порівняння{ph5}, а {ph6}також повний аудит констант з плаваючою комою{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Семантична реконструкція:{ph1} {ph2}Керівництво по читабельності{ph3} " +"TH08, {ph4}заводський порядок етапів і два шляхи перевірки{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Промислова історія:{ph1} в {ph2}архіві групи наукових музеїв, " +"присвяченому індикаторам парових двигунів{ph3}, описується введення в " +"експлуатацію в 1796 році і механізм реєстрації тиску." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Метод:{ph1} у документах Factory по {ph2}автономії агентів{ph3} і " +"{ph4}знань про крос-іграх{ph5} зберігаються принципи роботи і уроки." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "" +"{ph0}Додаткові статті{ph1} · {ph2}Ознайомтеся з дослідженням TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Промислова революція в галузі реверс-інжинірингу-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 розповідає про ручне реінжиніринг, реконструкцію Touhou за " +"допомогою агентів штучного інтелекту та про те, як знання об'єднуються в " +"TH08, TH095 та PC-98, TH04 ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Досвід, накопичений в період між проектами" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Есе про реконструкцію Тохоу" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "" +"{ph0}Головний{ph1}{ph2} сторінка/{ph3}Лабораторія швидкості динозаврів" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Перевірити → перебудувати → змінити" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Відновіть правило швидкості динозавра." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Щоб відтворити прискорення гри, спочатку знайдіть правило, яке керує її " +"швидкістю. {ph0}REA повернув запущений сценарій;{ph1} ми використовували " +"його правило для створення цієї міні-гри з {ph2}регульованою швидкістю.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Грайте і змінюйте швидкість{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Прочитайте Відновлене правило{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Перевірте реконструкцію{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Спробуйте провести аналіз{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Грайте і змінюйте швидкість" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Натисніть Play, потім перестрибніть через кактус. Перемістіть повзунок " +"швидкості, щоб вибрати повільнішу або швидшу гру; вона переключиться на " +"фіксовану швидкість. Виберіть Відновлене правило, щоб почати з 6 і поступово" +" збільшувати швидкість знову." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Грати у відтворену версію" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Грати" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Стрибок ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Почати знову" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Швидкість" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Використовуйте правило відновленого прискорення" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Початкове правило: починайте з 6, потім збільшуйте до 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Перемістіть повзунок, щоб встановити власну швидкість. Пробіл або стрибок " +"прибирають кактус." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Увімкніть JavaScript для відтворення реконструкції. Наведений вище код та " +"пояснення залишаються читабельними." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Прочитав повернутий скрипт REA" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Ми перевірили {ph0}версію браузера wayou, засновану{ph1} на Chromium, за " +"допомогою REA. Вона повернула завантажений {ph2} index.js, включивши цю тему" +" у функцію оновлення гри:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Задані наступні параметри: {ph0}, {ph1} і максимальна {ph2}. Гра запускає цю" +" гілку в оновленні без будь-яких колізій." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Використовуйте те саме правило в новій грі" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Копіювати" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Міні-гра використовує цю функцію для автоматичного прискорення. Переміщення " +"повзунка забезпечує фіксовану швидкість. Малювання, Фізика стрибків і " +"перевірка зіткнень з прямокутниками - це новий код для цієї навчальної гри; " +"його симуляція оновлюється зі швидкістю 60 разів на секунду." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}Скачайте правила швидкості{ph1} · {ph2}Прочитайте код гри{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Перевірте реконструкцію" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Ми запустили функцію оновлення оригінальної гри з відключеними перешкодами і" +" автоматичним плануванням. Порівняйте ці записані швидкості з відтворенням " +"відновленого правила." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Оновлення" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Оригінальна гра" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Реконструйоване правило" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Запустіть перевірку швидкості" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Значення округлені до трьох знаків після коми. Розгалуження перевіряє перед " +"додаванням, тому кінцевий приріст може бути трохи вище 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Спробуйте провести аналіз самостійно" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Налаштуйте REA{ph1} за допомогою вашого агента кодування." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Виконавши {ph0}дії по підключенню до браузеру{ph1}, використовувати {ph2} як" +" URL-адреса сторінки." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Вкажіть своєму агенту URL-адресу сторінки та локальну кінцеву точку " +"налагодження, а потім скопіюйте цей запит." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб ознайомитися з цією грою " +"динозаврів. Чому вона стала швидше? Покажіть правило швидкості, а потім " +"створіть зменшену версію зі змінною швидкістю.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Задайте наступне запитання: {ph0}\"Де розраховується висота стрибка? Додайте" +" елемент керування висотою стрибка до нової версії\".{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Джерело: {ph0}перевірений код швидкості{ph1}, автори Chromium. " +"{ph2}Авторське право та ліцензія BSD{ph3}. REA 4.1.0 перевірив запущену " +"версію HTTP у Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome гра про динозаврів: перебудувати правила швидкості-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Прочитайте правила швидкості в грі динозаврів за допомогою REA, перебудуйте " +"їх, потім змініть швидкість і грайте." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Реконструкція швидкості динозавра" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Міні-гра про динозаврів. Використовуйте кнопку переходу або натисніть " +"пробіл, поки гра зосереджена." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Скопіюйте Відновлене правило швидкості" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Запит на копіювання результатів аналізу динозаврів" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Головний{ph1} сторінка / поширені запитання" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "Поширені запитання щодо REA." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Налаштування, Оновлення, аналіз та усунення несправностей." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Тим" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Налаштування та оновлення{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Аналіз{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Діагностика{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Дані та обмін ними{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Налаштування та оновлення" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Як встановити REA ?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Термінал * Налаштування агента" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Копіювати" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"Налаштування реєструє MCP-підключення REA та встановлює відповідну навичку " +"аналізу. Після завершення перезапустіть агента й передайте йому шлях до " +"файлу та запитання. Вимоги й перші кроки описані в {ph0}посібнику з " +"налаштування{ph1}." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "Які агенти кодування можуть використовувати REA?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Будь-який агент, який підтримує локальні сервери MCP. Установка включає в " +"себе Claude Code, Claude для настільних комп'ютерів, Codex, Cursor, Gemini " +"CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot CLI , Command " +"Code , Grok Build , OMP і VS Code . Коннектор Grok-бота доданий з його чату." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Підключіть свій кодуючий агент{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Як оновити REA ?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA релізи часто, включаючи виправлення помилок. Якщо ви встановили CLI з " +"npm:" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Термінал * встановлений CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Виконайте команду оновлення налаштувань, зазначену в оновленні. Якщо ви " +"налаштовуєте свого агента через {ph0}, запустивши:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Термінал * Налаштування агента оновлення" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Перевірте зміни й перезапустіть агента. Підключення до REA використовує " +"визначену версію пакета. Повторіть налаштування, щоб агент перейшов на нову " +"версію. Для разового виклику CLI додайте потрібну команду після {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Встановлюється навик з навичок.цього достатньо?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"Навик надає Вашому агенту інструкції з розслідування. Запустивши " +"{ph0}програму установки{ph1} REA, щоб підключити сервер MCP і встановити " +"відповідну навичку, а потім перезапустіть свій агент, щоб він міг викликати " +"інструменти." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Аналіз" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "Що я можу проаналізувати за допомогою REA?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Почніть з того програмного забезпечення, яке у вас є:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Власні виконувані файли та бібліотеки{ph1}: функції, збірка, псевдокод " +"та посилання." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} Програми JavaScript та Electron{ph1}: модулі, імпорт, IPC та " +"розташування джерел." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Сторінки браузера{ph1}: скрипти, запити та спостереження під час " +"виконання." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA також підтримує робочі процеси для керованих збірок, додатків APK для " +"Android, вбудованого ПЗ і упакованих ресурсів. {ph0}Дивіться приклади " +"проведених досліджень{ph1}." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "Чи потрібен мені Hopper, Ghidra або IDA?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"Для глибокого аналізу програм з машинним кодом використовується один з них. " +"Статичний JavaScript і.NET inspection працюють з наданими файлами і не " +"вимагають аналізу движка програм з машинним кодом." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Підключіть існуючу установку Ghidra або IDA або дозвольте програмі установки" +" виявити Hopper і запропонувати установку. Ваш хост і цільовий сервер " +"визначають, якого постачальника можна використовувати. {ph0}Налаштуйте " +"аналіз програм з машинним кодом{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Чи можу я використовувати REA без кодуючого агента?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Так. У CLI використовуються ті ж робочі процеси аналізу. Для локальної " +"програми JavaScript або Electron:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Термінал * статичний аналіз додатків" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Замініть шлях на папку витягнутої Програми або файл ASAR. " +"{ph0}Використовуйте CLI{ph1} для параметрів установки." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "Який код повертає REA?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"Аналіз машинного коду повертає асемблер і псевдокод, а також виклики " +"функцій, посилання та потрібні константи. Аналіз JavaScript повертає модулі," +" зв’язки між ними та розташування у вихідному коді." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Ваш агент використовує ці результати для пояснення поведінки або написання " +"та тестування реалізації. {ph0}Розрахунок{ph1} DX-Ball і {ph2}перевірка " +"прапора CTF{ph3} показують, як працює цей процес." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "Що запитати в помічника?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Задайте йому локальну мету і одну поведінку для вивчення. Для програми " +"JavaScript або Electron:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Замініть шлях на цільовий. В {ph0}керівництво{ph1} наведені підказки для " +"прикладів в native, Electron і браузері." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Діагностика" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Чому мій агент не може бачити інструменти REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Перезапустіть або підключіть агент після налаштування. Перевірте його " +"реєстрацію REA в {ph0}; для Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Термінал * перевірте одного клієнта" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Замінивши {ph0} на свій ідентифікатор клієнта, наприклад, {ph1} або {ph2}. " +"Якщо у звіті відображається відсутність або застаріла реєстрація, запустіть " +"програму встановлення для цього клієнта:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Термінал * виправлення налаштувань одного клієнта" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Перегляньте його план і перезапустіть клієнт. Якщо реєстрація успішна, але " +"інструменти все ще відсутні, перевірте помилку підключення клієнта MCP. " +"{ph0}Додаткова діагностика налаштування{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Чи потрібно спочатку запускати Hopper?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA запускає Hopper, коли це необхідно для виконання операції. На macOS " +"перед автоматичним аналізом виконайте перший запуск, вибравши " +"демонстраційний режим або активацію ліцензії. {ph0}Дивіться розділ " +"Налаштування власного провайдера{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Що робити, якщо я знайшов помилку?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Оновіть REA{ph1} , перезапустіть свій агент і повторіть те саме " +"завдання. Можливо, проблема вже вирішена в недавньому випуску." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Якщо {ph0}проблема{ph1} чи не усувається, вкажіть версію REA, операційну " +"систему, тип пристрою, кроки для відтворення і висновок помилки. Вкажіть " +"ім'я постачальника, якщо проблема пов'язана з аналізом програм з машинним " +"кодом." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Дані та обмін ними" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "Чи завантажує REA мій додаток?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA аналізує цілі на вашому комп'ютері. Ваш агент отримує результати, і до " +"цих результатів застосовується політика щодо даних, встановлена його " +"постачальником моделей." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Як я можу поділитися прикладом або зробити свій внесок?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Чи є у вас корисний приклад REA? Ми були б раді його побачити. Розкажіть про" +" мету, своє запитання, результати та про те, як ви їх перевірили, у дописі " +"про {ph0}проблема{ph1} або {ph2}запит{ph3} на оновлення. Короткі витяги з " +"коду та цифри допомагають іншим стежити за ходом розслідування." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Також вітаються повідомлення про помилки, запити на функції, документація та" +" вдосконалення коду. Ви також можете обговорити приклад у " +"{ph0}товариство{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "" +"Поширені запитання щодо REA: Налаштування, Оновлення та усунення " +"несправностей" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Відповіді на поширені питання REA: установка, оновлення, інструменти " +"аналізу, засоби програмування, усунення неполадок і обмін прикладами." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "Поширені запитання про REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Скопіювати інсталяційну команду REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Скопіювати команду оновлення REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Команда оновлення Налаштування агента копіювання" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Скопіювати команду аналізу REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Запит на копіювання прикладу аналізу" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Скопіювати команду діагностики клієнта" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Команда налаштування в області копіювання" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Головний{ph1} / Ваше перше розслідування" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Дізнайтеся, куди відправляються{ph0}експортовані нотатки." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"Використовуйте REA для перевірки невеликого додатки, натисніть на кнопку " +"\"Експорт заміток\" і перевірте одну деталь самостійно." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "У цій вправі" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Настройка{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Запитайте про експорт{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Дотримуйтесь відповіді{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Перевірте прогноз{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Задайте ще одне питання{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Підключіть свого агента до REA." + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Копіювати" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Або запустіть цю команду у своєму терміналі:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Ознайомтеся з планом, схваліть налаштування, а потім перезапустіть свого " +"агента. Ви вже підключені? Продовження нижче." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Запитайте, де записаний CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"Прикладом може служити додаток Electron, що складається з шести файлів, з " +"кнопкою {ph0}експорту заміток{ph1}. Ваш агент може перевірити його код, не " +"встановлюючи та не запускаючи Electron." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Ваш агент завантажує файли та передає розпаковану папку REA для перевірки." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Приклад завантаження ZIP-файлу{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Якщо ваш агент не може завантажити файли, розпакуйте цей архів самостійно. " +"Вкажіть шлях до папки {ph0} і задайте те саме питання щодо експорту." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Дотримуйтесь відповіді назад до коду" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Шукайте коротке пояснення з посиланнями на файли та рядки:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Кнопка надсилає повідомлення {ph0}. Основний процес форматує нотатки як CSV " +"і записує {ph1} в папку завантажень користувача. Це стовпці {ph2} і {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Від кнопки до пристрою запису файлів" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"Статичний аналіз REA відображає повідомлення з його обробником. Адресат " +"зчитується з коду." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Шлях до файлу, інструмент форматування та виклик запису знаходяться в цьому " +"обробнику разом. Попросіть свого агента показати ці рядки, якщо у його " +"відповіді їх немає." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "" +"{ph0}Перегляньте повний трасування коду та записаний результат{ph1} REA." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Перевірте прогноз" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Стовпці CSV розділені комою. Що відбувається, коли заголовок нотатки сам по " +"собі містить кому або лапки?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Проведіть перевірку самостійно" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Відкрийте термінал у розпакованій папці {ph0}:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Ця команда використовує оболонку з підтримкою here-document, таку як Bash " +"або Zsh. Ваш агент може запустити той самий JavaScript в оболонці вашої " +"платформи." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Задайте ще одне питання" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Спробуйте продовжити ту саму розмову:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"Що станеться, якщо файл не може бути записаний? Поверніться на сторінку, " +"вказану в повідомленні про помилку." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Або надайте своєму агенту власну програму та запитайте про одну кнопку, файл" +" чи поведінку." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Як Notion копіює текст та HTML{ph1}{ph2} за допомогою функції буфера " +"обміну в вбудованому додатку Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}Як DX-Ball обчислює розташування стереозвуку{ph1}{ph2}, читайте в " +"оригінальних інструкціях і перевірках реконструкції.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Усуньте неполадки в програмі установки або аналітичному{ph1}{ph2} " +"оновіть REA і перевірте з'єднання, якщо воно не працює.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Ваше перше дослідження в області реверс-інжинірингу-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Спробуйте REA у невеликому додатку для нотаток. Налаштуйте свого агента, " +"запитайте, куди надсилаються експортовані нотатки, і перевірте форматування " +"CSV із прикладом заголовка." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "Ваше перше розслідування REA" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Скопіюйте запит на встановлення REA" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Команда Налаштування Копіювання" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Запит на копіювання нотаток для розслідування" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Скопіювати запит перевірки CSV" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Команда перевірки форматування копії" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Головний{ph1} сторінка / початок роботи" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Налаштуйте REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Підключіть REA до свого програміста або перевірте локальну програму зі свого" +" терміналу." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Відкрийте термінал і перевірте:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Термінал" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Копіювати" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Оболонка PowerShell Windows" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Введіть Y, якщо вас попросять прийняти умови. Закрийте PowerShell, відкрийте" +" його знову, а потім запустіть {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Якщо пізніше PowerShell повідомляє, що {ph0}\"запуск сценаріїв у цій системі" +" вимкнено\"{ph1}, коли ви запустите {ph2}, запустіть це один раз і повторіть" +" спробу:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "Якщо ви використовуєте Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Не інакше як:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Закрийте термінал, відкрийте його знову, потім:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"Для установки буде потрібно {ph0} і {ph1} файл (у Debian / Ubuntu: {ph2}). " +"Закрийте термінал, відкрийте його знову, потім:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Власний пакет {ph0} ваш дистрибутив часто старший за версію 22.19, тому " +"перевірте {ph1}, якщо ви використовуєте його замість цього." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Віддаєте перевагу звичайному інсталятору? Завантажте версію LTS з сайту " +"{ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Параметри налаштування" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Підключіть свій кодуючий агент{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Використовуйте CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Налаштування аналізу програм з машинним кодом{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Отримання допомоги{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Підключіть свій кодуючий агент" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Запустіть програму встановлення, щоб підключити REA до свого програміста. " +"Серед доступних клієнтів Claude Code, Codex, Cursor, Gemini CLI, Windsurf, " +"Grok Build та інші підтримувані клієнти MCP. Коннектор Grok-бота доданий з " +"його чату." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Новачок у кодуванні агентів?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Програміст-це помічник зі штучним інтелектом, який працює на вашому " +"комп'ютері, а не на вкладці браузера. Він може читати файли та виконувати " +"команди, а також запитує їх перед внесенням змін. REA надає йому " +"інструменти для зворотного проектування." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Якщо у вас його ще немає, виберіть його, перейдіть на сторінку встановлення " +"та увійдіть:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code{ph2}{ph3} від Anthropic . Потрібен платний тарифний " +"план Claude." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex{ph2}{ph3} за допомогою OpenAI . Увійдіть у свій обліковий " +"запис ChatGPT." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode{ph2}{ph3} , з відкритим кодом. Підключіть Постачальника " +"моделі за вашим вибором." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Потім відкрийте його і скопіюйте в нього наведене нижче запрошення. Перш ніж" +" щось змінити, агент запустить Налаштування REA і покаже вам план." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Або запустіть програму налаштування самостійно" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Як відкрити термінал?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} відкрийте меню \"Пуск\", введіть {ph2}PowerShell{ph3} і" +" натисніть Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} натиснути {ph2} {ph3}, ввівши {ph4}Terminal{ph5} і " +"натисніть Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0} Linux :{ph1} натиснути {ph2} {ph3} {ph4} на більшості настільних " +"комп'ютерів." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Введіть команду за допомогою {ph0} {ph1} ( macOS : {ph2} {ph3}; Linux для " +"терміналів: {ph4} {ph5} {ph6}), потім натисніть Enter." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Виберіть свого клієнта та ознайомтеся з планом Налаштування. REA додає " +"підключення MCP і відповідний навик дослідження, зберігаючи резервну копію " +"існуючої конфігурації. Перед застосуванням змін програма запитує доступ." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Після завершення встановлення перезавантажте клієнт." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Як перезапустити клієнта?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Додатки для настільних{ph1} комп'ютерів (Claude для настільних " +"комп'ютерів, Cursor, Windsurf, VS Code): повністю закрийте програму, а потім" +" відкрийте її знову. Закрити вікно недостатньо. На macOS натисніть {ph2} " +"{ph3}; на Windows також завершіть роботу за допомогою піктограми лотка, якщо" +" вона є." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Термінальні агенти{ph1} (Claude Code, Codex, Gemini CLI): вийдіть із " +"сеансу та запустіть його знову." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Вкажіть своєму агенту цільовий шлях і задайте конкретне запитання. Для " +"програми JavaScript або Electron ви можете почати з:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Подивіться на {ph0} і дізнайтеся, як він експортує дані. Вкажіть точки " +"входу, виклики та залежності, а також вихідні місця для Ваших результатів." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Замініть шлях на ваш локальний цільовий об'єкт." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Як отримати повний шлях до папки?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} у Провіднику файлів клацніть правою кнопкою миші папку " +"та виберіть \"{ph2}Копіювати як шлях{ph3}\". На Windows 10, утримуючи Shift," +" клацніть правою кнопкою миші." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} у Finder клацніть правою кнопкою миші папку, утримуйте " +"опцію та виберіть {ph2}Копіювати \"...\"як шлях{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Будь-яка система:{ph1} перетягніть папку у вікно терміналу, і з'явиться" +" шлях до неї." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "У терміналі вкладіть шлях, що містить пробіли, у лапки." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Використовуйте CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Проаналізуйте папку Програми JavaScript або Electron або архів ASAR, не " +"запускаючи програму:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Статичний аналіз додатків" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Замініть шлях на каталог витягнутої Програми або файл {ph0}. У Windows тут " +"працює шлях, наприклад {ph1}." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Де я можу знайти файл програми asar?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Програми Electron зазвичай зберігають його в папці {ph0}:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (клацніть правою кнопкою миші додаток і виберіть " +"{ph3}Показати вміст пакета{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} часто {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Деякі додатки встановлюються в іншому місці. Знайдіть у папці програми " +"{ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Результат ідентифікує додаток, показує з'єднання між модулями і вказує місце" +" розташування їх джерел. В результаті відзначаються з'єднання, які REA не " +"може вирішити." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Якщо ви хочете, щоб у вашій оболонці була постійна команда {ph0}:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Встановіть CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Продовжуйте читати посібник із застосування JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Налаштування аналізу програм з машинним кодом" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Програмам з машинним кодом потрібен локальний інструмент аналізу. Виберіть і" +" налаштуйте один із наведених нижче інструментів, а потім вкажіть REA ваш " +"виконуваний файл або бібліотеку." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Виберіть інструмент: Ghidra, Hopper або IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Використовуйте існуючу версію Ghidra 12.1.x і 64-розрядну версію JDK 21 або " +"новіше на Linux або macOS , на x64 або arm64. Для встановлення Ghidra " +"потрібен власний декомпілятор для архітектури вашого хоста. Задайте шляхи " +"перед запуском програми установки:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Підключіть вашу установку Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Підключення Ghidra * macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Замініть обидва шляхи на існуючі установки. Програма установки перевіряє їх " +"і записує коректні настройки для обраного Вами клієнта. У Linux arm64 вам " +"може знадобитися окремо зібрати власний декомпілятор Ghidra." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Підключіть Ghidra до Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 має експериментальну підтримку лише для читання власних програм " +"x86 та x64 PE та бібліотек DLL на фіксованих локальних дисках NTFS. " +"Використовуйте існуючу установку Ghidra 12.1.x і 64-розрядну версію JDK 21 " +"або новіше:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Підключення Ghidra * Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Замініть ці два шляхи на свої установки, а потім перегляньте план " +"встановлення." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Підключіть Hopper до macOS або Linux. Запустіть наведену вище команду " +"встановлення; вона виявить існуючу установку або запропонує план " +"встановлення для вашого схвалення." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"На macOS перед автоматичним аналізом виконайте перший запуск Hopper, " +"вибравши демонстраційний режим або активацію ліцензії." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"Перевірені Налаштування IDA використовують Windows з наявною реєстрацією MCP" +" для підключеного графічного інтерфейсу користувача або безголової бази " +"даних. Аналіз Linux і macOS без урахування даних залишається неперевіреним." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Підключіть існуючу реєстрацію IDA MCP" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Збережіть робочу {ph0} вищого сервера, {ph1} і необов'язковий {ph2} у файлі " +"JSON. Також приймається існуючий {ph3}об'єкт mcpServers із записом {ph4}. " +"Вкажіть REA у цьому файлі перед встановленням:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "Підключення IDA * Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"Доданий профіль використовує застарілі інструменти версії 1.4.0, а вихідний " +"двійковий файл уже відкритий у IDA . У профілі headless використовується " +"вищестоящий API database-supervisor і реєстрація в {ph0}; для реальної " +"перевірки використовується супервізор IDA 9.3 Windows x64. Лікар перевіряє " +"реєстрацію, не запускаючи IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Вкажіть REA вихідний шлях до виконуваного файлу за допомогою {ph0} у запиті " +"CLI. Для агента включіть {ph1} у середу реєстрації REA і виберіть IDA при " +"відкритті двійкового файлу." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "Для існуючого Налаштування Ghidra перевірте функцію за допомогою:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Функціональний аналіз" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "Замінивши {ph0} на ім'я функції або адресу, яку ви хочете перевірити." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "Як працюють сеанси аналізу програм з машинним кодом" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Кожна команда CLI імпортує та аналізує двійковий файл, а потім закриває свій" +" сеанс. Запити MCP вашого агента повторно використовують імпортований " +"двійковий файл, поки цей сеанс відкритий." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Дотримуйтесь прикладу аналізу програм з машинним кодом{ph1}, щоб " +"побачити, як результат функції призводить до відновленого обчислення." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Отримання допомоги" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Якщо ваш агент не бачить REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Перезапустіть або підключіть клієнт після встановлення. Перевірте його " +"REA-з'єднання з {ph0}; для Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Перевірте одного клієнта" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Якщо постачальник послуг потребує уваги" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Перевірте, яким провайдером ви користуєтесь. Для Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Перевірте одного постачальника" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "" +"У звіті міститься інформація про невдалу перевірку та запропонований " +"наступний крок." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0}REA задаваний{ph1}{ph2} питання щодо оновлень, агентів та аналізу.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Виберіть Посібник з дослідження{ph1}{ph2} і приклади для двійкового " +"файлу, програми Electron та браузера.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} Проблема{ph1}{ph2} GitHub повідомляють про проблему з командою та " +"діагностикою.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} REA питання спільноти{ph1}{ph2}, розслідування та поточна робота.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Встановіть REA і налаштуйте свій кодуючий агент" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Підключіть REA до Вашого програміста або скористайтеся локальним додатком " +"JavaScript або Electron з терміналу. Налаштування, перші Питання та " +"інструкції для місцевих провайдерів." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Скопіюйте перевірку версії Node.js" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Скопіюйте команду встановлення Node.js для Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Скопіюйте команду політики виконання PowerShell" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Скопіювати команду установки Homebrew Node.js" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Скопіюйте команду встановлення fnm для macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Скопіюйте 24 команди Node.js для macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Скопіюйте команду встановлення fnm для Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Скопіюйте 24 команди Node.js для Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA Керівництво по початку роботи" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Скопіюйте запит на встановлення REA" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Команда Налаштування агента копіювання" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Скопіювати команду аналізу JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Скопіювати команду установки CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Скопіюйте з'єднання з ghidra * macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Скопіюйте підключення Ghidra для Windows PowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Скопіюйте підключення IDA для Windows PowerShell" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Скопіювати команду аналізу власної функції" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Скопіювати команду діагностики клієнта" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Команда діагностики Постачальника копіювання" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Головний{ph1} сторінка / {ph2}Керівництво{ph3} / Огляд браузера" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Подивимося, що станеться{ph0}коли ви натиснете." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Використовуйте невеликий додаток браузера для підключення дії, його " +"мережевого запиту та JavaScript, який створює завантаження." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "У цьому керівництві" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Навести приклад{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Відкрийте браузер{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Запитайте свого агента{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Захоплення з CLI{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Прочитайте запит і скрипт{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Що відбувається, коли ви натискаєте кнопку Експортувати?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"В {ph0}прикладі браузера Notes{ph1} є кнопка {ph2}експорту заміток{ph3}. При" +" натисканні на неї завантажується файл {ph4}, дві нотатки форматуються як " +"CSV і починається завантаження." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Від кліка до завантаження CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * ви{ph1}{ph2} натискаєте кнопку Експорт заміток{ph3}{ph4} і " +"виконуєте цю дію в своєму браузері під час виконання запису.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 · REA{ph1}{ph2} Запишіть запит{ph3}{ph4}, захопіть URL-адресу " +"запиту, статус відповіді та структуру JSON із вибраної сторінки.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * ваш агент{ph1}{ph2} прочитав експортний код{ph3}{ph4}, що " +"підключає спостережуваний запит до {ph5} в {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Запустіть запис, перш ніж натиснути кнопку Експортувати нотатки." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "Відкрийте Chrome з віддаленою налагодженням" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Відкрийте хостинг-приклад Notes, використовуючи окремий профіль браузера та " +"локальний порт для налагодження. На Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Запустіть приблизний браузер" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Копіювати" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Використовуйте шлях до виконуваного файлу встановленого браузера в macOS або" +" Windows . Ви можете замінити URL-адресу сторінки на іншу сторінку, яку ви " +"хочете переглянути." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA підключається до цього існуючого браузера. Ви зберігаєте контроль над " +"сторінкою, виконуєте дію та закриваєте браузер після завершення." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Попросіть свого агента Переглянути одну дію" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб переглянути цю сторінку, поки я " +"натискаю \"експортувати нотатки\". Який запит вона надсилає та як працює " +"CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Приклад запиту. Вкажіть своєму агенту кінцеву точку налагодження, {ph0} і " +"URL-адреса сторінки. Нехай він запустить запис до того, як ви натиснете." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Ваш агент виявляє цільову сторінку, запускає вікно перегляду та зчитує " +"отримані дані. Потім він може перевірити сценарій, що лежить в основі " +"експорту." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Або захоплення з терміналу" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Знайдіть цільовий ідентифікатор сторінки:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Знайдіть потрібну сторінку" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Виберіть цільовий об'єкт за допомогою URL-адреси, наведеної в прикладі " +"Notes. Замінивши {ph0} нижче на його ідентифікатор, потім запустіть:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Зафіксуйте наступні десять секунд" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Дайте команді підключитися протягом декількох секунд, а потім натисніть " +"\"{ph0}Експортувати нотатки{ph1}\"у цьому браузері. Результат з'явиться " +"після завершення перегляду." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Отриманий результат включає вибрану сторінку, мережеву активність протягом " +"цього вікна та форму відповіді у форматі JSON. Попередні запити не входять " +"до цього списку." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Прочитайте запит і експортуйте скрипт" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Записано за допомогою REA 4.1.0 на прикладі local Notes" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Зафіксований факт" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Цінність" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Запит" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Відповідь" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Ініціатор запиту" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} · сценарій" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Структура відповіді" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} з полями {ph1} і {ph2}" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Прочитайте завантажені скрипти" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"Запит ідентифікує джерело даних, а REA записує export.js {ph0} як ініціатор " +"запиту. Прочитайте захоплений вихідний код сценарію, щоб побачити, як " +"використовуються дані:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"Завантаження виконується на сторінці за допомогою відповіді у форматі JSON. " +"Крок форматування CSV виконується зі сценарію; аналіз мережі показує, що при" +" цьому клацанні запитувався файл {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Знайдіть скрипт, який запитує файл {ph0}. Як він уникає заголовків, що " +"містять коми чи лапки?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"Для встановленої програми JavaScript або Electron продовжуйте працювати з " +"робочим {ph0}процесом додатки{ph1}, щоб відстежувати файли та межі процесів." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Аналіз браузера та мережі-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Спостерігайте за експортом нотаток за допомогою REA: виберіть сторінку " +"браузера, зафіксуйте клацання, перегляньте запит і дотримуйтесь сценарію " +"експорту." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Спостереження в браузері" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Скопіюйте та запустіть приклад браузера" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Запит на копіювання прикладу" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Скопіюйте знайдену сторінку" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Скопіюйте запис на наступні десять секунд" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Копіювати читати завантажені скрипти" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Головний{ph1} сторінка / Путівники" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "Напрямні REA." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Проаналізуйте вбудовану функцію, експорт Electron або запит браузера. Кожен " +"посібник містить підказку, код та результати." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Перше розслідування" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Налаштування REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Підключіть свій кодер або використовуйте REA з терміналу." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Почніть роботу з REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Програми з машинним кодом" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Відновлення розрахунку положення звуку зліва / справа" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Почніть з виконуваного файлу гри Windows. Ознайомтеся з інструкціями, " +"дотримуйтесь абонента, прочитайте Числові константи та перевірте відновлений" +" C." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Керівництво по аналізу програм з машинним кодом" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript і Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Слідкуйте за експортом CSV" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Невеликий додаток Notes поєднує в собі функції рендеринга, попереднього " +"завантаження і основного процесу. Використовуйте REA для підключення API, " +"каналу IPC та запису файлів." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "Керівництво по JavaScript і Electron" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Щоб створити більший упакований додаток, скористайтеся {ph0}мостом " +"буфера{ph1} обміну Notion." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Поведінка браузера" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Спостерігайте за клацанням" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Відкрийте приклад working Notes, запишіть запит на експорт і знайдіть код, " +"який перетворює його відповідь на завантаження." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Керівництво по спостереженню за браузером" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Посібники з реверс-інжинірингу-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Вивчіть REA на коротких прикладах: власні обчислення, експорт Electron, CSV " +"і запит з браузера." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "" +"{ph0}Головний{ph1} сторінка / {ph2}Керівництво{ph3} / JavaScript і Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Простежте експорт Electron {ph0} CSV." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Виконайте натискання кнопки на сторінці API, через Electron IPC, для запису " +"файлів CSV." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "У цьому керівництві" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Навести приклад{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Запитайте свого агента{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Відстеження експортного коду{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Спробуйте на прикладі{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Перевірте пристрій запису CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "Куди дівається \"експорт нотаток\"?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"У цьому посібнику використовується невеликий додаток Electron. При " +"натисканні кнопки {ph0}Експортувати нотатки{ph1} викликається API на " +"сторінці, виконується перехід до основного процесу і записується CSV . " +"Поведінка розподілена по декількох файлах." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "Експорт CSV в рамках процесів Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Візуалізатор → попереднє завантаження{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} " +"викликає API, наданий за допомогою {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Примітки: при експорті попереднього завантаження викликається IPC-" +"канал: іменоване повідомлення для основного " +"процесу{ph1}{ph2}{ph3}{ph4}{ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Основний процес{ph1}{ph2} - обробник експорту{ph3}{ph4}{ph5} main.js " +"обробляє цей канал і викликає CSV writer.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} форматує нотатки → {ph1} записує файли для {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA відображає буквальний виклик IPC до свого обробника та ідентифікує " +"відкритий API. Шлях виводиться з коду; під час перехоплення під час " +"виконання можна перевірити, що виконується." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Запитайте про експорт CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Підключіть свій агент до REA{ph1} і передайте йому каталог програм або " +"файл ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Копіювати" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб побачити, що відбувається, коли я " +"експортую нотатки до цієї програми. Де створено CSV?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "Приклад запиту. Вкажіть абсолютний шлях до папки програми або {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA зчитує файли програми та створює карту точок входу, модулів та меж " +"процесів. Ваш агент використовує цю карту, щоб звузити пошук до функції " +"експорту." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Відстеження експортного коду" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "Сторінка викликає невеликий API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"Сторінці відомо ім'я методу. Реалізація знаходиться в попередньому " +"завантаженні, яка надає її в розпорядження засоби візуалізації." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"REA записує {ph0} і буквений канал {ph1}. Він пов'язує цей виклик з єдиним " +"відповідним обробником в основному процесі." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"Читання обробника дає відповідь на оригінальне запитання: {ph0} нотатки " +"форматуються, і основний процес записує файл {ph1} в папку завантажень " +"користувача." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Записано за допомогою REA 4.1.0 на прикладі, який можна завантажити нижче. " +"Розташування вихідних текстів відповідає висновкам API, каналу та обробника." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Проаналізуйте цей приклад самостійно" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Приклад завантаження ZIP-файлу{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Перегляньте шість оригінальних файлів" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Статичний аналіз додатків" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Замініть шлях на папку, яку ви розпакували. Ви повинні знайти один канал IPC" +" та один відповідний обробник у {ph0}. Місця розташування джерел вказані в " +"{ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Для власної програми використовуйте ту саму команду, вказавши її каталог або" +" шлях до ASAR. Агент може використовувати рядок літер, ІМ'Я API або канал " +"IPC за допомогою інструментів відстеження функцій REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Перевірте пристрій запису CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Випливати {ph0} в його обробник. Які вхідні дані надходять до CSV writer і " +"що станеться, якщо запис файлу не вдасться?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Використовуйте розташування джерел для перевірки цих відомостей. Назви " +"обчислених каналів та неоднозначні обробники можуть залишатися невирішеними;" +" спостереження під час виконання дають вам інший спосіб їх вивчення." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Скористайтеся мостом обміну{ph1} Notion і {ph2}застосуйте той самий " +"підхід до пакетної програми Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Поспостерігайте, як браузер при експорті{ph1}{ph2} фіксує реальний " +"клік, і подивіться, який запит він робить.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Виконання нативної функції{ph1}{ph2} продовжується у двійковому " +"форматі, коли функція залежить від рідного коду.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "Аналіз JavaScript і Electron-REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Відстежуйте експорт Notes CSV за допомогою API візуалізації, попереднього " +"завантаження та обробника IPC за допомогою REA. Включає завантажувані файли " +"прикладів і перевірений результат аналізу." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript і Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Запит на копіювання прикладу" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Копіювання статичного аналізу програми" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Головний{ph1} сторінка / {ph2}Керівництво{ph3} / Аналіз програм з " +"машинним кодом" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "Відновити дані DX-Ball{ph0}розрахунок положення звуку зліва / справа." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Перегляньте оригінальні інструкції, визначте вхідні дані та константи, а " +"потім перевірте відновлений C." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "У цьому керівництві" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Навести приклад{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Запитайте свого агента{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Ознайомтеся з результатами REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Відновіть і перевірте{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Використовуйте власний двійковий файл{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Розрахувати розташування стереозвуку зліва / справа" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"У DX-Ball удар цегли задає горизонтальне положення екрану. Звуковий код " +"перетворює його в значення повороту вліво / вправо." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"Початкова функція, {ph0}, видає короткий результат декомпіляції: виклик " +"функції {ph1}. REA також повертає свої інструкції та пристрої виклику, які " +"дають агенту можливість знайти відсутню арифметику." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Ви знайомі з цими умовами?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Інструкція:{ph1} кроки, які виконує процесор, відображаються у зручній " +"для читання формі, такій як {ph2} або {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Результат декомпіляції / псевдокод:{ph1} спроба інструменту аналізу " +"перетворити інструкції назад у C-подібний код. У ньому можуть бути відсутні " +"окремі частини, як у цьому прикладі." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Викликаюча функція:{ph1} функція, яка викликає цю функцію. Вона " +"показує, які значення передаються." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Адрес:{ph1} розташування в програмі, записане в шістнадцятковому " +"форматі, наприклад, {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Константа:{ph1} фіксовані числа, що зберігаються в програмі, зчитуються" +" як необроблені байти та декодуються." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Три докази, один розрахунок" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * інструкції{ph1}{ph2} Ціле введення{ph3}{ph4}, прочитаний стеком, " +"надає значення, яке використовується інструкціями з плаваючою комою.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * Абонент{ph1}{ph2} - Екранна координата{ph3}{ph4}, по якій абонент," +" що вдарився цеглою, проходить {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * байти даних{ph1}{ph2} Числова константа{ph3}{ph4}, на які " +"посилаються байти, декодуються як {ph5}, {ph6} і масштабне значення.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA надає інструкції, зв'язок між викликами функцій і байти. Агент " +"інтерпретує їх разом." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Запитайте про поведінку" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Після {ph0}підключення REA до вашого агента{ph1} і {ph2}налаштування " +"інструменту аналізу програм з машинним кодом{ph3} надайте локальний " +"виконуваний файл та запитання:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Який інструмент аналізу слід використовувати?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA потрібен один з них для читання власних програм:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper{ph1} (macOS або Linux ): програма встановлення REA виявляє його" +" або пропонує встановити. На macOS відкрийте Hopper один раз і виберіть " +"демонстраційний режим або активуйте ліцензію перед першим аналізом." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra{ph1} (macOS або Linux ; експериментальна версія Windows ): " +"безкоштовний, але вимагає існуючої установки Ghidra 12.1.x і 64-розрядної " +"версії JDK 21 або новіше." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA{ph1} (Windows): для існуючого Налаштування IDA з реєстрацією MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Інструкції по налаштуванню аналізу програм з машинним кодом наведені в " +"розділі {ph0}Налаштування аналізу програм з машинним кодом{ph1}." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Копіювати" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб дізнатися, як DX-Ball обчислює " +"розташування стереозвуку. Поясніть розрахунок і покажіть код.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Приклад запиту. Вкажіть своєму агенту шлях до локального виконуваного файлу " +"DX-Ball 1.07. REA не включає DX-Ball, тому використовуйте власну копію або " +"задайте те саме питання про іншу невелику програму Windows, яку ви маєте." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Як отримати повний шлях до файлу?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} у Провіднику файлів клацніть правою кнопкою миші файл і" +" виберіть \"{ph2}Копіювати як шлях{ph3}\". На Windows 10, утримуючи Shift, " +"клацніть правою кнопкою миші." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} у Finder клацніть файл правою кнопкою миші, утримуйте " +"опцію та виберіть {ph2}Копіювати \"...\"як шлях{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Будь-яка система:{ph1} перетягніть файл у вікно терміналу, і з'явиться " +"шлях до нього." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Ознайомтеся з результатами REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Прочитайте вхідні дані" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Інструкції завантажують цілий аргумент і перетворюють його в арифметику з " +"плаваючою комою. Це вхідні дані, відсутні в першому поданні псевдокоду." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Слідуйте за абонентом" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA ідентифікує об'єкт, на який впала цегла. У попередніх інструкціях " +"координату плитки множили на 30; додавання {ph0} (20) дає положення цегли на" +" екрані." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Прочитайте зазначені константи" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"Арифметика посилається на ці адреси. Зчитування байтів дозволяє отримати " +"фактичні значення; порядок команд повідомляє агенту, як вони " +"використовуються." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Запишіть і перевірте відновлену функцію" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"При масштабі 1,0 позиції екрану 0, 320 і 640 перетворюються в -500, 0 і 500 " +"до перетворення в ціле число. При обчисленні центр екрану виявляється в " +"центрі стереополя." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"Агент використовував результати REA для написання коду C. окремі перевірки " +"порівняли 3205 входів з оригінальною функцією x86 і відтворили всі 63 " +"скомпільовані байти повної функції." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}Дивіться повне дослідження та порівняння збірки з C{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Спробуйте це за допомогою власного двійкового коду" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Підключіть Постачальника програм для аналізу машинного коду{ph1}, потім" +" надайте своєму агенту локальний виконуваний файл або бібліотеку та функцію " +"для вивчення. Корисні початкові запитання включають “як обробляється цей " +"файл?\"або\" яка функція виконує цю дію в меню?”." + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Якщо ви вже знаєте назву функції або адресу, ви можете запитати її з " +"терміналу. Для налаштованої установки Ghidra:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Функціональний аналіз" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Замініть цільовий шлях і {ph0} на своє власне ім'я функції або адресу. Кожен" +" виклик CLI імпортує та аналізує двійковий файл, а потім закриває свій " +"сеанс. Запити вашого агента MCP повторно використовують імпортований " +"двійковий файл, поки цей сеанс відкритий." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Прочитайте псевдокод разом з інструкціями та посиланнями. Якщо в результаті " +"залишається невирішеним питання про виклик або значення, використовуйте це " +"місце як наступне запитання." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Власний Бінарний аналіз-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Відновіть власні обчислення за допомогою REA: перегляньте інструкції, " +"дотримуйтесь абонента, прочитайте константи та перевірте відновлений C." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Аналіз програм з машинним кодом" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Запит на копіювання прикладу" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Аналіз функції копіювання" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Налаштування REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Налаштування REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}Що таке вогонь?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}Як допомагає REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Гра в динозаврів{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Калькулятор{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Спробуйте REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Дізнатися більше{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Допомога та зворотній зв'язок{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Товариство{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Зворотне проектування за допомогою агента кодування" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Дізнайтеся, як{ph0}працює програма." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA надає вашому ШІ-помічнику інструменти, щоб дослідити програму й пояснити" +" її поведінку." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "Вже знайомі з RE? {ph0}Перейти до посібників з аналізу →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Хочете копнути глибше? {ph0}Читати блог →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Вставте цей запит у свого ШІ-помічника для програмування:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Копіювати" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Або виконайте цю команду в терміналі:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "Перевірте й схваліть план змін, а потім перезапустіть помічника." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Що таке зворотна розробка?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"З’ясування того, як працює програма, через {ph0}дослідження самої " +"програми.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"Мета: зрозуміти функцію досить добре, щоб {ph0}пояснити її{ph1}, " +"{ph2}змінивши{ph3} або {ph4}перебудувати заново.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "До REA · Ви досліджуєте {ph0}самостійно{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Декодування гілок" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Відстеження викликів" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Відновіть правило" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Оригінальні вибрані інструкції для x64 ·{ph1}{ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * в якій філії?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Два переходи в одне і те ж місце. Що це за " +"оператори?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Знайдіть ідентифікатори команд, а потім позначте гілку." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Розділити ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Помноживши ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Що роблять викликані функції?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100-це чисто. Дзвінки-це лише адреси. {ph0}Який з них ділиться? Яке " +"значення входить в?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Перевірте допоміжні функції та простежте збережені значення." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Діливши" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * яке це правило?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Цей шлях множиться на інші вхідні дані. Таким чином, {ph0}10% означає 10% " +"від 200{ph1} після +”." + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "Назвіть операнди та перевірте обидва шляхи до операторів." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Наочне міркування експерта" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Ви розшифровуєте інструкції, виконуєте виклики функцій і відновлюєте " +"обчислення.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "З REA · Ви запитуєте {ph0}свого помічника{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Лише один запит." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Запитайте помічника {ph0}звичайними словами.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Приклад підказки * Калькулятор" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Приклад відповіді * заснований на результатах дослідження" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "" +"Після + кнопка % виводить {ph0}процентне значення від першого числа.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA надає" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Інструкції обробника, декомпільований код та виклики." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Помічник пояснює" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "Яка гілка застосовується, що вона обчислює і як її перебудувати." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Виберіть збірку з встановленої бібліотеки DLL Calculator. Міркування та " +"відповідь ілюструють отримані результати. {ph0}Продовжимо з прикладом з " +"калькулятором ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Давайте розглянемо два приклади.{ph1} Змініть швидкість гри, потім " +"поверніться до калькулятора та відновіть його кнопку %." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Приклад 01 * гра в динозаврів Chrome" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Чому динозавр прискорюється?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Мета" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Перебудовуйте гру з {ph0}регульованою швидкістю.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Навіщо його перепроектувати?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Щоб відтворити його прискорення, нам потрібно {ph0}правило в біговій " +"грі{ph1}: як швидко воно починається, наскільки збільшується і коли " +"припиняється." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Грати у відтворену версію" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Грати" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Стрибок ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Почати знову" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Швидкість" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Використовуйте правило відновленого прискорення" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Початкове правило: починайте з 6, потім збільшуйте до 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Перемістіть повзунок, щоб встановити власну швидкість. Пробіл або стрибок " +"прибирають кактус." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Увімкніть JavaScript для відтворення реконструкції. Наведений вище код та " +"пояснення залишаються читабельними." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA повернув" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Скрипт, фактично запущений на сторінці.{ph1} Агент зчитує свою функцію " +"оновлення та налаштування швидкості, а потім використовує це правило в новій" +" грі." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Приклад підказки * гра в динозаврів" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб ознайомитися з цією грою " +"динозаврів. Чому вона стала швидше? Покажіть правило швидкості, а потім " +"створіть зменшену версію зі змінною швидкістю.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Перевірена мета: {ph0}версія браузера wayou, заснована{ph1} на Chromium." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Почніть з 6.{ph1} Додавайте 0,001 при кожному оновленні без збоїв, поки" +" швидкість нижче 13.{ph2}{ph3}{ph4}{ph5}" + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Відкрийте лабораторію швидкості →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Що робить кожна частина" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 · REA{ph1}{ph2} Зчитує скрипт запущеної гри{ph3}{ph4} і повертає " +"його дійсний код та налаштування агенту.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * ваш агент{ph1}{ph2} перебудує правило, додасть елемент " +"управління{ph3}{ph4} і використовує Відновлене прискорення в невеликій грі з" +" повзунком швидкості.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * ви{ph1}{ph2} міняєте швидкість і граєте{ph3}{ph4} з оригінальним " +"прискоренням, потім вибираєте свій власний темп.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Ознайомтеся зі сценарієм, перевірками та як спробувати аналіз" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA перевірив версію браузера HTTP через локальне з'єднання Налагодження та " +"повернув завантажений {ph0}, включаючи його вихідний код та дайджест." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Ми запустили функцію оновлення оригінальної гри в контрольованій перевірці " +"браузера, вимкнувши перешкоди та автоматичне планування. Після 4000 оновлень" +" швидкість склала 10,0; після 10 000 - 13,0, округлена до одного знака після" +" коми." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"У новій міні-грі збережено це правило швидкості. Її код для малювання, " +"стрибків і зіткнень - це невелика навчальна реалізація. {ph0}Відкрийте " +"лабораторію{ph1}, щоб ознайомитися з новим кодом і виконати ту ж перевірку " +"швидкості." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Щоб самостійно перевірити цільовий об'єкт, виконайте {ph0}дії по підключенню" +" до браузеру{ph1}, використовувати {ph2}сторінку dinosaur{ph3}. Вкажіть " +"своєму агенту URL - адресу цієї сторінки та локальну кінцеву точку " +"налагодження, а потім скопіюйте наведений вище запит." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Перевірений код швидкості{ph1} · {ph2}Автори Chromium * Ліцензія " +"BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Приклад 02 * Калькулятор Windows" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Відтворіть кнопку % калькулятора." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "" +"Створіть невеликий калькулятор, який {ph0}коректно обробляє як+, так і " +"×.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Одна і та ж кнопка використовує {ph0}різні правила після + і ×.{ph1} Ми " +"перевіряємо встановлене додаток, щоб визначити, до якого числа " +"застосовується процентне співвідношення." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Спробуйте зробити розрахунок" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Скинути" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% від 200 = 20. Тоді 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Інтерактивна ілюстрація перевіряється процентного правила." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Одна гілка ділиться на 100. Інша також множиться на перше число.{ph1} " +"Агент використовує обидві гілки для відтворення кнопки%." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "У цьому прикладі {ph0}, а {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Приклад підказки · перебудувати " +"кнопку %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA для перевірки кнопки % у калькуляторі " +"Windows. Відновіть правила після + і×, а потім створіть невеликий " +"калькулятор, який використовує обидва параметри.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Со +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Візьмемо 10% від першого числа.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Со ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Перетворіть 10% на 0,1200{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Від встановленого додатка до робочої кнопки %" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA читає бібліотеку{ph1}{ph2}, повертає код обробника " +"%{ph3}{ph4}, функція перевіряє оператор і використовує константу {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * ваш агент інтерпретує це{ph1}{ph2}, пояснює та відтворює " +"правила{ph3}{ph4}, звіряє гілку з вихідним кодом Microsoft, а потім " +"спробуйте + і × вище.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Подивіться реальний код і те, як була перевірена відповідь" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"Перевірено за допомогою REA 4.1.0: Windows Calculator 11.2508.4.0, x64. " +"Резюме, доступне для читання, використовує імена з загальнодоступного " +"Джерела Microsoft для опису відновленої гілки." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Відсоток реалізації{ph1} · {ph2}Тестові приклади Microsoft{ph3} * " +"Керівництво по {ph4}вбудованої налаштуванні{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Ваше перше розслідування" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Спробуйте REA у невеликому додатку." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Завантажте наш приклад Notes, простежте його експорт CSV і перевірте один " +"змінений вхід." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Спробуйте керуватися наведеним прикладом" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Хочете дізнатися більше?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Скажіть своєму агенту, що ви хочете зрозуміти або доопрацювати. З REA ви " +"можете працювати разом над чим завгодно-від {ph0}клонування цього веб-" +"сайту{ph1} до {ph2}відтворення гри по її виконуваному файлу.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Приклад запиту * Веб-сайт" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Так, ось цей." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Приклад підказки · Реконструкція гри" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб відтворити цю гру за її виконуваним" +" файлом. Відновіть логіку ігрового процесу на C і порівняйте її з " +"оригіналом.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Дивіться тематичне дослідження DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "" +"Для виконання етапів настройки і аналізу виберіть свій цільовий об'єкт:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Програми з машинним кодом" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Перевірте функції, рядки, посилання та зв'язки між викликами функцій у " +"виконуваних файлах та бібліотеках." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Керівництво по аналізу програм з машинним кодом" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript і Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Відображайте модулі, маршрути, IPC та власні залежності з папки програми або" +" архіву ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Робочі процеси додатків" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Активність у браузері та під час виконання" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Фіксуйте активність обраного браузера або процесу, а потім порівнюйте " +"результати в різних запусках." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Керівництво по спостереженню за браузером" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Маєте запитання?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Ознайомтеся з часто{ph1} задавати питання, {ph2}поспілкуйтеся з нами по" +" Discord{ph3} або {ph4}відкрийте випуск{ph5} GitHub, щоб дізнатися про " +"помилки та запити функцій." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Приєднатися до спільноти" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Діліться результатами досліджень і отримуйте допомогу від інших користувачів" +" REA на Discord. Слідкуйте за оновленнями проекту REA на X." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-реверс-інжиніринг для вашого програміста" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Реінжиніринг програм, двійкових файлів та поведінки браузера за допомогою " +"агента кодування. Дотримуйтесь чітких інструкцій та спробуйте інтерактивні " +"приклади з REA." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Скопіюйте запит на встановлення REA" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Команда Налаштування Копіювання" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Дотримуйтесь інструкцій ручного калькулятора для аналізу" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Процентне питання калькулятора копіювання" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Міні-гра про динозаврів. Використовуйте кнопку переходу або натисніть " +"пробіл, поки гра зосереджена." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Запит на копіювання результатів аналізу динозаврів" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Виберіть спосіб розрахунку" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Запит на аналіз за допомогою калькулятора копіювання" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Запит на копіювання проекту веб-сайту" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Запит на копіювання реконструкції гри" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Головний{ph1} сторінка / {ph2}Вітрина{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Практичний приклад * аутентифікатор Aegis" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Звідки Аутентифікатор{ph0}генерувати код авторизації?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Шестизначний код змінюється кожні 30 секунд. Використовуйте REA , щоб знайти" +" обчислення в Android APK, а потім відновіть їх за допомогою годинника, яким" +" ви можете керувати." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * офіційний реліз APK * 6,9 МБ" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Переглянути Aegis на GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "Від APK до коду, який ви можете відтворити" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * знайдіть функцію{ph1}{ph2} 3077 класи → методи генерації{ph3}{ph4}" +" REA здійснює пошук у пакеті та відстежує код, який використовується для " +"відображення та копіювання дій.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * Прочитайте час розрахунку{ph1}{ph2} + ключ облікового запису → " +"шестизначний{ph3}{ph4} REA повертає методи та значення за замовчуванням. " +"Агент пояснює, як вони поєднуються.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * перебудуйте і встановіть прапорець{ph1}{ph2} \"Змінити час\". " +"Ознайомтеся з кодом.{ph3}{ph4}Нова демонстрація браузера відтворює правило і" +" перевіряє його на відповідність загальнодоступним посиланням.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "У цьому тематичному дослідженні" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Запитайте свого агента{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Спробуйте скористатися генератором коду{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Знайдіть код за допомогою REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Ознайомтеся з розрахунком{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Перевірте реконструкцію{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Перевірте APK самостійно{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Запитайте свого агента" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"Додаток показує змінюється код для входу в систему. Ми хочемо з'ясувати, " +"{ph0}що змушує його змінюватися{ph1}, і відтворити цю поведінку." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Копіювати" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Приклад запиту для завантаженого APK з налаштованим аналізом REA для " +"Android. {ph0}Отримайте APK і налаштування аналізу ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Спробуйте скористатися генератором коду" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"Додаток групує час в {ph0}30-секундні блоки.{ph1} Для генерації коду номер " +"блоку об'єднується з ключем облікового запису. Один і той же ключ і блок " +"генерують один і той же код." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Переведіть стрілки годинника на 60 секунд вперед" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Час" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "секунда" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Наші регульовані зразкові годинник" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30-секундний блок" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Блок" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 секунд{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Згенерований код" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Ключ облікового запису + блокування → шість цифр" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Приблизний час, в секундах" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 секунд" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 секунд" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"На 59 секунді: {ph0}287082.{ph1} На 60 секунді: {ph2}359152.{ph3} При " +"переміщенні в межах одного блоку код залишається незмінним." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"Ключ є фіксованим, загальнодоступні {ph0}тестові дані RFC 6238{ph1}. У " +"демонстрації реалізований розрахунок, відновлений з APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "" +"На діаграмі показано результат за 59 секунд. Увімкніть JavaScript, щоб " +"змінити час." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Знайдіть код за допомогою REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Скоротіть APK до трьох класів" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} обчислення використовується TotpInfo; два інші параметри стосуються " +"індикатора виконання та імпортованих облікових записів. TOTP означає " +"одноразовий пароль на основі часу." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Підключіть генератор до дисплея програми" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA визначає перевантаження часової мітки і знаходить викликають базовий " +"метод. При перевірці {ph0} на дисплеї відображається виклик {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Запити показують скорочений шлях введення. В іменах результуючих КЛАСІВ " +"відсутній поширений префікс {ph0}." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Ознайомтеся з розрахунком" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA повертає {ph0}перетворення годин, налаштування за замовчуванням і методи" +" генерації.{ph1} Розробники встановили 30-секундний інтервал і шість цифр; " +"метод часової позначки перетворює секунди в номер блоку." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}Часовий блок 01{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Клавіша + блок" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Шість цифр" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Час вибирає блок.{ph1} Усі секунди від 30 до 59 дають блок 1. Через 60 " +"секунд блок стає 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}Ключ також має значення.{ph1} Генератор поєднує ключ облікового запису " +"з блоком. Обліковий запис з іншим ключем може одночасно відображати інший " +"код." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Залиште шість цифр.{ph1} Залишок після ділення на 1 000 000 при " +"необхідності доповнюється нулями, так що код може починатися з 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Наведено витяги з декількох перевірених методів з перенесенням рядків для " +"відображення. Права панель являє собою пояснювальне резюме. {ph0}Код Aegis " +"відповідає GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Всередині генератора" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"Випущений APK перекладає {ph0} в {ph1}. REA слідує за викликом з {ph2} і " +"повертає це тіло; оригінальне джерело викликає допоміжне {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"Останній байт хешу вибирає позицію. Чотири байти в цій позиції дають " +"позитивне 31-розрядне число; форматування зменшує його до необхідної " +"кількості цифр. Останній аргумент конструктора вибирає гілку форматування " +"коду, введену під час компіляції." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}Порівняйте з відповідним джерелом випуску{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Перевірте реконструкцію" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Ми зібрали вибрані методи Java, повернуті REA, у невелику тестову програму. " +"Їх результати відповідали незалежній реконструкції {ph0}133 тестових " +"прикладів{ph1}, включаючи межі тимчасових блоків і коди, що починаються з " +"нуля." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Приблизний час" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Шестизначний код" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 секунд" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 секунди" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Генератор також відповідає шести опублікованим посилальним варіантам SHA-1 в" +" {ph0}RFC 6238{ph1}. Перевірте їх реалізацію в браузері:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Виконувати перевірку посилань" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Ознайомтеся з демонстраційним розрахунком" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"У контрольних випадках використовуються восьмизначні значення. Перевірка " +"також підтверджує їх шестизначні результати." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Для перевірки використовуються витягнуті методи Java та нова демонстрація. " +"Android APK був перевірений статично." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Перевірте APK самостійно" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Налаштуйте REA{ph1} на macOS або Linux , потім завантажте ці два файли " +"в одну папку. У Windows використовуйте середовище Linux, таке як WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Для аналізу Android потрібен повний JDK 17 або новішої версії. Виберіть його" +" за допомогою {ph0} або {ph1}. У цьому випадку використовувався JDK 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Наведіть курсор REA на файл постачальника та перевірте APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Ваш агент може продовжити роботу через CLI від REA, скориставшись наведеною " +"вище інструкцією. Для MCP додайте {ph0} у середу сервера REA і повторно " +"підключіть його." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Наступне питання: {ph0}що відбувається, коли в обліковому записі " +"використовуються вісім цифр або інший інтервал часу?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Джерело" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}Офіційний реліз Aegis 3.4.3{ph1} · {ph2}Відповідний оригінальний{ph3} " +"код · {ph4}Ліцензія GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" +"{ph0}Довідкові приклади RFC 6238{ph1} · {ph2}Демонстраційні тестові " +"дані{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"Перевірено за допомогою REA 6.1.0 9 жовтня 2026 року. Декомпільовані " +"фрагменти додаються до Aegis; діаграма, читабельне резюме та реконструкція " +"браузера-це новий навчальний матеріал." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK зворотний інжиніринг: коди для входу-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Перевірити Aegis Андроїд APK з REA, відновити його шестизначний логін-код " +"розрахунків і спробувати реконструкція з регульованим годинник." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Тематичне дослідження Aegis APK" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Скопіювати запит як приклад Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Дотримуйтесь інструкцій щодо введення реєстраційного коду" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Скопіювати команду перевірки APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Головний{ph1} сторінка / {ph2}Вітрина{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Тематичне дослідження * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Знайдіть прапор у{ph0}двійковому форматі CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"Використовуйте REA для перевірки невеликого засобу перевірки прапорів, " +"перетворіть його правила в рівняння та знайдіть вхідні дані, які {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "" +"пристрій для перевірки прапорців в маскованих квадратах * просте * Linux " +"x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Перегляньте оригінальну задачу" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "Від двійкового коду до перевіреної відповіді" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * знайдіть рядки перевірки{ph1}{ph2} → функція{ph3}{ph4} перевірки " +"REA знаходить запит, посилання на нього і код, який приймає або відхиляє " +"дані, що вводяться.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 * витягніть правила{ph1}{ph2} з 36 символів * 26 Сум{ph3}{ph4} REA " +"повертає інструкції та дані, що стоять за кожною перевіркою. Агент " +"перетворює їх у рівняння.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * Вирішіть і запустіть{ph1}{ph2} відновлений прапор → " +"виправити!{ph3}{ph4}Рівняння вирішуються сценарієм Python. REA фіксує " +"вихідну програму, яка приймає результат.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"Завдання написано Джозефом і опубліковано в офіційному сховищі DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "У цьому тематичному дослідженні" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Знайдіть код підтвердження{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Прочитайте одну маску{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Збірка в читається код{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Розв'яжіть рівняння{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Перевірте відповідь{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Спробуйте самі{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Знайдіть код підтвердження" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Роздатковий матеріал являє собою виконуваний файл розміром 15 КБ. Він " +"запитує прапорець, потім виводить \"{ph0} або \"{ph1}. Почніть з простого " +"запиту до свого агента." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Копіювати" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA для аналізу ms_flag_checker та пошуку " +"прапора. Поясніть, як працюють перевірки, а потім перевірте відповідь за " +"допомогою оригінальної програми.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Приклад запиту із завантаженим завданням, доступним локально, та підключеним" +" постачальником програм для аналізу машинного коду." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Дотримуйтесь інструкцій щодо введення, щоб перейти до його функції" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"Посилання дає агенту можливість провести розслідування, навіть незважаючи на" +" те, що оригінальні імена функцій виконуваного файлу були видалені." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Ознайомтеся з програмою перевірки і двома її помічниками" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"Перший цикл копіює коди з 36 символів. Цикл перевірки розшифровує маску, " +"підсумовує вибрані коди та порівнює результат із збереженим числом. Його " +"кроки розміром {ph0} байт по {ph1} байт дають 26 масок." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Це вибрані результати нового аналізу REA. Шлях до локального цільового " +"об'єкта скорочено для відображення; адреси стосуються імпортованого " +"зображення REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Одна перевірка виявляє один символ" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Програма перевірки впорядковує вхідні дані у вигляді сітки розміром 6×6. " +"Маска визначає, які клітини беруть участь у сумі. Компактне кодування " +"використовує негативні числа для пропуску комірок і позитивні числа для їх " +"вибору." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "" +"При сьомій перевірці вибирається тільки одна позиція. {ph0}Відкрийте " +"малюнок{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Порахуйте маску та її ціль із двійкового файлу" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"Команда {ph0} зчитує байти маски як значення зі знаком. Ось чому {ph1} " +"означає -21. Метою є ціле число в порядку убування. Разом ці байти " +"повідомляють агенту, що {ph2}, так що цей символ дорівнює {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Від інструкцій до читабельного чеку" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Виберіть крок для підключення допоміжного засобу підсумовування та об'єкта, " +"що його викликає, до того самого правила в C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Почавши" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Вибрати" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Додавши" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Просування" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} Порівнювати" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * вибрані оригінальні інструкції" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Читабельний підсумок C * one-check" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * почніть з нуля.{ph1} {ph2} містить поточну суму." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * перевірте клітинку маски.{ph1} Нульове значення пропускає символ; " +"ненульове значення включає його." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * додайте символьний код.{ph1} До суми додається ціле число, " +"отримане при введенні з тим же зміщенням." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * перехід до наступної комірки.{ph1} Початковий цикл просувається по" +" чотири байти на ціле число і відвідує шість рядків по шість комірок." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * порівняти зі збереженим цільовим значенням.{ph1} Абонент отримує " +"суму в {ph2}. Невідповідність стає {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Інструкції надходять від помічника по підсумовуванню і викликає його " +"пристрою. C - це пояснювальна записка з описовими назвами та згладженим " +"циклом із 36 клітинок." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Розв'яжіть 26 рівнянь" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"У більшості масок вибирається кілька осередків. Наприклад, при першій " +"перевірці додається 16 кодів символів, і потрібно в цілому 1441. " +"Перекриваються вибірки дають рівняння, які може вирішити невеликий скрипт " +"Python." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Уривок з Python * solver" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3-це програма-вирішувач, яка знаходить значення, що задовольняють цим " +"рівнянням. Цей фрагмент використовує витягнуті перевірки та використовує " +"{ph0} з буквами, цифрами, символами підкреслення і фігурними дужками. Повне " +"завантаження включає всі 26 масок і цільових об'єктів." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Завантажте повний вирішувач" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Перевірте відповідь за допомогою оригінальної програми" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"Програма захоплення процесу REA записує оригінальний виконуваний файл, який " +"приймає прапор solved. Зміна одного вибраного символу з {ph0} на {ph1} " +"призводить до отримання першої суми 1440 замість 1441, і програма відхиляє " +"її." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Уведення" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Спостережуваний результат" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Код виходу" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Прапор вирішувача" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Один персонаж змінено" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Відобразити відновлений прапор і захоплені вихідні дані" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * вихідний програмний результат" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Прапор копіювання" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"Відновлене значення також відповідає прапору в опублікованих організаторами " +"метаданих задачі, який був перевірений після вирішення двійкової задачі." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Ідентифікація джерела, цілі та деталі аналізу" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Новий аналіз та два записи процесів, опубліковані 8 жовтня 2026 року, " +"використовуючи REA 4.1.0 та Ghidra 12.1.4 на Linux x64. Двійковий файл являє" +" собою урізаний x86-64 ELF, об'ємом 15 248 байт." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Посилання на рядки, функції та константи були перевірені перед читанням " +"вихідного коду або рішення організаторів. На основі цих результатів REA було" +" створено вирішувач Python та діаграму." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}Порівняйте з джерелом, наданим організаторами{ph1} · {ph2}Метадані та " +"прапор конкурсу{ph3} · {ph4}Примітки до доказів REA{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Спробуйте самі" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Завантажте оригінальне завдання та рішення в одну папку. Скористайтеся " +"наведеною вище інструкцією, щоб провести розслідування за допомогою свого " +"агента, або запустіть доданий сценарій." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Термінал * вирішити і запустити" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Сценарій виводить прапор кандидата; вставте його в командний рядок програми." +" Для вирішення потрібен Python і {ph0}. Для запуску оригінального " +"виконуваного файлу потрібен Linux x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Налаштуйте REA за допомогою агента кодування" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "Зворотна інженерія CTF: перевірка прапора DownUnderCTF-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"Використовуйте REA для вирішення проблеми перевірки прапорів маскованих " +"квадратів у DOWNDERCTF. Знайдіть функції перевірки, витягніть маски та " +"порівняйте відновлений прапор з оригінальною програмою." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "Практичний приклад перевірки прапорів CTF" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Запит на копіювання прикладу CTF" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "Рівняння маски CTF; горизонтальна прокрутка на менших екранах" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"Сьома маска пропускає 21 клітинку, вибирає позицію 21, потім пропускає 14. " +"Тільки ця комірка вносить свій внесок у суму. Її обов'язковий код-55, що " +"означає, що символ дорівнює 7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Виконайте перевірку CTF" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Скопіюйте збірку CTF" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Копіюваний чек CTF для читання" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Скопіюйте витяг із CTF-вирішувача" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Копіювати відновлений прапор" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Копіювання команд вирішувача CTF" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Головний{ph1} сторінка / {ph2}Вітрина{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Тематичне дослідження * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "Відновлюємо DX-Ball {ph0}з його виконуваного файлу." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"Метою є створення підтримуваної версії гри Windows на мові C, випущеної в " +"1996 році. REA допомагає агенту перевіряти оригінал, по одній функції за " +"раз." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows для i386 · s * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Одна функція, від виконуваної до перевіряється C. REA надає інструкції, що " +"викликають пристрої і дані для читання; проект реконструкції реалізує і " +"тестує результат. {ph0}Відкрити малюнок{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "У цьому тематичному дослідженні" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Проект{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Звукова панорама{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Перевірка результату{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Продовжуйте роботу{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "підтримувані функції C" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "порівняння з вихідним кодом" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "функції з відповідними скомпільованими байтами" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Контрольна точка проекту: 7 жовтня 2026 року. {ph0}Журнал виконання{ph1} " +"роботи · {ph2}Тестове покриття{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Проект досі" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Відновлений код охоплює управління дошкою та ресурсами, удари цеглою, " +"анімацію, частинки та отримання бонусів. У поточних збірках доступні утиліти" +" перевірки та бібліотека аналізу. Триває робота над грою, в яку можна грати," +" фізикою м'яча і весла, управлінням посиленнями і інтеграцією Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Визначення положення звуку зліва / справа при розрахунку" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"При ударі по цеглі його горизонтальне положення передається в звуковий код. " +"У ході дослідження було необхідно відновити, як ця координата екрану " +"перетворюється в значення повороту вліво/вправо." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Копіювати" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб дізнатися, як DX-Ball обчислює " +"розташування стереозвуку. Поясніть розрахунок і покажіть код.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Приклад запиту для вашого coding agent з доступним локальним виконуваним " +"файлом. У наведеному нижче дослідженні Показані запити REA та докази, що " +"лежать в основі відповіді." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"Агент використовував REA для перевірки функції, відстеження її абонента та " +"зчитування констант із виконуваного файлу. Ці результати надали вхідні дані " +"та арифметику, необхідні для написання функції на мові Сі, наведеної нижче." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"Перший результат функції для {ph0} включав псевдокод, що оголошує {ph1} і " +"викликає {ph2}. У вікні команд відображалося Введення даних зі стека та " +"операції з плаваючою комою. Ця невідповідність дала агенту конкретну причину" +" продовжувати розслідування." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "Перше представлення декомпілятора" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"На виході відображається виклик перетворення. При читанні наведених нижче " +"інструкцій можна побачити вхідні дані і обчислення, які використовуються для" +" цього виклику." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Відповіді на три запитання за допомогою REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Відновіть відсутні вхідні дані" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"Результат роботи функції включає інструкції поряд з псевдокодом і викликають" +" елементами. Тут {ph0} забезпечує цілочисельний вхід, відсутній у поданні " +"декомпілятора." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Слідкуйте за абонентом, щоб зрозуміти введені дані" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA визначив цього абонента в першому результаті. У попередніх інструкціях " +"tile_x масштабується {ph0}на 30; додавання 20 дає екранну координату цегли, " +"{ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Порахуйте значення, що стоять за адресами пам'яті" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Повернені байти задають дві арифметичні константи та початковий масштаб " +"панорамування. Тепер агент має значення, необхідні для вираження мовою Сі." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "Від штифтів REA до C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Виконайте п'ять кроків, описаних нижче. У кожному обраному елементі виділені" +" вихідні інструкції і відповідні їм рядки." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}Вхід 01{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Помноживши" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Віднявши" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}Шкала 04{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Повернення" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Оригінальний витяг з x86 ·" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Реконструйований C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * прочитайте вхідні дані.{ph1} У вікні команд в результаті роботи " +"функції REA відображається {ph2} і використовується {ph3} для завантаження " +"цілого числа. Відстеження абонента через REA встановлює значення екранної " +"координати параметра C {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * помножити на 1,5625.{ph1} {ph2} зчитує подвоєне значення {ph3}. " +"Байти, повернуті функцією REA'S {ph4}, декодуються як {ph5}; C використовує " +"ту саму константу." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * відніміть 500,0.{ph1} {ph2} зчитує подвійне значення в {ph3}. " +"Результат у байтах REA розшифровується як {ph4}, зміщуючи центр обчислення " +"на екранну координату {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * застосуйте збережену шкалу.{ph1} Друге {ph2} показує значення " +"{ph3}. У підтримуваному джерелі цей глобал називається {ph4}. При читанні " +"другого байта REA його початкове значення дорівнює {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * повертає ціле число.{ph1} Виклик по {ph2} 0x406430 досягає " +"значення {ph3}, зазначеного в результатах пошуку абонента REA. C перетворює " +"результат у {ph4}; оригінальні порівняння з x86 перевіряють повернене " +"значення." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"У наведеному нижче уривку зі збірки вибираються інструкції щодо введення, " +"арифметики та повернення. У наведений нижче повний список також включені " +"проміжні сховища, настройка і очищення функцій." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Повна збірка та підтверджуючі докази" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "Результат REA · 0X406400–0X40643E" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Що надає Абонент" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"Функція brick-hit в {ph0} масштабує координату плитки на 30, додає 20, а " +"потім переміщує її перед викликом:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Те, що читають дані, встановлює" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "Зчитується байт REA, декодується як подвоєння в порядку убування" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Адрес" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Цінність" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Використовується для" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Перше множення" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Віднімання" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} споконвічно" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Збережені ваги для піддонів" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Записано за допомогою REA 4.1.0 для цілі DX-Ball 1.07 з прив'язкою до хешу. " +"У пов'язаних матеріалах розслідування зберігаються ідентифікатори доказів." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Підтримуване джерело{ph1} · {ph2}Примітки щодо розслідування та " +"посилання на докази{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Перевірка відновленої функції" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"Відновлена функція проходить дві перевірки: її повертаються значення " +"збігаються з вихідними, а скомпільовані байти відповідають виконуваному " +"файлу." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3 205 випадків порушення поведінки" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Тести виконують вихідну функцію x86 і порівнюють значення, яке вона " +"повертає, із збереженим значенням C. Вони охоплюють усі цілі позиції від 0 " +"до 640 у п'яти масштабах панорамування: 0, 0,5, 1, 20 та -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 збігаються байти" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"Функція C компілюється за допомогою закріпленого ланцюжка інструментів " +"VC4.0. Повторне відтворення компілятором відповідає повній функції після " +"застосування розглянутих змін і перевірки констант, на які дано посилання." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"За шкалою 1 відновлені обчислення повертають значення -500 за лівим краєм, 0" +" за центром і 500 за правим краєм. Наступна частина роботи зі звуком-це " +"інтеграція цього значення зі звуковим супроводом гри." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Ознайомтеся з подробицями відтворення компілятором{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Продовжуйте розслідування" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"Той самий підхід використовується для оновлення частинок, створення черг із " +"розширенням та генерування бонусів: перевірте відповідні функції, відновіть " +"їх стан та залежності, а потім порівняйте реалізацію з оригінальною." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Щоб самостійно перевірити функцію панорамування звуку, дотримуйтесь " +"інструкцій з налаштування DX-Ball project і вкажіть відповідну вихідну мету." +" Потім запустіть:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "При оформленні замовлення DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} Поточне джерело репозиторію{ph1}{ph2} DX-Ball, хід виконання і " +"локальна настройка.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} Робочий процес аналізу{ph1}{ph2} REA завершується обчисленням, а потім" +" використовуйте той самий підхід із власним двійковим файлом.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Створення частинок і бонусів{ph1}{ph2} - більш масштабне дослідження " +"стану, черг і запису пікселів.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball зворотний інжиніринг: панорамування звуку-REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Виконайте реконструкцію DX-Ball від бінарного аналізу через REA до " +"підтримуваних тестів на C, вихідних x86 і зіставлення скомпільованих байтів " +"функцій." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball sound - дослідження панорамування; горизонтальна прокрутка на менших" +" екранах" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.EXE функція 0x00406400 перевіряється за допомогою REA . Абонент, який" +" потрапив у глухий кут, видає значення tile_x в 20 і 30 разів більше. " +"Інструкції завантажують x, множать на 1,5625, віднімають 500,0, застосовують" +" pan_scale і повертають ціле число. Підтримуваний C перевіряється незалежно " +"від вихідного x86 в 3205 випадках і за допомогою компілятора VC4.0 " +"відтворюється на відповідність 63 байтам." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "Тематичне дослідження реконструкції DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Запит на копіювання прикладу" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Слідкуйте за розрахунком положення звуку зліва / справа" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Скопіюйте фрагмент оригінальної збірки" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Функція копіювання звуку-панорамування" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Скопіюйте повну збірку sound-pan" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Скопіювати команду аналізу DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Головний{ph1} сторінка / вітрини" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "Тематичні дослідження REA." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, ігри, Electron і конкурс CTF з кодом, цифрами і перевіреними " +"результатами." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android * аналіз APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Як аутентифікатор генерує код входу" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Дізнайтеся, як Aegis обчислює шестизначний код у опублікованому APK . " +"Слідкуйте за методами генерації за допомогою REA, а потім подивіться на " +"демонстраційний годинник, щоб зрозуміти, чому код змінюється кожні 30 " +"секунд." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Ознайомтеся з тематичним дослідженням Android" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * аналіз програм з машинним кодом" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Вирішіть проблему перевірки прапора CTF" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Вивчіть просте завдання DOWNDERCTF за допомогою REA. Знайдіть її функції " +"перевірки, Перетворіть маски та суми в рівняння, а потім перевірте прапорець" +" \"вирішено\" за допомогою оригінальної програми." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Ознайомтеся з тематичним дослідженням CTF" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Нативна * Реконструкція" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball обчислює положення звуку зліва / справа" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Відновіть розрахунок положення звуку зліва / справа з гри Windows 1996 року " +"випуску. Інструкції REA, посилання на виклик та Числові константи " +"призводять до невеликої функції C, яка перевіряється на відповідність " +"вихідній поведінці та всім 63 скомпільованим байтам." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Ознайомтеся з тематичним дослідженням DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * відстеження об'єктів" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Як Notion копіює текст та HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Відстежуйте API, що працює на сторінці, за допомогою JavaScript, вбудованого" +" в Notion. Слідкуйте за його оболонками IPC у системному буфері обміну, а " +"потім подивіться, як маленький маркер HTML пов'язує дані розширеного блоку з" +" копією." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Ознайомтеся з тематичним дослідженням Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS * Реконструкція" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "Як TH04 цілиться в кільце з куль" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Перевірте оригінальний 16-розрядний angle helper за допомогою REA . Зіставте" +" його операції множення, ділення та координації з зрозумілим C++, а потім " +"подивіться, як вони створюють кільце, спрямоване на гравця." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Ознайомтеся з тематичним дослідженням TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Покрокові керівництва" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"У посібниках описуються власні обчислення, експорт Electron і запит до " +"браузера. Кожне з них починається з запиту і конкретної мети." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Ознайомтеся з посібниками" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Тематичні дослідження з реверс-інжинірингу-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Слідкуйте за розслідуваннями REA за допомогою коду, малюнків і демонстрацій:" +" Android authenticator, DX-Ball, Notion, TH04 і засоби перевірки прапора " +"downunderctf." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Головний{ph1} сторінка / {ph2}Вітрина{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Тематичне дослідження * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Як Notion копіює{ph0}текст і HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Простежте виклик буфера обміну з API сторінки Notion, через попереднє " +"завантаження і основний процес, в програму запису буфера обміну Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Робочий стіл Notion 7.6.1 * JavaScript * REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Міст всередині настільного пакету Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 · {ph1}Буфер обміну API, орієнтований на сторінку{ph2}{ph3}{ph4} " +"{ph5}Попереднє завантаження надає викликаний метод.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * попередньо завантажте оболонку{ph1} {ph2}{ph3}{ph4} {ph5}оболонки " +"надсилає канал та аргументи.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 * обробник основного процесу ipcMain{ph1}.обробник{ph2}{ph3}{ph4} " +"{ph5}одержувача перевіряє, з якої сторінки він був відправлений.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * системний буфер{ph1} обмін {ph2}{ph3}{ph4} {ph5}Electron записує " +"наданий текст і HTML-код.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Один канал з'єднує дві сторони: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Упакований код використовує один і той же канал у процесі попереднього " +"завантаження та в основному процесі. При вирішенні оболонок виявляються " +"виклики Electron, що стоять за цими іменами." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "У цьому тематичному дослідженні" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Дотримуйтесь мосту з буфера обміну{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Збереження структури блоку{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Додаткові приклади та джерела{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Де виконується операція копіювання?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"На сторінці відображається метод під назвою {ph0}. Його реалізація в " +"попередньому завантаженні є оболонкою. Корисне питання полягає в тому, що " +"надсилає ця оболонка і який код її отримує." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Копіювати" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб простежити, як Notion копіює текст " +"і HTML в системний буфер обміну. Показуйте код на кожному " +"кроці.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Приклад запиту з локальним пакетом додатків Notion, доступним вашому " +"програмісту." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA знаходить, з чого почати читання" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Аналіз попереднього завантаження вкладок за допомогою REA дозволяє знайти " +"API, доступний для сторінки, і виклик, який відправляє запит IPC. Обидва " +"результати представлені з діапазонами вихідних текстів у зменшеному пакеті:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA висновки → два місця для відкриття" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Вибрані поля з нового {ph0}результату застосування " +"analyze_javascript_application в попередньому завантаженні вкладки Notion, " +"записаного за допомогою REA 4.1.0. Для позицій використовуються рядок " +"вихідного пакета і стовпець, заснований на нулі." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"Агент відкриває ці папки, знаходить елемент clipboard у зібраному API та " +"читає {ph0}. Його сайт виклику надає {ph1}. Це ім'я дає Агенту точну " +"інформацію для пошуку в основному пакеті. У чотирьох наведених нижче витягах" +" показано маршрут, по якому він підключається." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Чотири короткі фрагменти коду" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Спрощений порівняно з пакетом JavaScript, з читабельними іменами змінних. " +"Незв'язані елементи опущені." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Почніть з API, доступного для цієї сторінки" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Цей учасник надає назву каналу. Реалізація {ph0} повідомляє нам, як запит " +"завершує обробку сторінки." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Усуньте оболонку попереднього завантаження" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"Функція повернення перенаправляє аргументи через IPC запиту та відповіді " +"Electron. Тепер ми можемо шукати {ph0} на стороні основного процесу." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Перевірте, як зареєстрований одержувач" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Основний процес використовує іншу оболонку. Його метод {ph0} реєструвати " +"{ph1} для цього каналу." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Знайдіть запис і перевірте його відправника" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Це адресат. Після перевірки відправника обробник передає надані дані в API " +"буфера обміну Electron. Канал і дві дозволені оболонки підключають відкритий" +" метод до цього виклику." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Як скопійований блок зберігає свою структуру?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Веб-редактор Notion надсилає текст та HTML-код через {ph0}. Він зберігає " +"дані блоку локально та вставляє ідентифікатор у скопійований HTML-код, щоб " +"зв'язати їх." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "HTML-посилання на збережені дані блоків" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Прочитайте ідентифікатор HTML" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Знайдіть той самий локальний ідентифікатор" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Відновити дані блоку Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Ілюстративний текст та ідентифікатор. Записаний модульний тест відновлює " +"дані блоку, якщо ідентифікатори однакові; застарілий запис повертає лише " +"текст та HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"При вставці Notion шукає HTML-ідентифікатор і порівнює його зі збереженою " +"копією. Відповідні ідентифікатори відновлюють дані блоку." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Формат буфера обміну, записаний із веб-ресурсів, кешованих 13 липня 2026 " +"року." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Додаткові приклади та джерела" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Інший приклад: таблиці уцінки" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion перетворює Markdown в блокові дані. У цьому прикладі показано, як " +"таблиця перетворюється на заголовок та рядки даних." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Таблиця за допомогою аналізатора уцінки Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Записаний вихід із витягнутого аналізатора Markdown. Таблиця перетворюється " +"в рядки і осередки." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Інший шлях: автономне підключення до SQLite" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Програма візуалізації Notion запитує {ph0} через IPC. Основний процес " +"створює канал передачі повідомлень і передає один порт програмі " +"візуалізації, а інший - службовому процесу SQLite. Наступні пакети " +"інструкцій та результати передаються через цей порт." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"Після цієї передачі обслуговування пояснюється, як виконується робота з " +"базою даних і чому при відстеженні тільки початкового IPC-запиту не " +"враховується подальший діалог." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Джерела та як читати уривки" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Інтерфейс буфера обміну взято з NotionNotion{ph0}: попереднє завантаження " +"вкладки та {ph1}. У наведених витягах наведені скорочені імена змінних і " +"опущений незв'язаний код; показаний помічник для перевірки відправника з " +"базовим {ph2}викликом isNotionWebContents." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Приклади віртуального буфера обміну та Markdown взяті з веб-ресурсів, " +"кешованих 13 липня 2026 року, включаючи модулі {ph0}, {ph1}, {ph2} і {ph3}. " +"У цих ресурсів є своя версія. Збережені тести запускали витягнуті модулі та " +"невеликі модулі управління; їх результати описують ці тести, а не захоплений" +" сеанс інтерфейсу робочого столу." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"Показаний тут результат REA - це цілеспрямований аналіз збереженого " +"попереднього завантаження вкладок, записаний за допомогою опублікованого " +"пакету REA 4.1.0. Він визначає розташування API і запускає операцію. Елемент" +" буфера обміну і відповідний приймач підключаються шляхом зчитування їх " +"реалізацій-оболонок в пакеті." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"У прикладі Markdown використовується модуль синтаксичного аналізу {ph0}. " +"Тести збереженого модуля показують, що і фільтри сторінки, і фільтри чату " +"зберігають цю таблицю. Парсери вставки / імпорту, структурованого Markdown і" +" AI / chat мають окремі точки входу і проміжні формати." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} Керівництво по застосуванню{ph1}{ph2} JavaScript ознайомтеся з " +"невеликою функцією експорту програми Electron.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} Реконструкція{ph1}{ph2} DX-Ball виконується відповідно до власних " +"інструкцій для перевіреної функції C.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron зворотна інженерія: Буфер обміну-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Дотримуйтесь API буфера обміну Notion за допомогою попереднього завантаження" +" Electron, обгортки IPC та основного процесу, з короткими витягами коду та " +"ознайомтеся з його багатим форматом буфера обміну." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Тематичне дослідження Notion Electron" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Скопіювати запит на аналіз Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Скопіювати фрагмент попереднього завантаження Notion" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Скопіювати фрагмент коду Notion для виклику оболонки" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Скопіювати фрагмент оболонки обробника Notion" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Скопіювати фрагмент приймача з буфера обміну Notion" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Відновлення розширених даних буфера обміну при вставці" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Перейти до змісту" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Головний{ph1} сторінка / {ph2}Вітрина{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Тематичне дослідження * Тохоу 4: історія Землі лотосів" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "Реконструкції TH04 з{ph0}візерунки кулі." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Набір маркерів починається з обчислення короткого кута. Використовуйте REA " +"для перевірки оригінальної функції DOS, а потім дотримуйтесь її інструкцій " +"на читабельному C++." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 * 16-розрядна версія DOS * C++ та збірка" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Переглянути реконструкцію TH04" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Від оригінальних інструкцій до перевіреного джерела" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * основна частина оригінальної гри{ph1}{ph2}.Запустіть " +"виконуваний{ph3}{ph4} файл PC-98 та його допоміжний інструмент Bullet-" +"angle.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * перевірте за допомогою{ph1}{ph2} інструкцій REA + " +"посилань{ph3}{ph4}, перевірте завантажений код DOS і прочитайте розрахунок " +"кута з виконуваного файлу.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * Прочитайте пробіл C++{ph1}{ph2} → aim → rotate{ph3}{ph4}, щоб " +"пов'язати кожну операцію зі збереженою реконструкцією.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * перевірте вихідні{ph1}{ph2} 2139 відповідних байт{ph3}{ph4}, " +"записаних компілятором, перевірки охоплюють код генерації маркерів, що " +"містить цей допоміжний елемент.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA повертає вихідний код і результати його аналізу. Проект TH04 забезпечує " +"підтримувані перевірки вихідного коду та компілятора." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "У цьому тематичному дослідженні" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}Кільце з кулями{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}Що повертає REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Збірка на C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Перевірка джерела{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Повний проект{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Як кільце націлюється на гравця" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"Для атаки Еллі потрібно прицільне кільце з початковим рахунком 16. Один з " +"помічників розраховує напрямок польоту кожної кулі. Одне і те ж кільце може " +"бути спрямоване у фіксованому напрямку або повернуто в бік гравця." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ваш кодуючий агент" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Копіювати" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA, щоб дізнатися, як TH04 створює кільце з" +" куль і направляє його на гравця. Поясніть розрахунок і покажіть " +"код.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Приклад запиту з оригінальним виконуваним файлом та відновленням, доступним " +"локально." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 зберігає повний оборот за годинниковою стрілкою в 256 кутових одиницях." +" Для 16 куль кожен індекс додає по 16 одиниць.: {ph0}. При додаванні " +"напрямку руху гравця ці позиції міняються місцями." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Ілюстрація відновленого математичного розрахунку кута для рахунку 16, " +"напрямку гравця 40 і повороту шаблону 0. {ph0}Відкрити малюнок{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Шаблон запуску у відновленому джерелі" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Напад Еллі на кільце · уривок з джерела" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"У цих рядках вибирається шаблон перед налаштуванням складності та " +"продуктивності. {ph0}Прочитайте джерело атаки{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "Що повертає REA" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Ми перевіряємо {ph0}, які задають швидкість і кут нахилу кожної кулі. REA " +"повертає свої інструкції, псевдокод та посилання. Три частини цього " +"результату пояснюють закономірність." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Перевірте зображення DOS, перш ніж читати його код" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"Перевірка прив'язує завантажений код і записи про переміщення до наданого " +"виконуваного файлу. Шлях, зазначений вище, скорочений для відображення." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Прочитайте напис на кільці \"множ і Делі\"" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} записаний загальний індекс. При зсуві значення множиться на 256, потім" +" при діленні використовується значення, прочитане з {ph1}. Імена " +"підтримуваних джерел, які вказані в полі {ph2}. Повна послідовність наведена" +" нижче." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Знайдіть, де малюнок повертається в бік гравця" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Операнди команд надають дві різниці координат і допоміжне значення напрямку." +" Повернене значення додається до відносного кільцевого кута. Імена джерел " +"роблять ці адреси читабельними; REA дозволяє агенту перевіряти початкові " +"операції, що стоять за ними." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Від асемблера до читабельного C++" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Виберіть крок, який відповідає початковим інструкціям з розрахунку кута. У " +"цьому огляді наведено схему прицільного кільця; повний вихідний код також " +"містить дані про розсіювання, стеки та випадкові моделі." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}Індекс 01{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Простір" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Мета" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Обертати" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Магазин" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * оригінальні 16-розрядні інструкції" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Читабельний c++ * короткий опис aimed-ring" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * зчитуємо маркерний Індекс.{ph1} Аргумент stack завантажується в " +"{ph2}. У кільці з 16 маркерів цей індекс елемента знаходиться в діапазоні " +"від 0 до 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * розставте напрямки на повний оборот.{ph1} {ph2} 8 множиться на " +"256. Число множиться на нуль і перетворюється в слово, потім {ph3} ділить " +"результат на це число. Для числа 16 кожен індекс множиться на 16 кутових " +"одиниць." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * додайте напрямок руху гравця.{ph1} Два віднімання утворюють " +"координати гравця мінус вихідна точка. Допоміжний інструмент direction " +"повертає кут у {ph2}; при додаванні все кільце повертається до гравця." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * додайте поворот шаблону.{ph1} {ph2} додає кут нахилу шаблону. У " +"вихідному шаблоні Elly він дорівнює нулю; інші шаблони можуть " +"використовувати той самий допоміжний елемент із поворотом." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Зберігайте кінцевий кут в одному байті.{ph1} Сховище записує {ph2}" +" в поле \"кут появи\". Значення переносяться після 255, так само, як це " +"відбувається при перетворенні беззнакових байт. Навколишнє джерело також " +"перетворює цей кут і швидкість у Швидкість обертання." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"У збірці вибирається гілка aimed-ring, обчислення aim і кінцеве сховище. " +"Наведений вище текст на C++ - це читабельний підсумок. Наведені нижче " +"перевірки компілятора застосовуються до підтримуваного вихідного тексту у " +"зв'язаному проекті." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Ознайомтеся з збереженим кільцем і приціліться в джерело" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Кільцевий макрос{ph1} · {ph2}Мета та джерело швидкості{ph3} · " +"{ph4}Представлення кута{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Перевірка підтримуваного джерела" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"Записані перевірки проекту TH04 дозволяють скомпілювати код для генерації " +"маркерів, включаючи цей помічник, за допомогою закріпленого набору " +"інструментів Turbo C++ 4.0 J." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 відповідних байтів" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Скомпільований код генерації маркерів відповідає 2139-байтовому розділу " +"оригінального виконуваного файлу." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Дві чисті збірки" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Дві окремі збірки генерують однакові відповідні байти. Записані вхідні хеші " +"відповідають показаному тут збереженому джерелу." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Записано 3 жовтня 2026 року. {ph0}Ознайомтеся з перевірками " +"компілятора{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Ідентифікація мети і обсяг аналізу" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Початкова мета" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0} , 156 258 байт, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Допоміжний запис" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} у завантаженому зображенні REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Зміщення вихідного файлу" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, що повертається параметром {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Перевірка записаного коду" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 жовтня 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Перевірки компілятора охоплюють весь розділ коду для додавання маркерів, " +"включаючи цей допоміжний інструмент. Вони також порівнюють його внесок у " +"відображення та перекриття переміщення." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA перевірив статичне зображення завантаження DOS у сегменті завантаження " +"{ph0}. Його адреси описують цей аналітичний образ. Результат функції " +"повідомляє про 503 байти тіла в двох діапазонах по 517 байт; вибрані " +"інструкції, наведені вище, знаходяться в цих повідомлених діапазонах." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Імена вихідних текстів та перевірки компілятором походять з контрольної " +"точки TH04 {ph0}. Попередні спостереження за реконструкцією використовували " +"власні аналітичні сценарії проекту; на цій сторінці додано нову перевірку " +"REA для тієї ж початкової мети. Надана гра ідентифікується в маніфесті " +"сховища, при цьому незалежне Походження незайманого дампа все ще відкрите." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"На малюнку показаний розрахунок кута. Елементи управління в повній версії " +"гри, хронометраж і поведінку апаратного забезпечення PC-98 перевіряються під" +" час виконання в проекті реконструкції окремо." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "Повна реконструкція TH04" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Проект створює чотири dos-продукти для гри на підтримуваному C++ та " +"асемблері. Крім генерації маркерів, у вихідному коді описані етапи, боси, " +"рендеринг, введення, меню, кінцівки і обробка результатів." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Вивчіть репозиторій TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Джерело для генерації маркерів -{ph1}{ph2} це повний допоміжний " +"інструмент, інші типи шаблонів та налаштування шаблону.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}Керівництво по збірці та запуску DOS{ph1}{ph2} Створіть вихідний код і " +"протестуйте його в робочому процесі емулятора PC-98 проекту.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Поточна перевірка стану проекту{ph1}{ph2} DOS та окремий власний порт " +"x64.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 зворотний інжиніринг: шаблони маркерів DOS-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"Перевірте оригінальний 16-розрядний dos-код TH04 за допомогою REA . " +"Слідкуйте за збіркою та відновленим C++, щоб побачити, як розставлено кільце" +" куль і як вони націлені на гравця." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "На цій сторінці" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "Тематичне дослідження щодо маркування TH04" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Скопіювати запит як приклад TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 фіксовані та цільові кульові кільця; горизонтальна прокрутка на менших " +"екранах" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Дві діаграми кільця з 16 точок. Нерухоме кільце починається з нульового " +"кута. При додаванні напрямку руху гравця, рівного 40, всі сторони " +"повертаються на однакову величину; виділена перша точка вказує на гравця. В " +"обох випадках відстань між точками становить 16 кутових одиниць, або 22,5 " +"градуса." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Скопіювати шаблон запуску TH04" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Дотримуйтесь розрахунку прицільного кільця TH04" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Скопіюйте фрагмент збірки TH04" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Копіювально-читається розрахунок прицільного кільця" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Нагору" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Копіювати" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Скопійований" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Вибраний" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Код копіюється в буфер обміну." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Обраний код. Скопіюйте його з клавіатури." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA на GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Відстань {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Врізався в кактус. Перемкни швидкість." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Пробіл або стрибок ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Зіграй ще раз" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Грати" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Пауза" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Натисніть Play, потім перестрибніть через кактус." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Потрапте по кактусу. Натисніть відтворення ще раз або змініть швидкість і " +"перезапустіть гру." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Рухомий. Пробіл або стрибок знищують кактус." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Призупинений. Натисніть відтворення, щоб продовжити." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Фіксована швидкість: {speed}. Пробіл або стрибок прибирають кактус." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "" +"Фіксована швидкість: збільшити {speed}. Натисніть Play, щоб спробувати." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Відновлене правило: починайте з 6, потім збільшуйте до 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Фіксована швидкість: {speed} обертання." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Відтворив Відновлене правило. Всі чотири значення відповідають " +"контрольованій перевірці в оригінальній грі, якщо округлити їх до трьох " +"знаків після коми." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"Відтворення відрізняється від значень, записаних в оригінальній грі. " +"Порівняйте наведені вище правила швидкості та налаштування." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start} і {end}" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} секунди, часовий блок {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Інтерактивний розрахунок в цьому браузері недоступний. У прикладі код " +"відображається через 59 секунд." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Перевірка…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} пройдено перевірок (шість контрольних випадків, " +"позначених шестизначними і восьмизначними цифрами)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "Не вдалося виконати перевірку посилань. Пробувати знову." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Аналітик, який думає за комп'ютером" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Одна перевірка виявляє один символ" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"Сьома маска вибирає лише позицію 21 у вхідній сітці шість на шість. Її " +"символьний код повинен дорівнювати 55, таким чином, символ дорівнює 7. Інші " +"маски вибирають інші позиції і дають додаткові рівняння." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "Сьома перевірка. Мітки комірок-це Вхідні позиції, що починаються з 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Кодована маска: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Пропустіть 21 клітинку. Виберіть 1. Пропустіть 14. Зупиніться на 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "У сумі лише одна клітинка" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "Позиція 21 у прапорі повинна містити 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Виділено: одна клітинка" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 масок дають 26 рівнянь." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Вирішіть їх разом, щоб знайти прапор." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "Дослідження звуку DX-Ball-панорамування" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA надає інструкцію, що викликає елемент і дані для зчитування байтів для " +"однієї функції DX-Ball. Вхідні дані стека множаться на 1,5625, зміщуються на" +" 500, масштабуються та перетворюються на ціле число. Підтримуваний C " +"перевіряється в 3205 оригінальних x86 випадках і в окремому 63-байтовому " +"відтворенні компілятором." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Стек" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "вхід x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "Ціле" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "return" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Відновлена функція" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "Код на C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Виклик при ударі" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Оригінал" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "порівняння" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3 205 тестів" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Збірка VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "Збіг 63 байтів" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "Хід розслідування REA" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Задайте питання про локальний об'єкт. REA перевіряє та відстежує дані за " +"допомогою локальних адаптерів аналізу, повертає докази та підтримує подальші" +" запитання, коли ваш агент пояснює, впроваджує та тестує." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Запитання" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Агент + локальний файл" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "Програма / файл / Web" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Аналіз і пошук" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Читати докази" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Код / посилання /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "невідоме" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Застосувати" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Ваш агент" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Пояснити / створити / тест" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Засоби аналізу" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Локальні адаптери" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Наступне запитання" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04: відстань між кулями і наведення їх на ціль кільцем" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Повний поворот за годинниковою стрілкою має 256 кутових одиниць. Шістнадцять" +" точок відліку починаються з кутів від нуля, шістнадцяти, тридцяти двох до " +"240. Якщо додати приблизний напрямок гравця, що складається з сорока точок, " +"то вийде, що всі шістнадцять точок відліку збігаються; перша точка відліку " +"вказує на гравця. Обертання шаблону дорівнює нулю." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Нерухоме кільце" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Перший маркер: кут 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Націлене кільце" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Перший пункт: напрямок руху гравця" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Центр" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Гравець" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Однакова відстань: 256 ÷ 16 = 16 кутових одиниць = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Приклади" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Блог" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Почати" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Посібники" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Вихідний код" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Ліцензія MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Приєднатися до спільноти" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Стежити в X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * вибране джерело сценарію" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Вихідний код" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Очікуваний результат форматування" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Інструкція" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Абонент" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Константа" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Функція C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Кнопка" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "API попереднього завантаження" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "МПК" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "Файл CSV" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Ваш клацання" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Захоплений запит" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Експорт скрипта" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA результат * підсумок.витяг з ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA витяг з інструкції * 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA запит абонента * 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "" +"Результати в байтах REA * інтерпретуються як подвоєння в порядку зменшення" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Відновлений уривок з C ·" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Подивіться, як працює REA ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Посібник зі встановлення" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Вітрина →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Вибрані налаштування з перевіреного скрипта" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Читається зведення про обробнику %" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * вибрані оригінальні інструкції" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "Ідентифікатори операторів * вихідний код Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Слідкуйте за @reatools на X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Агент → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → агент * вибрані результати" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → агент * методи та абоненти" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * вибраний Декомпільований Java" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Читабельне резюме * інтерпретація агента" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP, повний корпус" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Завантажити Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Завантажити Android analysis provider" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Агент → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → агент * вибрані результати" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → агент * вибрані інструкції" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Агент → REA * прочитано_байт" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → агент * сьомі записи" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Оригінальний виконуваний файл * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Скачайте оригінальну гру challenge" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Завантажити вирішувач" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "Результат REA * фрагмент псевдокоду" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Агент → REA * функція {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → агент * уривок з інструкції" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → агент * уривок з повідомлення про абонента" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Агент → REA * два {ph0}запиту на читання в байтах" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "Результати в байтах REA * декодуються як подвійні" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Почніть зі своєї власної мети" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Генерація коду" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Відновлене правило" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Регульований годинник" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Двійковий" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Перевіряючий код" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Рівняння" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Правильно!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Здійсненний" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "Висновки REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Відновлений C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Затвердження" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Упакований додаток" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "Відкритий API" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "Оболонки IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Буфер обміну" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Вихідний код DOS" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "Інструкції щодо REA" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Розрахунок кута нахилу" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Кульове кільце" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "Відкритий API сторінки" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Виклик IPC засобу візуалізації" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Надіслано до системного буфера обміну" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Збережено локально за допомогою Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Введення даних для уцінки" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Висновок структурованого синтаксичного аналізатора · Витяг" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Проаналізуйте свій власний додаток" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Агент → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → агент * вибрані поля" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Агент → REA * функція {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → агент * уривок з інструкції" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Результат тієї ж функції · витяг з aim" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "Відповідний Підтримуваний c++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Кільцевий макрос * гілка TH04, фрагмент" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Кут і швидкість * витяг з джерела" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Натисніть %, щоб побачити, що станеться з 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% від 200 дорівнює 20. Натисніть =, щоб додати це значення." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "При множенні 10 стає рівним 0,1. Натисніть = для множення." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "Переклад оновлюється. Поки прочитайте цю сторінку англійською мовою." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA для аналізу {ph3}і пояснення того, як " +"він експортує дані. Покажіть відповідний код та розташування " +"джерел.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Встанови REA та підключи його до цього ШІ-помічника за " +"допомогою {ph3}. Спочатку покажи план змін і дочекайся мого схвалення. Потім" +" перевір встановлення.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}\"{ph1}{ph2}Завантаживши {ph3}в нову папку з прикладами і розпакуйте " +"її. Використовуйте REA, щоб побачити, що відбувається, коли я натискаю " +"\"експортувати нотатки\". Покажіть, де {ph4}що записано, які поля воно " +"містить, а також відповідні файли і рядки.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Встанови REA та підключи його до цього ШІ-помічника за " +"допомогою {ph3}. Спочатку покажи план змін і дочекайся мого схвалення. Потім" +" перевір встановлення.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Встанови REA та підключи його до цього ШІ-помічника за " +"допомогою {ph3}. Спочатку покажи план змін і дочекайся мого схвалення. Потім" +" перевір встановлення.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовуйте REA для перевірки {ph3}. Скопіюйте цей веб-" +"сайт для мене.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Реконструкція * {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"При {ph0}npm запустіть програму установки, виберіть свій кодуючий агент і " +"ознайомтеся з запропонованими змінами." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Наведений приклад · {ph0} та npm * ваш кодуючий агент" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Використовуйте інструмент кодування, такий як Claude Code, Codex або Cursor." +" Вам знадобляться {ph0} і npm; в {ph1}керівництві по установці перераховані " +"підтримувані версії{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Сторінка * {ph1}{ph2}{ph3} При експорті нотаток{ph4}{ph5} викликається " +"функція {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Міст * {ph1}{ph2}{ph3}{ph4}{ph5}{ph6} в основний процес відправляється " +"іменоване повідомлення.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Обробник · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Викликає засіб " +"форматування в {ph7} і записує файл.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * рядки 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}\"{ph1}{ph2}Прогнозуйте CSV для примітки з ідентифікатором 1 та " +"заголовком {ph3}. Потім запустіть {ph4}програму форматування прикладу " +"з{ph5}, щоб перевірити це. Покажіть прогноз і фактичний " +"результат.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Заголовок залишається в одному полі, укладеному в лапки; кожна лапка " +"подвоюється. При цьому виконується пряма перевірка форматування за допомогою" +" {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} * Засіб форматування CSV" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Вам знадобиться {ph0}22 (22.19+), 24 (24.11+) або 26+. У комплект поставки " +"входить {ph1}npm ." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "У вас немає {ph0} або ви не впевнені?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Якщо {ph0} друкує версії v22.19+, v24.11+ або v26+, все готово. Якщо він " +"видає стару версію або \"не розпізнається\" / \"команда не знайдена\", " +"встановіть {ph1} 24 LTS:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * приклад витягу з джерела" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "" +"{ph0}Відкрийте приклад{ph1} · {ph2}Завантажити {ph3}{ph4} · {ph5}Завантажте " +"файл {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * приклад джерела" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Завантажте приклад і розпакуйте його. Архів містить повну папку з {ph0}. " +"Проаналізуйте його з {ph1}npm; Electron для цього прикладу не потрібен." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Перший раз або відсутній {ph0} або використовується засіб кодування? " +"{ph1}Дотримуйтесь покрокового керівництва по налаштуванню →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "Наприклад: {ph0}чому калькулятор дає 220 для {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовувати REA для перевірки Windows Calculator. Чому " +"{ph3} дають 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA · завантажено {ph0} * вибрані рядки" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Ми бачили, чому {ph0}{ph1} дають 220.{ph2} Тепер давайте відновимо правила " +"для + і × і спробуємо їх застосувати." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA читає {ph1}{ph2}{ph3} При запуску програми " +"Calculator{ph4}{ph5} код відкриває {ph6}. Потім агент вибирає бібліотеку " +"встановленого додатка.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}\"{ph1}{ph2}Використовувати REA для перевірки aegis-v3.4. {ph3}. " +"Дізнайтеся, як він генерує шестизначний код для входу, поясніть, чому він " +"змінюється кожні 30 секунд, і відновіть невелику демонстрацію, де я можу " +"змінити час.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} * Учасник API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} * Помічник IPC" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "main/{ph0} * помічник обробника" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "головний/{ph0} * приймач буфера обміну" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Реконструкція * dino-speed.js" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "При Node.js Node.js і npm запустіть програму встановлення, виберіть свого " +#~ "програміста та ознайомтесь із запропонованими змінами." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Наведений приклад · Node.js та npm * ваш кодуючий агент" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Використовуйте інструмент кодування, такий як Claude Code, Codex або Cursor." +#~ " Вам знадобляться Node.js і npm; в {ph0}керівництві по установці " +#~ "перераховані підтримувані версії{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Сторінка * renderer.js{ph1}{ph2} При експорті нотаток{ph3}{ph4} " +#~ "викликається функція {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Міст * preload.js{ph1}{ph2}{ph3}{ph4}{ph5} в основний процес " +#~ "відправляється іменоване повідомлення.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Обробник * main.js{ph1}{ph2} Запис нотаток.csv{ph3}{ph4} Викликає засіб" +#~ " форматування в {ph5} і записує файл.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Спрогнозувавши CSV- файл для нотатки з ідентифікатором 1 та" +#~ " заголовком \" Привіт, REA\". Потім запустіть інструмент форматування toCsv " +#~ "у прикладі за допомогою Node.jsNode.js щоб перевірити його. Покажіть прогноз" +#~ " і фактичний результат.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Заголовок залишається в одному полі, укладеному в лапки; кожна лапка " +#~ "подвоюється. При цьому виконується пряма перевірка форматування за допомогою" +#~ " Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js * Засіб форматування CSV" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Вам знадобиться Node.js 22 (22.19+), 24 (24.11+) або 26+. npm поставляється " +#~ "з Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "У вас немає Node.js або ви не впевнені?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Якщо {ph0} друкує версії v22.19+, v24.11+ або v26+, все готово. Якщо він " +#~ "видає стару версію або \"не розпізнається\" / \"команда не знайдена\", " +#~ "встановіть Node.js 24 LTS:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Відкрийте приклад{ph1} · {ph2}Завантажити export.js{ph3} · " +#~ "{ph4}Завантажте файл notes.json{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Завантажте приклад і розпакуйте його. Архів містить повну папку з {ph0}. " +#~ "Проаналізуйте це з Node.js Node.js і npm; у цьому прикладі Electron не " +#~ "потрібен." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Перший раз або відсутній Node.js або використовується засіб кодування? " +#~ "{ph0}Дотримуйтесь покрокового керівництва по налаштуванню →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "Наприклад: {ph0}чому калькулятор дає 220 для 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Використовувати REA для перевірки Windows Calculator. Чому " +#~ "200 + 10% дають 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Ми бачили, чому {ph0}200 + 10% дають 220.{ph1} Тепер давайте відновимо " +#~ "правила для + і × і спробуємо їх застосувати." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA читає calc.exe{ph1}{ph2} При запуску програми " +#~ "Calculator{ph3}{ph4} код відкриває {ph5}. Потім агент вибирає бібліотеку " +#~ "встановленого додатка.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Використовувати REA для перевірки aegis-v3.4. 3.apk. " +#~ "Дізнайтеся, як він генерує шестизначний код для входу, поясніть, чому він " +#~ "змінюється кожні 30 секунд, і відновіть невелику демонстрацію, де я можу " +#~ "змінити час.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/preload.JS * член API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/preload.JS * Помічник IPC" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "main/index.js * помічник обробника" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "main/index.JS * приймач буфера обміну" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "main.JS * рядки 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "export.js * приклад витягу з джерела" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "renderer.js * приклад джерела" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "preload.js * приклад джерела" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "main.js * приклад джерела" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA · завантажено index.js * вибрані рядки" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Використовувати REA для аналізу / абсолютного / шляху/до / " +#~ "програми та поясніть, як вона експортує дані. Покажіть відповідний код та " +#~ "розташування джерел.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Установивши REA і підключіть його до цього агента " +#~ "програмування за допомогою npx rea-agents@latest setup. Покажіть мені план " +#~ "встановлення для затвердження, а потім перевірте правильність " +#~ "встановлення.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Завантаживши https://rea.tools/examples/notes-example.zip в" +#~ " нову папку з прикладами і розпакуйте її. Використовувати REA, щоб побачити," +#~ " що відбувається, коли я натискаю \"експортувати нотатки\". Покажіть, де " +#~ "записаний файл notes.csv, які поля він містить, а також відповідні файли та " +#~ "рядки.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Установивши REA і підключіть його до цього агента " +#~ "програмування за допомогою npx rea-agents@latest setup. Покажіть мені план " +#~ "встановлення для затвердження, а потім перевірте правильність " +#~ "встановлення.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Установивши REA і підключіть його до цього агента " +#~ "програмування за допомогою npx rea-agents@latest setup. Покажіть мені план " +#~ "встановлення для затвердження, а потім перевірте правильність " +#~ "встановлення.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}\"{ph1}{ph2}Використовувати REA для перевірки https://rea.tools/. " +#~ "Клонуйте цей веб-сайт для мене.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "код[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× панорамний масштаб" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2} зворотне проектування чого завгодно{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/vi/messages.po b/website/locales/vi/messages.po new file mode 100644 index 000000000..80fa96e81 --- /dev/null +++ b/website/locales/vi/messages.po @@ -0,0 +1,13339 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}Nhà{ph1} / Blog" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "Blog." + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "Suy nghĩ về kỹ thuật đảo ngược." + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "Tái thiết trò chơi{ph0}Bài luận" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "Cuộc cách mạng công nghiệp trong kỹ thuật đảo ngược" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "" +"NHỮNG gì HƯỚNG DẪN SỬ DỤNG LẠI VÀ tái TẠO TH08, TH095 và TH04 đã dạy tôi về " +"các đại lý, xác minh và kiến thức mà các hợp chất trong các dự án." + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "Đọc bài viết" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Bởi N0zoM1z0 * 10 tháng mười 2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} Hàng đầu" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA Blog-Suy Nghĩ Về Kỹ Thuật Đảo Ngược" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "" +"Suy nghĩ về kỹ thuật đảo ngược, dựa trên kinh nghiệm thực tế VỚI CÁC đại lý " +"REA và AI." + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "" +"REA-Tìm hiểu cách thức hoạt động của phần mềm. Kỹ thuật đảo ngược với đại lý" +" mã hóa của bạn." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "Trang chủ REA" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "Điều hướng chính" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "REA TRÊN GitHub" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "Tham gia Discord của REA" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "Theo DÕI REA Trên X" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}Nhà{ph1} / {ph2}Blog{ph3} / Tái thiết Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "Tiểu luận * Tái Thiết Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "Cuộc cách mạng công nghiệp trong kỹ thuật đảo ngược." + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "Bởi N0zoM1z0 * 10 tháng mười 2026" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "Điểm chính" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "" +"{ph0}Cung cấp cho các đại lý quyền tự chủ trong cuộc điều tra.{ph1} Đặt mục " +"tiêu rõ ràng và tiêu chí chấp nhận, sau đó để đại lý quyết định thử gì tiếp " +"theo." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}Sử dụng kho lưu trữ và Git làm bộ nhớ làm việc.{ph1} Giữ lý luận với " +"mã. Các điểm kiểm tra Git để phiên tiếp theo tiếp tục sau khi cuộc trò " +"chuyện kết thúc." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "" +"{ph0}Hãy để bằng chứng quyết định những gì bạn yêu cầu.{ph1} Một lời giải " +"thích tự tin vẫn cần thử nghiệm. \"Không xác định\" là một câu trả lời hợp " +"lệ khi bằng chứng không đầy đủ." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "" +"{ph0}Kiểm tra tài liệu tham khảo xác minh (oracle) quá.{ph1} Hãy thử các " +"trường hợp nó nên từ chối. Nếu nó bỏ lỡ một lỗi, hãy xem lại các kết quả " +"trước đó phụ thuộc vào nó." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "" +"{ph0}CHÚNG ta đang ở trong những ngày đầu CỦA CUỘC cách mạng CÔNG nghiệp CỦA" +" RE.{ph1} Các phương pháp vẫn đang hình thành. Còn rất nhiều thứ để khám " +"phá." + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "Làm thế nào kinh nghiệm hợp chất" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}Hướng của con người{ph1} * Tiêu chí mục tiêu và chấp nhận" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "Quyền tự chủ" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "Trợ lý AI" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "Chọn một thử nghiệm.{ph0}Đề xuất một giả thuyết." + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "Kiểm chứng" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "Chuẩn kiểm chứng" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "Kiểm tra chống lại một{ph0}tham chiếu cụ thể." + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "Kho mã" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "Bộ nhớ làm việc" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "Mã, bằng chứng,{ph0}kiểm tra và bài học." + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "Không phù hợp{ph0}{ph1}Sửa đổi giả thuyết{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "Một tốt hơn{ph0}{ph1}điểm bắt đầu{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "Tái sử dụng" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}Vượt qua{ph1} * Giữ kết quả và bằng chứng của nó" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "" +"Mỗi dự án để lại tiếp theo với một điểm khởi đầu tốt hơn. Điều đó bao gồm " +"sửa chữa các kiểm tra khi chúng tôi phát hiện ra một khoảng cách." + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "Trong bài viết này" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}Mai 2026{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0} TH08 : sự tiếp tục{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}Hai cách tiếp cận{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0} TH095 : hợp chất{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04: trên các kiến trúc{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}Từ chính xác đến có thể đọc được{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}Sự thay đổi công nghiệp{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}Điều gì trở nên khả thi{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "Điều gì đã thay đổi vào tháng 8 năm 2026" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"Trước khi làm việc này, tôi đã thực hiện rất nhiều kỹ thuật đảo ngược thủ " +"công. Tôi sẽ kiểm tra một chức năng cho đến khi tôi có một lời giải thích, " +"sau đó kiểm tra lời giải thích đó chống lại chương trình. Tiếp tục có nghĩa " +"là dành nhiều thời gian hơn cho chức năng tiếp theo. Nó cũng có nghĩa là giữ" +" một bức tranh ngày càng lớn trong đầu tôi." + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"Hầu hết CÁC CÔNG VIỆC LẠI của tôi là trên các trò chơi. Tôi tái tạo lại " +"chúng để hành vi của chúng có thể được hiểu và cuối cùng được đưa vào cổng " +"phần mềm hoặc mod. Đó là kinh nghiệm đằng sau bài viết này. Phương thức này " +"có thể hữu ích ở nơi khác, nhưng mỗi trường cần thiết lập những gì nó có thể" +" kiểm tra đối với một tham chiếu đáng tin cậy." + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"Vào tháng 8 năm 2026, tôi bắt đầu khám phá tái agent-driven nghiêm túc. Tôi " +"muốn xem một đại lý có thể đi được bao xa với quyền truy cập vào chương " +"trình và các công cụ phát triển thông thường. Touhou tái thiết đã cho tôi " +"một dự án đáng kể trong đó để tìm hiểu." + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"Sự tiến bộ ban đầu thật đáng kinh ngạc. Một cuộc điều tra có thể tiếp tục di" +" chuyển mà không cần tôi chọn từng bước riêng lẻ. Một so sánh thất bại có " +"thể gửi các đại lý cho người gọi khác. Nó có thể viết một chẩn đoán nhỏ và " +"sử dụng kết quả để quyết định những gì để thử tiếp theo. Cho nó rằng tự do " +"đã tạo ra sự khác biệt: tôi có thể dành nhiều sự chú ý hơn cho hướng của dự " +"án và về việc kiểm tra của nó có đáng tin cậy hay không." + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "" +"Tốc độ đã thu hút sự chú ý của tôi đầu tiên. Sau đó, tôi bắt đầu tự hỏi điều" +" gì sẽ tồn tại ngoài dự án hiện tại. Liệu trò chơi tiếp theo có được hưởng " +"lợi từ mọi thứ chúng ta vừa học được không?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08: xây dựng trên công việc của con người" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0} TH08 {ph1}, Đêm Imperishable, bắt đầu như là một sự tiếp nối của {ph2}" +" GensokyoClub tái thiết{ph3}. Nguồn công khai của họ đã cho tôi một nền tảng" +" đáng kể. Nó đi kèm với kiến thức về việc xây dựng và lịch sử đóng góp mà " +"tôi đã lưu giữ trong phần tiếp theo." + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"Lịch sử nhập khẩu kết thúc tại trạm kiểm soát ngày 10 tháng 8 công cộng. Sự " +"tiếp tục độc lập của tôi bắt đầu vào ngày 13 tháng tám. Đến ngày 19 tháng 8," +" sổ cái đã ghi lại nguồn cho tất cả 1.107 chức năng trò chơi được xác định." + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"MỘT CỔNG TÁI THIẾT Linux có thể chơi ĐƯỢC đã được cam kết vào ngày 24 tháng " +"8, khoảng mười một ngày sau khi bắt đầu tiếp tục. Một phiên Bản Web theo " +"sau. BẢN PHÁT HÀNH Linux 64-bit gốc đã đến vào ngày 30 tháng 8." + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"Điều khiến tôi ấn tượng là công việc đã đạt đến một chương trình mà mọi " +"người có thể chạy. Đến đó yêu cầu các vấn đề sau ngoài một chức năng riêng " +"lẻ. Ngay cả khi hai hàm trông chính xác trong sự cô lập, chúng có thể vô " +"tình sử dụng các bản sao riêng biệt của trạng thái đáng lẽ phải được chia " +"sẻ." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"Điều này làm cho kiểm tra tham chiếu trung tâm cho công việc. Tôi gọi họ " +"{ph0}tài liệu tham khảo xác minh (oracles){ph1}. So sánh mã có thể cho chúng" +" ta biết liệu một hàm được xây dựng lại có tái tạo các hướng dẫn ban đầu hay" +" không. Kiểm tra thời gian chạy có thể cho chúng tôi biết liệu một tuyến " +"đường được thực hiện có đạt đến trạng thái mong đợi hay không. Đại lý đề " +"xuất một lời giải thích và kiểm tra nó; một sự không phù hợp mang lại cho nó" +" một cái gì đó cụ thể để điều tra." + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "Một kết hợp chính xác với hằng số sai" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "" +"Một tài liệu tham khảo xác minh (oracle) là phần mềm ai đó đã viết. TH08 đã" +" cho tôi một lời nhắc nhở rõ ràng về bao nhiêu có thể phụ thuộc vào phần mềm" +" đó." + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"Vào tháng 9, một lỗi được báo cáo bởi một cổng Chuyển Đổi Xuôi dòng đã dẫn " +"trở lại mục tự động thu thập. Nguồn tái tạo kiểm tra sức mạnh của người chơi" +" chống lại {ph0}. Bản gốc được sử dụng {ph1}, ngưỡng công suất tối đa." + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"Công suất bình thường là không âm, vì vậy việc kiểm tra công suất được xây " +"dựng lại luôn được thỏa mãn một cách hiệu quả. Phía trên dòng bộ sưu tập, " +"trò chơi có thể thu hút các vật phẩm mà không cần sức mạnh tối đa. Các ngoại" +" lệ khác trong điều kiện là chính xác. Điều này liên tục thay đổi hành vi." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}Tuy nhiên, chức năng đã vượt qua so sánh chính xác.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"Việc xây dựng lại có thể đặt hằng số tại một địa chỉ khác. Công cụ so sánh " +"chiếm điều đó bằng cách điều chỉnh địa chỉ trong các hướng dẫn được biên " +"dịch trước khi so sánh chúng với bản gốc. Nhưng nó không bao giờ kiểm tra " +"giá trị dấu phẩy động được lưu trữ tại địa chỉ được tham chiếu." + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "" +"Điều đó để lại một lỗ trong séc. Nó có thể chỉ ra hướng dẫn được xây dựng " +"lại tại của bản gốc {ph0} trong khi nguồn tin vẫn nói {ph1}. Các byte hướng " +"dẫn phù hợp. Nguồn có nghĩa là một cái gì đó khác nhau." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"Các {ph0}2 tháng chín sửa chữa{ph1} đã sửa nguồn và thực hiện so sánh kiểm " +"tra các byte thực tế của hằng số được tham chiếu. A {ph2}kiểm toán rộng " +"hơn{ph3} sau đó kiểm tra 1.548 tham chiếu liên tục dấu phẩy động. Nó tìm " +"thấy mười hai tài liệu tham khảo không chính xác khác trên năm chức năng " +"được chấp nhận." + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "" +"So sánh bây giờ kiểm tra mọi hằng số dấu phẩy động như vậy. Các thử nghiệm " +"của nó bao gồm các giá trị cố tình sai để đảm bảo chúng bị từ chối. Chúng " +"tôi cũng phải xem lại kết quả đã vượt qua kiểm tra yếu hơn." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "" +"{ph0}Tài liệu tham khảo xác minh (oracle) cũng cần được xây dựng lại.{ph1} " +"Sửa chữa nó là một phần của việc sửa chữa trò chơi." + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"Điều đó quan trọng khi nhóm chủ yếu là một người làm việc với các đại lý. Cá" +" nhân tôi không thể kiểm tra mọi dòng họ sản xuất, vì vậy phần lớn sự tự tin" +" của tôi nằm trên séc của họ. Điểm mù của tài liệu tham khảo xác minh được " +"chia sẻ (oracle) có thể ảnh hưởng đến nhiều cuộc điều tra trước khi tôi nhận" +" thấy nó. Tôi phải hiểu những gì trình kiểm tra thực sự xác minh và kiểm tra" +" nó chống lại các trường hợp phải thất bại." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"Khi công việc tiếp tục, những kiểm tra đó đã trở thành một phần của kho lưu " +"trữ. Vì vậy, các lý do cho các thay đổi nguồn và ghi chú cho phép một phiên " +"sau đó chọn nơi một phiên trước đó dừng lại. {ph0}Kho lưu trữ mã nguồn đang " +"trở thành bộ nhớ làm việc của dự án.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "" +"{ph0}Một lô thành công đã cho chúng tôi cả mã được khôi phục và môi trường " +"tốt hơn cho lô tiếp theo.{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "Hai ý tưởng tái thiết khác nhau" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub ' s {ph0}README công CỘNG{ph1} làm cho sự bất đồng của nó với " +"loại công việc này rõ ràng. Thông báo thông báo rằng việc phát triển thêm sẽ" +" diễn ra riêng tư cho đến khi hoàn thành. Một đoạn văn đọc:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "" +"Sự trỗi dậy của grifters (dịch ngược AI và cổng) trong không gian này lấy từ" +" tác phẩm của chúng tôi vẽ nên một hình ảnh xấu cho những nỗ lực dịch ngược " +"trong tương lai…" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"Thông báo cũng mô tả số điện thoại tâm lý trên các nhà bảo trì. Chính sách " +"đóng góp của họ không bao gồm các yêu cầu kéo được sản xuất chủ yếu với AI. " +"Họ đã đặt thời gian rảnh của họ vào công việc khó khăn, và công việc đó đã " +"giúp tôi tiếp tục có thể. Tôi tôn trọng nỗ lực đằng sau nó. Sự bất đồng tôi " +"muốn thảo luận là về việc tái thiết nên tiến hành như thế nào và đóng góp " +"nên được đánh giá như thế nào." + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"Trong quy trình làm việc thủ công tôi biết, phát triển sự hiểu biết về một " +"chức năng và tái tạo nó thường rơi vào cùng một người. Một dự án phụ thuộc " +"rất nhiều vào chuyên môn của người đó. Niềm tin vào người đóng góp quan " +"trọng vì rất nhiều lý do đã xảy ra trong khi họ làm việc." + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "" +"Các dự án hiện tại đã bảo tồn kiến thức trong nguồn của họ và xây dựng các " +"công cụ. Điều thay đổi đối với tôi là một đại lý có thể sử dụng kiến thức đó" +" để tự mình theo đuổi cuộc điều tra tiếp theo." + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"Trong phần tiếp theo của mình, tôi quyết định mục tiêu và tiêu chuẩn để chấp" +" nhận kết quả. Đại lý có quyền tự do điều tra rộng rãi. Tái thiết đề xuất " +"của nó sau đó phải tồn tại các kiểm tra có liên quan. Tôi muốn một người " +"khác có thể kiểm tra lý do tại sao chúng tôi chọn một triển khai, ngay cả " +"khi một đại lý đã làm hầu hết công việc." + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"Đây có thể là một quá trình chuyển đổi khó khăn. Nhiều năm làm việc cẩn thận" +" có thể trở thành nền tảng cho sự tiếp tục di chuyển nhanh hơn nhiều. Điều " +"đó đặt ra câu hỏi thực sự về tín dụng. Nó cũng thay đổi những gì các nhà bảo" +" trì cần biết trước khi chấp nhận đóng góp." + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"Sự tương tự công nghiệp giúp tôi suy nghĩ về điều này. Trong một nghề thủ " +"công, phần lớn quá trình phụ thuộc vào kỹ năng của người thực hiện nó. Máy " +"móc thay đổi khi cần kỹ năng đó. Ai đó vẫn phải thiết kế quy trình và nhận " +"ra khi nào đầu ra của nó sai. Các cộng đồng khác nhau có thể chọn mức độ " +"thay đổi mà họ muốn thực hiện." + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "" +"Sự lựa chọn của tôi là tiếp tục công khai, với công việc được thừa kế được " +"ghi có và lịch sử của nó được bảo tồn. Tôi muốn công việc mới có thể xem xét" +" lại. Điều đó cho chúng ta một cách để hỏi cách tiếp cận này có thể đi bao " +"xa và học hỏi từ những gì sai trên đường đi." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"NGUỒN: GensokyoClub ' s {ph0}THÔNG BÁO README{ph1}, đã kiểm tra vào ngày 10 " +"tháng 10 năm 2026 và {ph2}chính sách đóng góp{ph3}. Trích dẫn là một đoạn " +"trích rút gọn. TH08 ' s {ph4}tín dụng và xuất xứ{ph5} ghi lại ranh giới " +"tiếp tục." + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095: kinh nghiệm bắt đầu ghép" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0} TH095 {ph1}, Bắn Viên Đạn, làm cho giá trị của trải nghiệm đó dễ nhìn " +"hơn nhiều. Kho lưu trữ của nó bắt đầu vào ngày 29 tháng 8 với các chức năng " +"trò chơi được xác nhận bằng không trong sổ cái. Chúng tôi vẫn phải học trò " +"chơi. Nhưng chúng tôi đã biết nhiều hơn về cách bắt đầu tái thiết và cách " +"giữ cho nó di chuyển." + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"Đến ngày 7 tháng 9, tất cả 697 chức năng trò chơi được xác định đều có " +"nguồn. Đến ngày 8 tháng 9, 696 đã được chấp nhận là so sánh chính xác. Toàn " +"bộ chương trình được liên kết vào ngày 9 tháng 9. VIỆC TÁI THIẾT Windows " +"i386 được đánh dấu có thể chơi được vào ngày 10 tháng 9, khoảng mười hai " +"ngày sau khi khởi tạo." + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "" +"Tôi thấy điều này thú vị hơn tốc độ của dự án đầu tiên. Một mục tiêu mới có " +"thể được hưởng lợi từ công việc được thực hiện trên một trò chơi khác. Kinh " +"nghiệm đã có mặt trong các công cụ và trong cách dự án được tổ chức." + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"VÍ dụ, TH08 đã dạy chúng ta chú ý đến chương trình lắp ráp sớm. Nếu một số " +"chức năng được phục hồi phụ thuộc vào cùng một trạng thái, các so sánh biệt " +"lập của chúng sẽ để lại một câu hỏi quan trọng. Chúng ta cần thấy họ làm " +"việc cùng nhau. Bài học đó đã giúp định hình cách chúng tôi tiếp cận BẢN " +"dựng toàn bộ CHƯƠNG trình CỦA TH095." + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"Một bài học ở trong đầu tôi rất hữu ích khi tôi ở đó. Một khi nó trở thành " +"một kiểm tra mà một phiên khác có thể chạy, nó có thể tiếp tục giúp đỡ sau " +"khi tôi đã chuyển sang. Các đại lý tiếp theo có thể sử dụng kết quả mà không" +" cần lặp lại điều tra dẫn đến nó." + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"Lỗi liên tục dấu phẩy động cũng thuộc về bộ nhớ đó. Nó giải thích lý do tại " +"sao kiểm tra một tài liệu tham khảo cũng yêu cầu kiểm tra dữ liệu đằng sau " +"nó. Giữ sự điều chỉnh đó bằng mã giúp các dự án sau này tránh kế thừa điểm " +"mù của séc cũ." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "" +"{ph0}Phương pháp này trở thành một phần của tài liệu bắt đầu cho trò chơi " +"tiếp theo.{ph1} Chúng ta có thể dành nhiều nỗ lực của dự án tiếp theo cho " +"những gì thực sự mới về mục tiêu của nó." + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "" +"Lợi ích tương tự có sẵn cho những người tham gia sau này. Họ có thể kiểm tra" +" một quyết định và chạy lại kiểm tra trước khi tiếp tục công việc. Họ không " +"phải xây dựng lại toàn bộ lịch sử của dự án để tìm hiểu lý do tại sao nguồn " +"trông giống như cách nó làm." + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04: quy trình làm việc tồn tại trong một kiến trúc khác" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0} TH04 {ph1}, Lotus Land Story, đã đưa tác phẩm này vào kỷ NGUYÊN PC-98 " +"dos. Mục tiêu bây giờ là một môi trường 16 bit với bốn chương trình hợp tác." +" Hiểu được hành vi phần cứng của nó đòi hỏi bằng chứng khác NHAU từ CÁC TRÒ " +"CHƠI Windows. Hiện có {ph2}ReC98 làm việc{ph3} đã cho chúng tôi kiến thức có" +" giá trị và tài liệu nguồn ở đây quá." + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"VIỆC tái THIẾT DOS hiện đang hoạt động. Trong thử nghiệm thủ công của tôi, " +"tôi đã chơi các tuyến Đường Bình thường hoàn chỉnh thông qua kết thúc của " +"chúng và kiểm tra lưu. Công việc hiện tại là một cổng 64 bit gốc. Thiết lập " +"phiên bản dos hoạt động trước tiên cung cấp cho cổng đó một tham chiếu." + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "" +"Kiến trúc đã thay đổi những gì chúng tôi cần để điều tra. Nó cũng thay đổi " +"trình biên dịch và thời gian chạy mà chúng tôi đã kiểm tra công việc của " +"mình. Nhưng tác nhân vẫn có thể làm theo một câu hỏi cho đến một kết quả và " +"để kết quả đó hướng dẫn thí nghiệm tiếp theo." + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"Hãy xem xét sự chuyển đổi từ lối chơi sang kết thúc. Chúng ta cần biết trạng" +" thái nào mang qua ranh giới đó và chương trình nào chịu trách nhiệm về nó. " +"Đó là điều chúng tôi có thể điều tra chống lại sản phẩm dos. Một khi các " +"bằng chứng và kiểm tra có sẵn, một đại lý có thể làm việc thông qua các câu " +"hỏi nhiều như nó đã làm trên một tiêu đề Windows." + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "" +"ĐÂY là lý do TẠI sao TH04 quan trọng đối với đối số. Một sự thay đổi nền " +"tảng đáng kể đã không buộc chúng tôi phải bắt đầu lại với một cách làm việc " +"mới. Kiến trúc đã xác định vấn đề; quy trình làm việc vẫn cho chúng ta một " +"cách để giải quyết nó." + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "" +"Đối với cổng 64 bit, bây giờ chúng ta có thể kiểm tra triển khai mới chống " +"lại hành vi đã được phục hồi trên DOS. Kiến thức từ việc tái thiết mang lại " +"cho cảng một cái gì đó để xây dựng." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "" +"Dự án nhà nước tính đến ngày 10 tháng 10 năm 2026: {ph0}Tái THIẾT DOS và " +"kiểm tra thủ công{ph1} · {ph2}Cổng 64-bit{ph3}. Cảng vẫn đang được phát " +"triển." + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "Từ mã chính xác đến mã có thể đọc được" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "" +"Khi một công trình tái thiết hoạt động, tôi muốn người khác có thể hiểu nó." + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"Đối với tôi, lắp ráp và bù đắp thô có thể cảm thấy như những người bạn cũ. " +"Tôi nhận ra đây là một định nghĩa hơi bất thường về \"có thể đọc được.\"Hầu " +"hết mọi người muốn tuân theo logic của trò chơi mà không giữ bố cục bộ nhớ " +"của tệp thực thi trong đầu." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"Đó là nơi {ph0}tái tạo ngữ nghĩa{ph1} vào đi. Một trường phục hồi vẫn có thể" +" được biết đến chủ yếu bằng cách bù đắp của nó. Chúng tôi làm theo cách trò " +"chơi sử dụng nó cho đến khi chúng tôi có thể giải thích vai trò của nó. Sau " +"đó, chúng ta có thể đặt cho nó một cái tên có ý nghĩa và một loại phù hợp " +"với bằng chứng. Chúng tôi giữ lý luận với nguồn để người tiếp theo có thể " +"thấy cách giải thích đó đến từ đâu." + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"Điều này trở nên đặc biệt quan trọng đối với một cổng phần mềm. Một địa chỉ " +"tuyệt đối cho tôi biết nơi nào đó sống trong tệp thực thi cũ. Nó cung cấp " +"một triển khai 64 bit giúp ích rất ít trong việc quyết định đối tượng nào " +"nên sở hữu trạng thái đó. Để di chuyển hành vi một cách an toàn, chúng ta " +"cần khôi phục mối quan hệ đằng sau quyền truy cập bộ nhớ cũ." + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "Thứ tự tôi sử dụng bây giờ là:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}Khôi phục một đường cơ sở chính xác.{ph1} Biên dịch các phần được xây " +"dựng lại với trình biên dịch lịch sử. So sánh mã và dữ liệu có liên quan với" +" tệp thực thi gốc. Ghi lại sự khác biệt chưa được giải quyết để giai đoạn " +"tiếp theo có một điểm khởi đầu rõ ràng." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}Xây dựng và chơi nó trên nền tảng ban đầu.{ph1} Liên kết các phần đó " +"vào chương trình thực bằng cách sử dụng kiến trúc và trình biên dịch gốc. " +"Tập thể dục đường lối chơi quan trọng. Đây là nơi chúng ta có thể tìm thấy " +"các vấn đề với trạng thái chia sẻ hoặc khởi tạo mà so sánh hàm bị cô lập bị " +"bỏ lỡ." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}Xây dựng lại ngữ nghĩa chống lại cả hai tài liệu tham khảo.{ph1} Lấy " +"một phần mạch lạc của trò chơi tại một thời điểm và thiết lập nguồn phục hồi" +" của nó có nghĩa là gì. Cải thiện đại diện của nó trong khi bảo tồn các so " +"sánh chính xác và xây dựng lịch sử có thể chơi được." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "" +"{ph0}Làm cho cổng hiện đại.{ph1} Di chuyển hành vi đã thiết lập vào môi " +"trường mới, chẳng hạn như bản dựng 64 bit gốc. Trò chơi nền tảng gốc được " +"xây dựng lại vẫn là một tài liệu tham khảo để so sánh cách thức hoạt động " +"của cổng." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"Xây dựng có thể chơi được từ giai đoạn thứ hai trở thành một {ph0}tham chiếu" +" xác minh thứ hai (oracle){ph1} trong lần thứ ba. Tham chiếu xác minh đầu " +"tiên (oracle) kiểm tra xem nguồn đã thay đổi của chúng tôi có còn tái tạo mã" +" và dữ liệu gốc có liên quan hay không. Lần thứ hai kiểm tra xem chương " +"trình được xây dựng lại vẫn xây dựng và hoạt động chính xác dọc theo các con" +" đường chúng ta tập thể dục." + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"Họ bắt những sai lầm khác nhau. Thay đổi kiểu có thể thay đổi các hướng dẫn " +"được tạo. Một sự thay đổi quyền sở hữu có thể để lại hai phần của trò chơi " +"bằng cách sử dụng các bản sao khác nhau của nhà nước. Giữ cả hai kiểm tra có" +" sẵn cung cấp cho các đại lý một thất bại cụ thể để điều tra trước khi thực " +"hiện một refactor hơn nữa." + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"Một cái tên cần bằng chứng của riêng nó. Một so sánh chính xác không thể cho" +" chúng ta biết liệu một lĩnh vực có thực sự có nghĩa là \"thời gian bất khả " +"xâm phạm.\"Chúng tôi phải thiết lập điều đó từ cách trò chơi viết và sử dụng" +" nó. Nếu ý nghĩa vẫn không chắc chắn, một cái tên trung lập sẽ hữu ích hơn " +"cho người đọc tiếp theo hơn là một dự đoán tự tin." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"Chúng tôi đã học được thứ tự này thông qua các dự án. TH08 đã có các cổng " +"có thể chơi được trước một số cuộc kiểm toán nền tảng lịch sử sau này của " +"NÓ. Điều đó làm cho một số khiếm khuyết khó nhìn thấy hơn. Các {ph0}Quy " +"trình làm việc hiện tại của nhà máy{ph1} đặt bản dựng nền tảng gốc lên hàng " +"đầu, vì vậy công việc ngữ nghĩa có thể sử dụng nó làm tài liệu tham khảo " +"trước khi bắt đầu chuyển." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "" +"{ph0}Tái thiết chính xác cho chúng ta một tài liệu tham khảo. Tái tạo ngữ " +"nghĩa làm cho kiến thức phục hồi có thể sử dụng được.{ph1} Một cổng sau đó " +"có thể xây dựng trên cả hai." + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "Điều gì làm cho điều này một sự thay đổi công nghiệp" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"Những dự án này đã thay đổi nơi tôi dành sự chú ý của mình. Một khi các đại " +"lý có thể tiến hành nhiều cuộc điều tra, việc cải thiện môi trường làm việc " +"của họ đã trở thành một trong những điều hữu ích nhất mà tôi có thể làm. Một" +" công cụ tốt hơn có thể giúp với mọi chức năng sau này cần nó." + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"Vấn đề tự chủ ở đây. Bước tiếp theo hữu ích thường trở nên rõ ràng chỉ sau " +"một thử nghiệm thất bại. Một đại lý cần đủ tự do để làm theo kết quả đó ở " +"đâu đó bất ngờ. Nếu phải đợi tôi quy định từng bước, phần lớn công việc vẫn " +"gắn liền với sự chú ý của tôi." + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"Tôi hy vọng các đại lý để làm cho giả thuyết sai. Điều quan trọng là liệu " +"chúng ta có thể kiểm tra chúng và học hỏi từ kết quả hay không. Kiểm tra " +"thất bại sẽ giúp nó hiểu rõ sai lầm đủ để thử lại. Tôi vẫn phải quyết định " +"xem bằng chứng tích lũy có hỗ trợ một cột mốc dự án hay không." + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA cung cấp cho các đại lý truy cập vào các công cụ phân tích. Một câu hỏi " +"về người gọi của một chức năng có thể dẫn thẳng vào việc kiểm tra người gọi " +"đó. Dự án tái thiết cung cấp trình biên dịch và kiểm tra tham chiếu của " +"riêng nó. Tác nhân có thể sử dụng chúng để kiểm tra nguồn mà nó đề xuất và " +"xem lời giải thích của nó giữ ở đâu." + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"LỖI TH08 cho thấy lý do tại sao những kiểm tra đó xứng đáng được chú ý kỹ " +"thuật của riêng họ. Khi so sánh tương tự được sử dụng trên hàng trăm chức " +"năng, một khoảng cách trong đó có thể lan rộng hơn nhiều so với một sai lầm " +"trong một lần thực hiện. Kiểm tra trình kiểm tra cải thiện phản hồi có sẵn " +"cho tất cả những gì sau này hoạt động." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"Sự tương tự công nghiệp có một ví dụ lịch sử hữu ích ở đây. Boulton và Watt " +"giới thiệu một {ph0}chỉ báo động cơ hơi nước năm 1796{ph1} để giúp điều " +"chỉnh van động cơ. Một phiên bản ghi âm truy tìm áp lực thông qua hành trình" +" piston. Nó làm cho hành vi bên trong của động cơ có sẵn để kiểm tra. Các " +"công cụ so sánh của chúng tôi phục vụ một mục đích tương tự: chúng cho phép " +"chúng tôi kiểm tra những gì máy móc đang làm trong khi chúng tôi cải thiện " +"nó." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}Chúng tôi đang trong giai đoạn đầu của sự thay đổi công nghiệp " +"này.{ph1} Phần lớn cơ sở hạ tầng vẫn chưa trưởng thành. Các đại lý có thể di" +" chuyển nhanh hơn so với séc của chúng tôi được thiết kế để hỗ trợ, vì vậy " +"quá trình này phải phát triển cùng với chúng. Khi chúng tôi tìm thấy một lỗi" +" trong một công cụ được chia sẻ, chúng tôi phải sửa chữa nó và xem lại kết " +"quả mà nó bị ảnh hưởng. Dự án tiếp theo sau đó có thể kế thừa một công cụ " +"mạnh mẽ hơn." + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "" +"Ngoài ra còn có một giới hạn thực tế cho bất kỳ một cuộc trò chuyện. Nó sẽ " +"kết thúc trước khi một cuộc tái thiết lớn kết thúc. Kho lưu trữ mã nguồn " +"phải làm cho một phiên khác có thể tiếp tục mà không làm mất lý do cho quyết" +" định cuối cùng." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"Các {ph0}Nhà Máy Tái Thiết Touhou{ph1} phát triển ra khỏi nhu cầu đó. Nó " +"cung cấp cho các dự án một cách chung để thực hiện kiểm tra và bài học của " +"họ về phía trước. Làm việc trên một trò chơi có thể cải thiện các điều kiện " +"bắt đầu cho một trò chơi khác." + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "" +"Đó là những gì làm cho sự tương tự công nghiệp có ý nghĩa đối với tôi. Kinh " +"nghiệm bắt đầu trở thành một phần của các công cụ mà người khác có thể sử " +"dụng. Cải thiện những công cụ thay đổi bao nhiêu người tiếp theo—hoặc các " +"đại lý tiếp theo—có thể được thực hiện." + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "Các dự án bây giờ chúng ta có thể xem xét" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "" +"Tốc độ quan trọng bởi vì nó thay đổi quyết định bắt đầu. Một trò chơi có thể" +" là hấp dẫn để đảo ngược kỹ sư và vẫn đòi hỏi nhiều sự chú ý của riêng tôi " +"hơn tôi thực tế có thể cung cấp cho nó. Nhiều dự án sẽ ở lại ý tưởng." + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"Bây giờ tôi có thể thấy một cách để giữ cho một dự án như vậy di chuyển qua " +"các cuộc điều tra lặp đi lặp lại. Nhận được một tái thiết làm việc làm cho " +"một cổng phần mềm thực tế hơn. Khôi phục ngữ nghĩa có thể đọc được giúp " +"người khác dễ dàng khám phá bản mod hơn. Nỗ lực để hiểu trò chơi có thể tiếp" +" tục được đền đáp sau khi phiên bản đầu tiên chạy." + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "" +"Bây giờ tôi nhìn vào một chương trình xa lạ và hỏi: {ph0}truy cập, phản hồi " +"và kiến thức tích lũy nào sẽ cho phép một đại lý làm việc về điều này một " +"cách đáng tin cậy?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "" +"Câu hỏi đó khiến tôi cân nhắc các dự án mà trước đây tôi sẽ để lại một mình." +" Mỗi người có thể cải thiện cách chúng ta tiếp cận tiếp theo. Tôi muốn tiếp " +"tục khám phá xem điều đó có thể đưa chúng ta đi bao xa." + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "Các cột mốc và nguồn dự án" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"Các ngày mô tả các trạm kiểm soát dự án được ghi lại, được kiểm tra dựa trên" +" LỊCH sử GitHub công khai vào ngày 10 tháng 10 năm 2026. Thời gian trôi qua " +"là thời gian theo lịch giữa các cam kết. Sự hiện diện nguồn, so sánh chính " +"xác, bản dựng và kết quả thời gian chạy mỗi tên một cột mốc khác nhau." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0} TH08 :{ph1} {ph2}13 tháng tám tiếp tục{ph3}, {ph4}19 tháng tám nguồn " +"ledger{ph5}, {ph6}24 tháng tám Linux cổng{ph7}, {ph8}26 tháng Tám phiên Bản " +"Web{ph9}, và {ph10}30 tháng tám 64-bit Linux phát hành{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0} TH095 :{ph1} {ph2}29 tháng tám sổ cái ban đầu{ph3}, {ph4}7 tháng chín " +"nguồn ledger{ph5}, {ph6}8 so sánh tháng chín{ph7}, {ph8}9 tháng chín liên " +"kết{ph9}, và {ph10}10 tháng chín có thể chơi được-xây dựng hồ sơ{ph11}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0} TH04 :{ph1} {ph2}10 tháng mười handoff{ph3} ghi lại QUÁ trình tái tạo " +"dos đang hoạt động, thử nghiệm Tuyến Đường Bình thường Hoàn chỉnh của người " +"bảo trì và giai đoạn 64 bit hiện tại." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0} TH08 tham khảo xác minh (oracle) sửa CHỮA:{ph1} {ph2}lỗi thu thập tự " +"động được báo cáo{ph3}, {ph4}nguồn và sửa chữa so sánh{ph5}, và {ph6}kiểm " +"toán liên tục dấu phẩy động đầy đủ{ph7}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "" +"{ph0}Tái tạo ngữ nghĩa:{ph1} {ph2} Sách phát khả năng đọc CỦA TH08{ph3} và " +"{ph4}thứ tự pha Của Nhà Máy và hai đường dẫn xác nhận{ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "" +"{ph0}Lịch sử công nghiệp:{ph1} {ph2}hồ sơ chỉ báo động cơ hơi Nước Của Nhóm " +"Bảo Tàng Khoa học{ph3} mô tả phần giới thiệu năm 1796 và cơ chế ghi áp suất." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "" +"{ph0}Phương pháp:{ph1} Nhà Máy {ph2}tự chủ đại lý{ph3} và {ph4}kiến thức trò" +" chơi chéo{ph5} tài liệu giữ lại các nguyên tắc làm việc và bài học." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}Thêm bài viết{ph1} · {ph2}Khám PHÁ MỘT CUỘC điều TRA TH04{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "Cuộc Cách mạng công nghiệp của Reverse Engineering-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 phản ánh về kỹ thuật đảo ngược thủ công, Tái Thiết Touhou với các " +"tác nhân AI và cách các hợp chất kiến thức trên TH08, TH095 và PC-98 TH04 ." + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "Kinh nghiệm thực hiện giữa các dự án" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "Bài luận tái thiết Touhou" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}Nhà{ph1}{ph2}/{ph3}Phòng thí nghiệm tốc độ khủng long" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "Kiểm tra → xây dựng lại → thay đổi" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "Xây dựng lại quy tắc tốc độ của khủng long." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"Để tạo lại khả năng tăng tốc của trò chơi, trước tiên hãy tìm quy tắc kiểm " +"soát tốc độ của nó. {ph0} REA trả về tập lệnh đang chạy;{ph1} chúng tôi đã " +"sử dụng quy tắc của nó để xây dựng trò chơi nhỏ này với {ph2}tốc độ điều " +"chỉnh.{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}Chơi và thay đổi tốc độ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}Đọc quy tắc đã khôi phục{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Kiểm tra việc tái thiết{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}Hãy thử phân tích{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "Chơi và thay đổi tốc độ" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "" +"Nhấn Play, sau đó nhảy qua cây xương rồng. Di chuyển thanh trượt tốc độ để " +"thử một trò chơi chậm hơn hoặc nhanh hơn; nó chuyển sang một tốc độ cố định." +" Chọn quy tắc đã khôi phục để bắt đầu từ 6 và tăng tốc dần trở lại." + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "Chơi bản dựng lại" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "Chơi" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "Nhảy ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "Chơi lại" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "Tốc độ" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "Sử dụng quy tắc tăng tốc đã khôi phục" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Quy tắc ban đầu: bắt đầu từ 6, sau đó tăng lên 13." + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Di chuyển thanh trượt để thiết lập tốc độ của riêng bạn. Không gian Hoặc " +"Nhảy xóa một cây xương rồng." + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Cho PHÉP JavaScript để chơi tái thiết. Mã và giải thích ở trên vẫn có thể " +"đọc được." + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "Đọc kịch BẢN REA trả về" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"Chúng tôi đã kiểm tra {ph0}PHIÊN bản trình duyệt CÓ NGUỒN GỐC TỪ Chromium " +"của wayou{ph1} VỚI REA . Nó trả lại tải {ph2}, bao gồm chi nhánh này trong " +"chức năng cập nhật của trò chơi:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "" +"Các cài đặt là {ph0}, {ph1} và {ph2}. Trò chơi chạy nhánh này trên bản cập " +"nhật mà không có va chạm." + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "Sử dụng quy tắc tương tự trong trò chơi mới" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "Sao chép" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"Trò chơi mini sử dụng chức năng này để tăng tốc tự động. Thay vào đó, di " +"chuyển thanh trượt cung cấp tốc độ cố định. Vẽ, nhảy vật lý và kiểm tra va " +"chạm hình chữ nhật là mã mới cho trò chơi giảng dạy này; mô phỏng của nó " +"tiến bộ ở mức 60 bản cập nhật mỗi giây." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}Tải xuống quy tắc tốc độ{ph1} · {ph2}Đọc mã trò chơi{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "Kiểm tra việc tái thiết" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "" +"Chúng tôi đã gọi chức năng cập nhật của trò chơi gốc với các chướng ngại vật" +" và lập lịch tự động bị vô hiệu hóa. So sánh những tốc độ ghi lại với một " +"phát lại của quy tắc phục hồi." + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "Cập nhật" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "Trò chơi gốc" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "Quy tắc được xây dựng lại" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "Chạy kiểm tra tốc độ" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "" +"Giá trị làm tròn đến ba số thập phân. Chi nhánh kiểm tra trước khi thêm, vì " +"vậy gia số cuối cùng có thể mất tốc độ chỉ trên 13." + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "Hãy tự mình thử phân tích" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}Thiết LẬP REA {ph1} với đại lý mã hóa của bạn." + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "" +"Theo dõi {ph0}các bước kết nối trình duyệt{ph1}, sử dụng {ph2} như url " +"trang." + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "" +"Cung cấp cho đại lý CỦA bạn URL trang và điểm cuối gỡ lỗi cục bộ, sau đó sao" +" chép lời nhắc này." + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ DỤNG REA để kiểm tra trò chơi khủng long này. Tại sao nó " +"nhanh hơn? Hiển thị quy tắc tốc độ, sau đó xây dựng một phiên bản nhỏ với " +"tốc độ có thể điều chỉnh.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "" +"Yêu cầu theo dõi: {ph0}\"Chiều cao nhảy được tính ở đâu? Thêm điều khiển " +"chiều cao nhảy vào phiên bản mới.”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"Nguồn: {ph0}kiểm tra mã tốc độ{ph1}, TÁC giả Chromium. {ph2}Bản quyền và " +"giấy phép BSD{ph3}. REA 4.1.0 đã kiểm tra phiên bản HTTP đang chạy TRONG " +"Chrome 150." + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "TRÒ Chơi Khủng Long Chrome: Xây Dựng Lại Quy tắc Tốc độ của Nó — REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "" +"Đọc quy tắc tốc độ của trò chơi khủng long VỚI REA , xây dựng lại nó, sau đó" +" thay đổi tốc độ và chơi." + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "Khủng long tốc độ tái thiết" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Khủng long mini-game. Sử dụng Nút Nhảy hoặc Nhấn Không gian trong khi trò " +"chơi được tập trung." + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "Sao chép quy tắc tốc độ được xây dựng lại" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Sao chép dấu nhắc phân tích khủng long" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}Nhà{ph1} / HỎI ĐÁP" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA CÂU HỎI THƯỜNG GẶP." + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "Thiết lập, cập nhật, phân tích và khắc phục sự cố." + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "Chủ đề" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}Thiết lập và cập nhật{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}Phân tích{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}Khắc phục sự cố{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}Dữ liệu và chia sẻ{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "Thiết lập và cập nhật" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "Cài đặt REA thế nào?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "Thiết bị đầu cuối · thiết lập đại lý" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "Sao chép" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"Lệnh thiết lập đăng ký kết nối MCP của REA và cài skill phân tích tương ứng." +" Khi hoàn tất, khởi động lại agent rồi đưa đường dẫn tệp và câu hỏi. " +"{ph0}Hướng dẫn thiết lập{ph1} trình bày các yêu cầu và bước phân tích đầu " +"tiên." + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "NHỮNG đại lý mã hóa NÀO có thể sử DỤNG REA ?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"Bất kỳ đại lý nào hỗ trợ MÁY chủ MCP cục bộ. Thiết lập BAO GỒM Claude Code ," +" Claude Desktop, Codex , Cursor , Gemini CLI , Windsurf , Devin , OpenCode ," +" Antigravity , GitHub Copilot CLI , Command Code , Grok Build , OMP , VÀ VS " +"Code . Trình kết nối của Grok Bot được thêm vào từ cuộc trò chuyện của Nó." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}Kết nối đại lý mã hóa của bạn{ph1}." + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "Cập nhật REA thế nào?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "" +"REA phát hành thường xuyên, bao gồm sửa lỗi. Nếu bạn đã cài ĐẶT CLI với npm " +":" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "Thiết bị đầu cuối * CÀI ĐẶT CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "" +"Thực hiện theo lệnh làm mới thiết lập được in bởi bản cập nhật. Nếu bạn " +"thiết lập đại lý của bạn thông qua {ph0}, chạy đi:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "Thiết bị đầu cuối · thiết lập đại lý làm mới" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"Kiểm tra thay đổi và khởi động lại agent. Kết nối REA dùng một phiên bản gói" +" cụ thể, nên cần chạy lại lệnh thiết lập để agent dùng bản mới. Với lệnh CLI" +" chạy một lần, thêm lệnh cần dùng sau {ph0}." + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "Đang cài đặt kỹ năng từ skills.sh đủ chưa?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"Kỹ năng đưa ra hướng dẫn điều tra đại lý của bạn. Chạy đi {ph0} THIẾT LẬP " +"REA{ph1} để kết nối MÁY chủ MCP và cài đặt kỹ năng phù hợp, sau đó khởi động" +" lại đại lý của bạn để nó có thể gọi các công cụ." + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "Phân tích" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "Tôi có thể phân tích gì VỚI REA ?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "Bắt đầu với loại phần mềm bạn có:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "" +"{ph0}Các tệp thực thi và thư viện gốc{ph1}: chức năng, lắp ráp, mã giả và " +"tài liệu tham khảo." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "" +"{ph0} JavaScript và Electron ứng dụng{ph1}: mô-đun, nhập KHẨU, IPC và vị trí" +" nguồn." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "" +"{ph0}Trang trình duyệt{ph1}: kịch bản, yêu cầu và quan sát thời gian chạy." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "" +"REA cũng có quy trình làm việc cho các hội đồng được quản lý, Apk Android, " +"phần sụn và tài nguyên đóng gói. {ph0}Xem các nghiên cứu điển hình{ph1} đối " +"với các cuộc điều tra làm việc." + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "TÔI có cần Hopper , Ghidra hoặc IDA không ?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "" +"Phân tích sâu các chương trình mã máy sử dụng một trong số chúng. KIỂM tra " +"JavaScript và.NET tĩnh hoạt động với các tệp được cung cấp và không cần phân" +" tích công cụ chương trình mã máy." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"Kết nối CÀI ĐẶT Ghidra hoặc IDA hiện CÓ của bạn hoặc để thiết lập phát hiện " +"Hopper và đề xuất cài đặt. Máy chủ và mục tiêu của bạn xác định nhà cung cấp" +" nào có thể được sử dụng. {ph0}Thiết lập phân tích các chương trình mã " +"máy{ph1}." + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "Tôi có thể sử DỤNG REA mà không cần đại lý mã hóa không?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "" +"Vâng. CLI sử dụng cùng một quy trình phân tích. ĐỐI với ỨNG DỤNG JavaScript " +"hoặc Electron cục BỘ:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "Thiết bị đầu cuối · phân tích ứng dụng tĩnh" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "" +"Thay thế đường dẫn bằng thư mục ứng dụng được giải nén hoặc tệp ASAR. " +"{ph0}Sử DỤNG CLI {ph1} đối với các tùy chọn cài đặt." + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "REA trả về mã gì?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "" +"Phân tích mã máy trả về assembly và mã giả, kèm lời gọi hàm, tham chiếu và " +"các hằng số liên quan. Phân tích JavaScript trả về mô-đun, quan hệ giữa " +"chúng và vị trí trong mã nguồn." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"Đại lý của bạn sử dụng những phát hiện này để giải thích hành vi hoặc viết " +"và kiểm tra việc thực hiện. Các {ph0} DX-Ball tính TOÁN{ph1} và {ph2}CTF cờ " +"checker{ph3} cho thấy quá trình đó hoạt động như thế nào." + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "Tôi nên hỏi trợ lý điều gì?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "" +"Cung cấp cho nó một mục tiêu địa phương và một hành vi để điều tra. ĐỐI VỚI " +"ỨNG DỤNG JavaScript hoặc Electron:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "" +"Thay thế đường dẫn bằng mục tiêu của bạn. Các {ph0}hướng dẫn{ph1} cung cấp " +"lời nhắc cho các ví dụ gốc, Electron và trình duyệt." + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "Khắc phục sự cố" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "Tại sao đại lý của tôi không thể thấy CÁC CÔNG cụ REA?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "" +"Khởi động lại hoặc kết nối lại đại lý của bạn sau khi thiết lập. Kiểm tra " +"ĐĂNG ký REA của NÓ với {ph0}; CHO Codex :" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "Thiết bị đầu cuối * kiểm tra một khách hàng" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "" +"Thay thế {ph0} VỚI ID khách HÀNG của bạn, chẳng hạn như {ph1} hoặc {ph2}. " +"Nếu báo cáo hiển thị đăng ký bị thiếu hoặc cũ, hãy chạy thiết lập cho khách " +"hàng đó:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "Thiết bị đầu cuối · sửa chữa thiết lập của một khách hàng" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "" +"Xem lại kế hoạch của nó và khởi động lại khách hàng. Nếu đăng ký là lành " +"mạnh nhưng các công cụ vẫn vắng mặt, hãy kiểm tra LỖI KẾT nối MCP của khách " +"hàng. {ph0}Thêm chẩn đoán thiết lập{ph1}." + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "Tôi có cần khởi ĐỘNG Hopper trước không?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA bắt ĐẦU Hopper khi một hoạt động cần nó. TRÊN macOS, hoàn thành lựa chọn" +" chạy đầu tiên của chế độ demo hoặc kích hoạt giấy phép trước khi phân tích " +"không giám sát. {ph0}Xem thiết lập nhà cung cấp gốc{ph1}." + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "Tôi nên làm gì khi gặp lỗi?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "" +"{ph0}Cập NHẬT REA {ph1}, khởi động lại đại lý của bạn và thử lại cùng một " +"nhiệm vụ. Một bản phát hành gần đây có thể đã khắc phục được sự cố." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"Nếu nó vẫn tồn tại, {ph0}mở một vấn đề{ph1} VỚI PHIÊN BẢN REA CỦA bạn, hệ " +"điều hành, loại mục tiêu, các bước để tái tạo và đầu ra lỗi. Bao gồm tên nhà" +" cung cấp khi sự cố liên quan đến việc phân tích các chương trình mã máy." + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "Dữ liệu và chia sẻ" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "REA có tải lên ứng dụng của tôi không?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "" +"REA phân tích mục tiêu trên máy tính của bạn. Đại lý của bạn nhận được kết " +"quả và chính sách dữ liệu của nhà cung cấp mô hình áp dụng cho các kết quả " +"đó." + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "Làm thế nào tôi có thể chia sẻ một ví dụ hoặc đóng góp?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"Có một VÍ DỤ REA hữu ích? Chúng tôi rất muốn nhìn thấy nó. Chia sẻ mục tiêu," +" câu hỏi của bạn, những phát hiện và cách bạn kiểm tra chúng trong một " +"{ph0}vấn đề{ph1} hoặc {ph2}yêu cầu kéo{ph3}. Các đoạn trích và số liệu mã " +"ngắn giúp người khác theo dõi cuộc điều tra." + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "" +"Báo cáo lỗi, yêu cầu tính năng, tài liệu và cải tiến mã cũng được chào đón. " +"Bạn cũng có thể thảo luận về một ví dụ trong {ph0}cộng đồng{ph1}." + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA FAQ: Thiết Lập, Cập nhật Và Khắc phục Sự Cố" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "" +"Câu trả lời cho CÁC CÂU HỎI REA phổ biến: cài đặt, cập nhật, công cụ phân " +"tích, đại lý mã hóa, khắc phục sự cố và chia sẻ ví dụ." + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "CÂU hỏi thường gặp VỀ REA" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "Sao CHÉP lệnh THIẾT LẬP REA" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "Sao CHÉP lệnh cập NHẬT REA" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "Sao chép lệnh làm mới thiết lập tác nhân" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "Sao CHÉP lệnh PHÂN tích REA CLI" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "Sao chép lời nhắc phân tích ví dụ" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "Sao chép lệnh chẩn đoán khách hàng" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "Sao chép lệnh thiết lập phạm vi" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}Nhà{ph1} / Cuộc điều tra đầu tiên của bạn" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "Tìm ra nơi{ph0}xuất khẩu ghi chú đi." + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "" +"SỬ DỤNG REA để kiểm tra một ứng dụng nhỏ, hãy làm theo Nút Xuất ghi Chú Của " +"NÓ và tự kiểm tra một chi tiết." + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "Trong bài tập này" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. Thiết lập{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. Hỏi về xuất khẩu{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. Làm theo câu trả lời{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. Kiểm tra dự đoán{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. Hỏi một câu hỏi khác{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. Kết nối đại lý CỦA BẠN VỚI REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "Sao chép" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "Hoặc chạy lệnh này trong thiết bị đầu cuối của bạn:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "" +"Xem lại kế hoạch, phê duyệt thiết lập, sau đó khởi động lại đại lý của bạn. " +"Đã kết nối? Tiếp tục dưới đây." + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. Hỏi CSV được viết ở đâu" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"Ví dụ là một ứng dụng Electron sáu tệp với một {ph0}Xuất ghi chú{ph1} nút. " +"Đại lý của bạn có thể kiểm tra mã của nó mà không cần cài đặt hoặc khởi CHẠY" +" Electron ." + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "" +"Đại lý của bạn tải xuống các tệp và cung cấp thư mục đã giải nén CHO REA để " +"kiểm tra." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Tải xuống VÍ DỤ ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "" +"Nếu đại lý của bạn không thể tải xuống tệp, hãy tự giải nén kho lưu trữ này." +" Cung cấp cho nó con đường đến {ph0} thư mục và cùng một câu hỏi xuất." + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. Làm theo câu trả lời trở lại mã" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "Tìm kiếm một lời giải thích ngắn với các tham chiếu tệp và dòng:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "" +"Nút gửi một {ph0} tin nhắn. Quá trình chính định dạng các ghi chú DƯỚI DẠNG " +"CSV và viết {ph1} trong thư mục Tải xuống của người dùng. Các cột là {ph2} " +"và {ph3}." + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "Từ nút đến trình ghi tệp" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "" +"PHÂN tích TĨNH CỦA REA ghép nối thông báo với trình xử lý của nó. Điểm đến " +"được đọc từ mã." + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "" +"Đường dẫn tệp, trình định dạng và cuộc gọi ghi nằm cùng nhau trong trình xử " +"lý này. Yêu cầu đại lý của bạn hiển thị những dòng này nếu câu trả lời của " +"nó loại bỏ chúng." + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}Xem dấu vết mã đầy đủ và ghi LẠI KẾT quả REA{ph1}." + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. Kiểm tra dự đoán" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "" +"Dấu phẩy phân TÁCH CÁC CỘT CSV. Điều gì xảy ra khi một tiêu đề ghi chú chứa " +"dấu phẩy hoặc dấu ngoặc kép?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "Tự chạy kiểm tra" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "Mở một thiết bị đầu cuối trong giải nén {ph0} thư mục:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"Lệnh này sử dụng một shell có hỗ trợ tài liệu ở đây, chẳng hạn như Bash hoặc" +" Zsh. Đại lý của bạn có thể chạy CÙNG MỘT JavaScript trong vỏ nền tảng của " +"bạn." + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. Hỏi một câu hỏi khác" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "Hãy thử theo dõi trong cùng một cuộc trò chuyện:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "" +"Điều gì xảy ra nếu tập tin không thể được viết? Thực hiện theo các lỗi trở " +"lại trang." + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "" +"Hoặc cung cấp cho đại lý của bạn một ứng dụng của riêng bạn và hỏi về một " +"nút, tệp hoặc hành vi." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "" +"{ph0}Notion sao chép văn bản và HTML như thế nào{ph1}{ph2}Thực hiện theo một" +" tính năng clipboard TRONG MỘT ỨNG dụng Electron đóng gói.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "" +"{ph0}CÁCH DX-Ball tính toán định vị âm thanh nổi{ph1}{ph2}Đọc hướng dẫn ban " +"đầu và séc tái thiết.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "" +"{ph0}Khắc phục sự cố thiết lập hoặc phân tích{ph1}{ph2}Cập NHẬT REA và kiểm " +"tra kết nối nếu bạn gặp khó khăn.{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "Điều Tra Kỹ Thuật Đảo Ngược Đầu tiên của bạn-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "" +"Hãy thử REA trên Một Ứng dụng Ghi chú nhỏ. Thiết lập đại lý của bạn, hỏi ghi" +" chú đã xuất đi đâu và kiểm tra TRÌNH định dạng CSV với tiêu đề mẫu." + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "CUỘC điều tra REA đầu tiên của bạn" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "Sao CHÉP lời nhắc cài ĐẶT REA" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "Sao chép lệnh thiết lập" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "Sao Chép Ghi chú điều tra nhanh chóng" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "Sao CHÉP CSV kiểm tra dấu nhắc" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "Sao chép lệnh kiểm tra định dạng" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}Nhà{ph1} / Bắt đầu" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "Thiết LẬP REA ." + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "" +"Kết nối REA với đại lý mã hóa của bạn hoặc kiểm tra một ứng dụng cục bộ từ " +"thiết bị đầu cuối của bạn." + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "Mở một thiết bị đầu cuối và kiểm tra:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "Thiết bị đầu cuối" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "Sao chép" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0} Windows (PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "Windows PowerShell" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "" +"Loại Y nếu được yêu cầu chấp nhận các điều khoản. Đóng PowerShell, mở lại, " +"sau đó chạy {ph0}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"Nếu PowerShell sau đó nói {ph0}\"chạy tập lệnh bị vô hiệu hóa trên hệ thống " +"này\"{ph1} khi bạn chạy {ph2}, chạy cái này một lần và thử lại:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "NẾU bạn sử DỤNG Homebrew :" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS · Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "Nếu không:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "Đóng Thiết bị đầu cuối, mở lại, sau đó:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "" +"Trình cài đặt cần {ph0} và {ph1} (Trên Debian/Ubuntu: {ph2}). Đóng thiết bị " +"đầu cuối, mở lại, sau đó:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "" +"Bản phân phối của riêng bạn {ph0} gói thường cũ hơn 22,19, vì vậy hãy kiểm " +"tra {ph1} nếu bạn sử dụng nó thay thế." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "" +"Thích một trình cài đặt thông thường? Tải xuống phiên bản LTS từ " +"{ph0}nodejs.org{ph1}." + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "Tùy chọn thiết lập" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}Kết nối đại lý mã hóa của bạn{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}Sử DỤNG CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}Thiết lập phân tích các chương trình mã máy{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}Nhận trợ giúp{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "Kết nối đại lý mã hóa của bạn" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"Chạy thiết lập để kết nối REA với tác nhân mã hóa của bạn. Các lựa chọn của " +"khách hàng bao gồm Claude Code , Codex , Cursor , Gemini CLI , Windsurf , " +"Grok Build và CÁC máy KHÁCH MCP được hỗ trợ khác. Trình kết nối của Grok Bot" +" được thêm vào từ cuộc trò chuyện của Nó." + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "Mới đối với đại lý mã hóa?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"Tác nhân mã hóa là một trợ lý AI hoạt động trên máy tính của bạn thay vì " +"trong tab trình duyệt. Nó có thể đọc các tập tin và chạy các lệnh, và nó yêu" +" cầu trước khi thực hiện thay đổi. REA cung cấp cho nó các công cụ kỹ thuật" +" ngược." + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "" +"Nếu bạn chưa có, hãy chọn một, theo dõi trang cài đặt của nó và đăng nhập:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "" +"{ph0}{ph1} Claude Code {ph2}{ph3} BỞI Anthropic . Cần một kế hoạch Claude " +"trả tiền." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "" +"{ph0}{ph1} Codex {ph2}{ph3} BỞI OpenAI . Đăng nhập bằng Tài khoản ChatGPT " +"của bạn." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "" +"{ph0}{ph1} OpenCode {ph2}{ph3}, mã nguồn mở. Kết nối nhà cung cấp mô hình " +"bạn chọn." + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "" +"Sau đó mở nó và sao chép lời nhắc bên dưới vào nó. Các đại lý chạy REA 's " +"thiết lập và cho bạn thấy kế hoạch trước khi thay đổi bất cứ điều gì." + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "Hoặc tự chạy thiết lập" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "Làm cách nào để mở một thiết bị đầu cuối?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "" +"{ph0} Windows :{ph1} mở Menu Bắt đầu, nhập {ph2}Hp{ph3} và nhấn Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "" +"{ph0} macOS :{ph1} báo chí {ph2} {ph3}, loại {ph4}Thiết bị đầu cuối{ph5} và " +"nhấn Enter." + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "" +"{ph0} Linux :{ph1} báo chí {ph2} {ph3} {ph4} trên hầu hết các máy tính để " +"bàn." + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"Dán một lệnh với {ph0} {ph1} (macOS : {ph2} {ph3}; THIẾT BỊ ĐẦU CUỐI Linux: " +"{ph4} {ph5} {ph6}), sau đó nhấn Enter." + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "" +"Chọn khách hàng của bạn và xem lại kế hoạch thiết lập. REA thêm KẾT nối MCP" +" và kỹ năng điều tra phù hợp, giữ một bản sao lưu cấu hình hiện có. Nó hỏi " +"trước khi áp dụng các thay đổi." + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "Khởi động lại máy khách của bạn khi thiết lập kết thúc." + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "Làm cách nào để khởi động lại khách hàng của tôi?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}Ứng dụng máy tính để bàn{ph1} (Claude Desktop, Cursor , Windsurf, VS " +"Code ): thoát khỏi ứng dụng hoàn toàn, sau đó mở lại. Đóng cửa sổ là không " +"đủ. TRÊN macOS báo chí {ph2} {ph3}; TRÊN Windows, cũng thoát khỏi biểu tượng" +" khay nếu có." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "" +"{ph0}Đại lý thiết bị đầu cuối{ph1} (Claude Code, Codex, Gemini CLI): thoát " +"khỏi phiên và bắt đầu lại." + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "" +"Cung cấp cho đại lý của bạn một đường dẫn mục tiêu và một câu hỏi cụ thể. " +"ĐỐI với ỨNG dụng JavaScript hoặc Electron, bạn có thể bắt đầu với:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "" +"Nhìn kìa {ph0} và tìm cách nó xuất dữ liệu. Hiển thị các điểm vào, cuộc gọi " +"và phụ thuộc liên quan, với các vị trí nguồn cho những phát hiện của bạn." + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "Thay thế đường dẫn bằng mục tiêu cục bộ của bạn." + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "Làm cách nào để có được đường dẫn đầy đủ của một thư mục?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} Trong File Explorer, nhấp chuột phải vào thư mục và " +"chọn {ph2}Sao chép dưới dạng đường dẫn{ph3}. TRÊN Windows 10, giữ Shift " +"trong khi nhấp chuột phải." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} trong Finder, nhấp chuột phải vào thư mục, giữ Tùy chọn " +"và chọn {ph2}Sao chép \" ... \" dưới Dạng Tên Đường Dẫn{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Bất kỳ hệ thống:{ph1} kéo thư mục vào cửa sổ đầu cuối và đường dẫn của " +"nó xuất hiện." + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "" +"Trong một thiết bị đầu cuối, đặt dấu ngoặc kép xung quanh một đường dẫn có " +"chứa khoảng trắng." + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "Sử DỤNG CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "" +"Phân tích THƯ mục ỨNG DỤNG JavaScript hoặc Electron hoặc KHO LƯU TRỮ ASAR mà" +" không cần chạy ứng dụng:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "Phân tích ứng dụng tĩnh" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "" +"Thay thế đường dẫn bằng thư mục ứng dụng được trích xuất của bạn hoặc {ph0} " +"tập tin. TRÊN Windows, một đường dẫn như {ph1} hoạt động ở đây." + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "Tôi tìm thấy một ứng dụng ở đâu .tập tin asar?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron ứng dụng thường giữ nó trong một {ph0} thư mục:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "" +"{ph0} macOS :{ph1} {ph2} (nhấp chuột phải vào ứng dụng và chọn {ph3}Hiển Thị" +" Nội Dung Gói{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0} Linux :{ph1} thường xuyên {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "" +"Một số ứng dụng cài đặt ở nơi khác. Tìm kiếm thư mục của ứng dụng cho {ph0}." + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "" +"Kết quả xác định ứng dụng, hiển thị kết nối giữa các mô-đun và cung cấp vị " +"trí nguồn của chúng. Kết nối REA không thể giải quyết được đánh dấu trong " +"kết quả." + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "Nếu bạn muốn một vĩnh viễn {ph0} lệnh trong shell của bạn:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "Cài ĐẶT CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}Tiếp tục VỚI hướng dẫn ứng DỤNG JavaScript{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "Thiết lập phân tích các chương trình mã máy" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "" +"Các chương trình mã máy cần một công cụ phân tích cục bộ. Chọn và định cấu " +"hình MỘT bên dưới, sau đó cung cấp CHO REA tệp thực thi hoặc thư viện của " +"bạn." + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "Chọn một công cụ: Ghidra, Hopper hoặc IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"Sử DỤNG Ghidra 12.1 hiện có.cài đặt x và JDK 21 64 bit trở lên TRÊN Linux " +"hoặc macOS , trên x64 hoặc arm64. Cài ĐẶT Ghidra của bạn cần một trình dịch " +"ngược gốc cho kiến trúc máy chủ của bạn. Đặt đường dẫn trước khi chạy thiết " +"lập:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "Kết nối CÀI ĐẶT Ghidra của bạn" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra kết nối * macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"Thay thế cả hai đường dẫn bằng các cài đặt hiện có của bạn. Thiết lập kiểm " +"tra chúng và ghi lại các cài đặt hợp lệ cho ứng dụng khách đã chọn của bạn. " +"TRÊN Linux arm64, bạn có thể cần xây DỰNG RIÊNG TRÌNH dịch ngược GỐC CỦA " +"Ghidra." + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "Kết NỐI Ghidra TRÊN Windows" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 có hỗ trợ thử nghiệm, chỉ đọc cho các ứng dụng VÀ Dll X86 và x64" +" pe gốc trên các ổ đĩa ntfs cục bộ cố định. Sử DỤNG Ghidra 12.1 hiện có.x " +"cài đặt VÀ 64-bit JDK 21 hoặc mới hơn:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra kết nối * Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "" +"Thay thế hai đường dẫn bằng cài đặt của bạn, sau đó xem lại kế hoạch thiết " +"lập." + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "" +"Kết nối Hopper TRÊN macOS hoặc Linux . Chạy lệnh thiết lập ở trên; nó phát " +"hiện cài đặt hiện có hoặc cung cấp kế hoạch cài đặt để bạn phê duyệt." + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "" +"TRÊN macOS, hoàn THÀNH Hopper ' s lựa chọn chạy đầu tiên của chế độ demo " +"hoặc kích hoạt giấy phép trước khi phân tích không giám sát." + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"CÁC THIẾT LẬP IDA đã được xác minh sử dụng Windows , với đăng ký MCP hiện có" +" cho GUI đính kèm hoặc cơ sở dữ liệu không đầu. PHÂN tích không đầu Linux " +"và macOS vẫn chưa được xác minh." + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "Kết nối ĐĂNG ký IDA MCP HIỆN CÓ" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"Giữ cho máy chủ thượng nguồn hoạt động {ph0}, {ph1} và tùy chọn {ph2} trong " +"một tệp JSON. Một hiện có {ph3} đối tượng với một {ph4} nhập cảnh cũng được " +"chấp nhận. Trỏ REA vào tệp đó trước khi thiết lập:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA kết nối * Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"Hồ sơ đính kèm sử dụng các công cụ legacy 1.4.0 ngược dòng với nhị phân ban " +"đầu đã mở TRONG IDA . Hồ sơ không đầu sử dụng api giám sát cơ sở dữ liệu " +"ngược dòng và đăng ký với {ph0}; xác minh thực sự bao gồm MỘT giám sát VIÊN " +"IDA 9.3 Windows x64. Bác sĩ kiểm tra đăng ký mà không bắt ĐẦU IDA ." + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"Cung CẤP CHO REA đường dẫn thực thi ban đầu, với {ph0} TRONG truy vấn CLI. " +"Đối với một đại lý, bao gồm {ph1} trong môi trường ĐĂNG ký REA và chọn IDA " +"khi mở nhị phân." + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "Đối với THIẾT LẬP Ghidra hiện có, hãy kiểm tra một chức năng với:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "Phân tích chức năng" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "Thay thế {ph0} với tên chức năng hoặc địa chỉ bạn muốn kiểm tra." + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "Cách phân tích các phiên chương trình mã máy hoạt động" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "" +"Mỗi lệnh CLI nhập và phân tích nhị phân, sau đó đóng phiên của nó. Các truy " +"vấn MCP của đại lý của bạn sử dụng lại nhị phân đã nhập trong khi phiên đó " +"đang mở." + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "" +"{ph0}Thực hiện theo phân tích ví dụ về chương trình mã máy{ph1} để xem kết " +"quả hàm dẫn đến một phép tính được phục hồi như thế nào." + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "Nhận trợ giúp" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "Nếu đại lý của bạn không THẤY REA" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "" +"Khởi động lại hoặc kết nối lại máy khách sau khi thiết lập. Kiểm tra KẾT nối" +" REA của NÓ với {ph0}; CHO Codex :" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "Kiểm tra một khách hàng" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "Nếu một nhà cung cấp cần chú ý" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "Kiểm tra nhà cung cấp bạn đang sử dụng. CHO Ghidra :" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "Kiểm tra một nhà cung cấp" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "Báo cáo đưa ra kiểm tra thất bại và một bước tiếp theo được đề xuất." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "" +"{ph0} REA CÂU HỎI THƯỜNG GẶP{ph1}{ph2}Câu trả lời nhanh về cập nhật, đại lý " +"và phân tích.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "" +"{ph0}Chọn một hướng dẫn điều tra{ph1}{ph2}Làm việc ví dụ cho một nhị phân, " +"MỘT ỨNG dụng Electron và một trình duyệt.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "" +"{ph0} GitHub vấn đề{ph1}{ph2}Báo cáo sự cố với lệnh và chẩn đoán.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "" +"{ph0} Cộng ĐỒNG REA{ph1}{ph2}Câu hỏi, điều tra và làm việc trong tiến " +"trình.{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "Cài ĐẶT REA và Thiết Lập Đại lý Mã Hóa Của Bạn" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "" +"Kết nối REA với đại lý mã hóa của bạn hoặc kiểm tra ỨNG dụng JavaScript hoặc" +" Electron cục bộ từ thiết bị đầu cuối. Thiết lập, câu hỏi đầu tiên và hướng " +"dẫn nhà cung cấp bản địa." + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "Sao CHÉP kiểm tra PHIÊN BẢN Node.js" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "Sao CHÉP lệnh cài ĐẶT Node.js CHO Windows" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "Sao Chép Lệnh Chính sách Thực Thi PowerShell" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "Sao CHÉP lệnh cài ĐẶT Homebrew Node.js" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "Sao chép lệnh cài đặt fnm CHO macOS" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "Sao CHÉP Node.js 24 lệnh CHO macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "Sao chép lệnh cài đặt fnm CHO Linux" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "Sao CHÉP Node.js 24 lệnh CHO Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA bắt đầu hướng dẫn" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "Sao CHÉP lời nhắc cài ĐẶT REA" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "Sao chép lệnh thiết lập tác nhân" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "Sao CHÉP lệnh PHÂN tích JavaScript" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "Sao CHÉP lệnh cài ĐẶT CLI" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "Sao chép kết nối ghidra · macos / linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "Sao CHÉP Ghidra kết nối CHO Windows PowerShell" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "Sao CHÉP IDA kết nối CHO Windows PowerShell" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "Sao chép lệnh phân tích chức năng gốc" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "Sao chép lệnh chẩn đoán khách hàng" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "Sao chép lệnh chẩn đoán nhà cung cấp" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}Nhà{ph1} / {ph2}Hướng dẫn{ph3} / Quan sát trình duyệt" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "Xem những gì xảy ra{ph0}khi bạn nhấp vào." + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "" +"Sử dụng một ứng dụng trình duyệt nhỏ để kết nối một hành động, yêu cầu mạng " +"của nó và JavaScript xây dựng tải xuống." + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "Trong hướng dẫn này" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Ví dụ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}Mở trình duyệt{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Hỏi đại lý của bạn{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}Chụp TỪ CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}Đọc yêu cầu và tập lệnh{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "Điều gì xảy ra khi bạn nhấp Vào Xuất?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"Các {ph0}Ghi chú ví dụ trình duyệt{ph1} có một {ph2}Xuất ghi chú{ph3} nút. " +"Nhấp vào nó tải {ph4}, định dạng hai ghi chú DƯỚI DẠNG CSV và bắt đầu tải " +"xuống." + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "Từ nhấp VÀO TẢI XUỐNG CSV" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "" +"{ph0}01 * Bạn{ph1}{ph2}Nhấp Vào Xuất ghi chú{ph3}{ph4}Thực hiện hành động " +"trong trình duyệt của bạn trong khi chụp đang chạy.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "" +"{ph0}02 * REA {ph1}{ph2}Ghi lại yêu cầu{ph3}{ph4}Chụp URL yêu cầu, trạng " +"thái phản hồi và cấu trúc JSON từ trang đã chọn.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 * đại lý của Bạn{ph1}{ph2}Đọc mã xuất{ph3}{ph4}Kết nối yêu cầu quan " +"sát được với {ph5} trong {ph6}.{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "Bắt đầu chụp trước khi nhấp Vào xuất ghi chú." + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "MỞ Chrome với gỡ lỗi từ xa" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "" +"Mở Ví Dụ Ghi chú được lưu trữ với cấu hình trình duyệt riêng biệt và cổng gỡ" +" lỗi cục bộ. TRÊN Linux :" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "Khởi động trình duyệt ví dụ" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "Sao chép" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "" +"Sử dụng đường dẫn thực thi của trình duyệt đã cài đặt của BẠN TRÊN macOS " +"hoặc Windows . BẠN có thể thay THẾ url trang bằng một trang khác mà bạn muốn" +" kiểm tra." + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "" +"REA kết nối với trình duyệt hiện có này. Bạn giữ quyền kiểm soát trang, thực" +" hiện hành động và đóng trình duyệt khi hoàn tất." + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "Yêu cầu đại lý của bạn xem một hành động" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}Sử dụng REA để kiểm tra trang này trong khi tôi nhấp Vào " +"xuất ghi chú. NÓ đưa ra yêu cầu gì và CSV được xây dựng như thế " +"nào?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "" +"Ví dụ nhắc nhở. Cung cấp cho đại lý của bạn điểm cuối gỡ lỗi, {ph0}, VÀ url " +"trang. Hãy để nó bắt đầu chụp trước khi bạn nhấp vào." + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "" +"Đại lý của bạn phát hiện ra mục tiêu trang, bắt đầu một cửa sổ quan sát và " +"đọc bằng chứng kết quả. Sau đó, nó có thể kiểm tra tập lệnh đằng sau xuất " +"khẩu." + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "Hoặc chụp từ thiết bị đầu cuối" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "Tìm ID mục tiêu của trang:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "Tìm trang" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "" +"Chọn mục tiêu với Url Ví dụ Ghi chú. Thay thế {ph0} BÊN dưới VỚI ID của NÓ, " +"sau đó chạy:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "Chụp mười giây tiếp theo" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "" +"Để lệnh kết nối trong vài giây, sau đó nhấp vào {ph0}Xuất ghi chú{ph1} trong" +" trình duyệt đó. Kết quả đến sau khi cửa sổ quan sát kết thúc." + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "" +"Kết quả đã chụp bao gồm trang đã chọn, hoạt động mạng trong cửa sổ đó và " +"hình dạng của phản hồi JSON. Yêu cầu trước đó là bên ngoài chụp này." + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "Đọc yêu cầu và xuất tập lệnh" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "Được ghi BẰNG REA 4.1.0 trên Ví Dụ Ghi chú cục Bộ" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "Thực tế bị bắt" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "Giá trị" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "Yêu cầu" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "Phản hồi" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "Yêu cầu người khởi xướng" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} * kịch bản" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "Cấu trúc phản hồi" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} với {ph1} và {ph2} lĩnh vực" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "Đọc các tập lệnh đã tải" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "" +"Yêu cầu xác định nguồn dữ liệu và BẢN ghi REA {ph0} là người khởi xướng nó. " +"Đọc nguồn tập lệnh đã chụp để xem dữ liệu được sử dụng như thế nào:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "" +"Việc tải xuống được xây dựng trong trang bằng phản hồi JSON. BƯỚC ĐỊNH DẠNG " +"CSV xuất phát từ tập lệnh; chụp mạng thiết lập rằng nhấp chuột này được yêu " +"cầu {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "" +"Tìm tập lệnh yêu cầu {ph0}. Làm thế nào để nó thoát khỏi tiêu đề chứa dấu " +"phẩy hoặc dấu ngoặc kép?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "" +"ĐỐI với ỨNG DỤNG JavaScript hoặc Electron đã cài đặt, hãy tiếp tục với " +"{ph0}quy trình làm việc ứng dụng{ph1} để theo dõi các tệp và xử lý ranh " +"giới." + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "Phân tích Trình duyệt Và Mạng-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "" +"Quan sát Một Ghi chú xuất KHẨU VỚI REA : chọn một trang trình duyệt, chụp " +"một nhấp chuột, kiểm tra các yêu cầu và làm theo các kịch bản xuất khẩu." + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "Quan sát trình duyệt" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "Sao chép bắt đầu trình duyệt ví dụ" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "Sao chép ví dụ dấu nhắc" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "Sao chép tìm trang" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "Sao chép chụp mười giây tiếp theo" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "Sao chép đọc các tập lệnh đã tải" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}Nhà{ph1} / Hướng dẫn" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REA hướng dẫn." + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "" +"Phân tích chức năng gốc, xuất Electron hoặc yêu cầu trình duyệt. Mỗi hướng " +"dẫn bao gồm một lời nhắc, mã và kết quả." + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "Điều tra đầu tiên" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "Thiết LẬP REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "Kết nối đại lý mã hóa của bạn hoặc SỬ dụng REA từ thiết bị đầu cuối." + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "Bắt đầu VỚI REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "Chương trình mã máy" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "Khôi phục tính toán vị trí âm thanh trái/phải" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "" +"Bắt đầu với MỘT TRÒ CHƠI Windows thực thi. Kiểm tra hướng dẫn, theo dõi " +"người gọi, đọc hằng Số và kiểm Tra C đã khôi Phục." + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "Phân tích hướng dẫn chương trình mã máy" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "Thực HIỆN theo một CSV xuất KHẨU" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "" +"Một Ứng dụng Ghi chú nhỏ trải rộng một tính năng trên trình kết xuất, tải " +"trước và quy trình chính. SỬ DỤNG REA để kết nối api, KÊNH IPC và trình ghi " +"tệp." + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript & Electron hướng dẫn" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "" +"Đối với một ứng dụng đóng gói lớn hơn, hãy làm theo {ph0} Cầu clipboard CỦA " +"Notion{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "Hành vi trình duyệt" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "Quan sát một cú nhấp chuột" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "" +"Mở Một Ví Dụ Ghi chú làm việc, chụp yêu cầu xuất và tìm mã biến phản hồi của" +" nó thành tải xuống." + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "Hướng dẫn quan sát trình duyệt" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "Hướng Dẫn kỹ thuật đảo ngược-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "" +"Tìm HIỂU REA thông qua các ví dụ làm việc ngắn: tính toán gốc, xuất Electron" +" CSV và yêu cầu trình duyệt." + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}Nhà{ph1} / {ph2}Hướng dẫn{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "Theo dõi Electron {ph0} CSV xuất khẩu." + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "" +"Thực hiện theo một nút bấm từ api trang, THÔNG qua Electron IPC, ĐẾN TRÌNH " +"ghi tệp CSV." + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "Trong hướng dẫn này" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Ví dụ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Hỏi đại lý của bạn{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}Theo dõi mã xuất{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}Hãy thử ví dụ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}Kiểm TRA NHÀ văn CSV{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "\"Xuất ghi chú\" đi đâu?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"Hướng dẫn này sử dụng MỘT ỨNG dụng Electron nhỏ. Nhấp chuột {ph0}Xuất ghi " +"chú{ph1} gọi MỘT API trong trang, đi vào quy trình chính và VIẾT CSV . Hành " +"vi được trải rộng trên một số tệp." + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "XUẤT CSV qua CÁC quy TRÌNH Electron" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "" +"{ph0}Trình kết xuất → tải trước{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} gọi API được " +"hiển thị bởi {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "" +"{ph0}Giữa các quy trình{ph1}{ph2}{ph3}{ph4}{ph5}Tải trước gọi một KÊNH IPC: " +"một thông báo được đặt tên cho quy trình chính.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "" +"{ph0}Quy trình chính{ph1}{ph2}Một trình xử lý xuất khẩu{ph3}{ph4}{ph5} xử lý" +" kênh đó và gọi CHO NHÀ văn CSV.{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} định dạng các ghi chú → {ph1} viết {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "" +"REA khớp với lệnh GỌI IPC theo nghĩa đen với trình xử lý của NÓ và xác định " +"API được hiển thị. Đường dẫn được suy ra từ mã; chụp thời gian chạy có thể " +"kiểm tra những gì thực thi." + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "Hỏi VỀ xuất CSV" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "" +"{ph0}Kết nối đại lý CỦA BẠN VỚI REA {ph1} và cung cấp cho nó thư mục ứng " +"dụng hoặc TỆP ASAR:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "Sao chép" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ DỤNG REA để tìm những gì xảy ra khi tôi xuất ghi chú " +"trong ứng dụng này. CSV được tạo ở đâu?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "" +"Ví dụ nhắc nhở. Bao gồm đường dẫn tuyệt đối đến thư mục ứng dụng hoặc {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "" +"REA đọc các tệp ứng dụng và xây dựng bản đồ các điểm vào, mô-đun và ranh " +"giới quy trình. Đại lý của bạn sử dụng bản đồ đó để thu hẹp cuộc điều tra về" +" tính năng xuất." + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "Theo dõi mã xuất" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "Trang gọi MỘT API nhỏ" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "" +"Trang biết tên phương thức. Việc triển khai sống trong tải trước, điều này " +"cho thấy nó với trình kết xuất." + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "" +"Hồ SƠ REA {ph0} và kênh theo nghĩa đen {ph1}. Nó ghép nối lời gọi đó với " +"trình xử lý khớp duy nhất trong quy trình chính." + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "" +"Đọc trình xử lý trả lời câu hỏi ban đầu: {ph0} định dạng các ghi chú và quá " +"trình chính viết {ph1} vào Thư mục Tải xuống của người dùng." + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "" +"Được GHI LẠI bởi REA 4.1.0 trên ví dụ có thể tải xuống bên dưới. Vị trí " +"nguồn đi kèm VỚI CÁC PHÁT hiện API, kênh và trình xử lý." + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "Tự phân tích ví dụ" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}Tải xuống VÍ DỤ ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "Duyệt qua sáu tệp nguồn" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "Phân tích ứng dụng tĩnh" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "" +"Thay thế đường dẫn bằng thư mục bạn đã giải nén. Bạn sẽ tìm thấy một KÊNH " +"IPC và một trình xử lý phù hợp trong {ph0}. Vị trí nguồn đang ở {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"Đối với ứng dụng của riêng bạn, hãy sử dụng cùng một lệnh với thư mục HOẶC " +"đường DẪN ASAR của nó. Một tác nhân có thể theo một chuỗi ký tự, TÊN API " +"hoặc KÊNH IPC VỚI CÁC CÔNG cụ truy tìm tính năng CỦA REA." + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "Kiểm TRA NHÀ văn CSV" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "" +"Theo dõi {ph0} để xử lý của nó. Đầu vào nào đạt đến trình ghi CSV và điều gì" +" sẽ xảy ra nếu việc ghi tệp không thành công?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "" +"Sử dụng các vị trí nguồn để kiểm tra các chi tiết đó. Tên kênh được tính " +"toán và trình xử lý mơ hồ có thể vẫn chưa được giải quyết; các quan sát thời" +" gian chạy cung cấp cho bạn một cách khác để điều tra chúng." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "" +"{ph0}Theo Notion ' s clipboard cầu{ph1} {ph2}Áp dụng cách tiếp cận tương tự " +"cho ỨNG dụng Electron đóng gói.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "" +"{ph0}Quan sát xuất trình duyệt{ph1}{ph2}Chụp một cú nhấp chuột thực sự và " +"xem yêu cầu nào nó thực hiện.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "" +"{ph0}Thực hiện theo một chức năng gốc{ph1}{ph2}Tiếp tục vào nhị phân khi một" +" tính năng phụ thuộc vào mã gốc.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "PHÂN Tích JavaScript và Electron — REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "" +"Theo Dõi Một Ghi CHÚ CSV xuất thông qua TRÌNH kết xuất API, tải trước và " +"TRÌNH xử lý IPC với REA . Bao gồm các tệp ví dụ có thể tải xuống và kết quả " +"phân tích đã được xác minh." + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "Sao chép ví dụ dấu nhắc" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "Sao chép phân tích ứng dụng tĩnh" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "" +"{ph0}Nhà{ph1} / {ph2}Hướng dẫn{ph3} / Phân tích các chương trình mã máy" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "Khôi PHỤC DX-Ball ' s{ph0}tính toán vị trí âm thanh trái/phải." + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "" +"Kiểm Tra các hướng dẫn ban Đầu, xác Định đầu vào và hằng số, sau Đó kiểm Tra" +" C đã khôi Phục." + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "Trong hướng dẫn này" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}Ví dụ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Hỏi đại lý của bạn{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}Đọc KẾT QUẢ REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}Phục hồi và kiểm tra{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}Sử dụng nhị phân của riêng bạn{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "Tính toán trái / phải định vị âm thanh stereo" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "" +"TRONG DX-Ball, một cú đánh bằng gạch cung cấp vị trí màn hình nằm ngang. Mã " +"âm thanh biến nó thành giá trị xoay trái/phải." + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"Chức năng bắt đầu, {ph0}, có một kết quả dịch ngược ngắn: một cuộc gọi đến " +"{ph1}. REA cũng trả về các hướng dẫn và người gọi của nó, cung cấp cho tác " +"nhân một cách để điều tra số học bị thiếu." + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "Mới đối với các điều khoản này?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "" +"{ph0}Hướng dẫn:{ph1} các bước bộ xử lý chạy, được hiển thị ở dạng có thể đọc" +" được như {ph2} hoặc {ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "" +"{ph0}Kết quả dịch ngược / mã giả:{ph1} nỗ lực của một công cụ phân tích để " +"biến các hướng dẫn trở lại thành mã C-like. Nó có thể bỏ lỡ các bộ phận, như" +" trong ví dụ này." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "" +"{ph0}Người gọi:{ph1} một hàm gọi cái này. Nó cho thấy những giá trị nào được" +" truyền vào." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "" +"{ph0}Địa chỉ:{ph1} một vị trí trong chương trình, được viết bằng hệ thập lục" +" phân, chẳng hạn như {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "" +"{ph0}Hằng số:{ph1} số cố định được lưu trữ trong chương trình, đọc như byte " +"thô và giải mã." + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "Ba bằng chứng, một phép tính" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "" +"{ph0}01 * Hướng dẫn{ph1}{ph2}Một đầu vào số nguyên{ph3}{ph4}Một stack read " +"cung cấp giá trị được sử dụng bởi các hướng dẫn dấu phẩy động.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "" +"{ph0}02 * Người Gọi{ph1}{ph2}Tọa độ màn hình{ph3}{ph4}Người gọi gạch-hit đi " +"{ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 * Byte Dữ liệu{ph1}{ph2}Các hằng số số{ph3}{ph4}Tham chiếu byte giải" +" mã để {ph5}, {ph6} và một giá trị quy mô.{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "" +"REA cung cấp các hướng dẫn, mối quan hệ cuộc gọi chức năng và byte. Các đại " +"lý giải thích chúng cùng nhau." + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "Hỏi về hành vi" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "" +"Sau {ph0}kết NỐI REA với đại lý của bạn{ph1} và {ph2}thiết lập phân tích " +"công cụ chương trình mã máy{ph3}, cung cấp thực thi cục bộ và một câu hỏi:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "Tôi nên sử dụng công cụ phân tích nào?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA cần một trong số này để đọc các chương trình gốc:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} (macOS hoặc Linux ): THIẾT lập CỦA REA phát hiện nó hoặc " +"đề nghị cài đặt nó. TRÊN macOS, mở Hopper một lần và chọn chế độ demo hoặc " +"kích hoạt giấy phép trước khi phân tích đầu tiên của bạn." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} (macOS hoặc Linux ; thử nghiệm TRÊN Windows ): miễn phí, " +"nhưng cần Ghidra 12.1 hiện có.x cài đặt và 64-bit JDK 21 hoặc mới hơn." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "" +"{ph0} IDA {ph1} (Windows): đối với THIẾT lập IDA hiện có với đăng ký MCP." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "" +"Xem {ph0}Thiết lập phân tích các chương trình mã máy{ph1} đối với các bước." + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "Sao chép" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ dụng REA để tìm CÁCH DX-Ball tính toán định vị âm thanh " +"nổi. Giải thích tính toán và hiển thị mã.{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"Ví dụ nhắc nhở. Cung cấp cho đại lý của bạn đường dẫn ĐẾN tệp THỰC thi DX-" +"Ball 1.07 cục BỘ của bạn. REA không bao gồm DX-Ball , vì vậy hãy sử dụng " +"bản sao của riêng bạn hoặc hỏi cùng một loại câu hỏi về một chương trình " +"Windows nhỏ khác mà bạn có." + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "Làm cách nào để có được đường dẫn đầy đủ của tệp?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} Trong File Explorer, nhấp chuột phải vào tệp và chọn " +"{ph2}Sao chép dưới dạng đường dẫn{ph3}. TRÊN Windows 10, giữ Shift trong khi" +" nhấp chuột phải." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "" +"{ph0} macOS :{ph1} trong Finder, nhấp chuột phải vào tệp, Giữ Tùy chọn và " +"chọn {ph2}Sao chép \" ... \" dưới Dạng Tên Đường Dẫn{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "" +"{ph0}Bất kỳ hệ thống:{ph1} kéo tệp vào cửa sổ đầu cuối và đường dẫn của nó " +"xuất hiện." + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "Đọc KẾT QUẢ REA" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "Đọc đầu vào" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "" +"Các hướng dẫn tải một đối số nguyên và chuyển đổi nó cho số học dấu phẩy " +"động. Đây là đầu vào vắng mặt từ chế độ xem mã giả đầu tiên." + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "Theo dõi người gọi" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "" +"REA xác định người gọi gạch-hit. Các hướng dẫn trước đó của nó nhân tọa độ " +"gạch với 30; thêm {ph0} (20) cho vị trí màn hình của gạch." + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "Đọc các hằng số được tham chiếu" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "" +"Số học tham chiếu các địa chỉ này. Đọc các byte cung cấp các giá trị thực " +"tế; thứ tự hướng dẫn cho tác nhân biết cách chúng được sử dụng." + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "Viết và kiểm tra chức năng đã khôi phục" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "" +"Với tỷ lệ 1.0, vị trí màn hình 0, 320 và 640 bản đồ đến -500, 0 và 500 trước" +" khi chuyển đổi số nguyên. Tính toán đặt trung tâm của màn hình ở trung tâm " +"của trường âm thanh nổi." + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "" +"Tác nhân đã sử dụng REA phát hiện của để viết C. Kiểm tra Riêng biệt so sánh" +" 3.205 đầu vào với hàm x86 ban đầu và sao chép tất cả 63 byte được biên dịch" +" của hàm hoàn chỉnh." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}Xem điều tra đầy đủ và so sánh assembly-To-c{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "Hãy thử nó với nhị phân của riêng bạn" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}Kết nối phân tích nhà cung cấp chương trình mã máy{ph1}, sau đó cung " +"cấp cho đại lý của bạn một tệp thực thi hoặc thư viện cục bộ và một tính " +"năng để điều tra. Các câu hỏi bắt đầu hữu ích bao gồm \" tệp này được phân " +"tích cú pháp Như thế nào?\"hoặc\" chức năng nào xử lý hành động menu này?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "" +"Nếu bạn đã biết tên hoặc địa chỉ chức năng, bạn có thể truy vấn nó từ thiết " +"bị đầu cuối. Để CÀI ĐẶT Ghidra được định cấu HÌNH:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "Phân tích chức năng" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"Thay thế đường dẫn mục tiêu và {ph0} với tên chức năng hoặc địa chỉ của " +"riêng bạn. Mỗi LẦN NHẬP lệnh GỌI CLI và phân tích nhị phân, sau đó đóng " +"phiên của NÓ. Các truy vấn MCP của đại lý của bạn sử dụng lại nhị phân đã " +"nhập trong khi phiên đó đang mở." + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "" +"Đọc mã giả cùng với hướng dẫn và tài liệu tham khảo. Khi một kết quả để lại " +"một cuộc gọi hoặc giá trị chưa được giải quyết, hãy sử dụng vị trí đó làm " +"câu hỏi tiếp theo." + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "Phân Tích nhị phân gốc-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "" +"Khôi phục tính toán gốc VỚI REA : kiểm Tra hướng Dẫn, theo dõi người gọi, " +"đọc hằng số và kiểm Tra Tái Tạo C." + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "Phân tích các chương trình mã máy" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "Sao chép ví dụ dấu nhắc" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "Sao chép phân tích chức năng" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "Thiết LẬP REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}Thiết LẬP REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}RE LÀ GÌ?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}REA giúp gì?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}Chơi Dinosaur miễn phí{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}Máy tính{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}Thử REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}Tìm hiểu sâu hơn{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}Trợ giúp & phản hồi{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}Cộng đồng{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "Kỹ thuật đảo ngược, với đại lý mã hóa của bạn" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "Tìm hiểu cách{ph0}phần mềm hoạt động." + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "" +"REA cung cấp công cụ để trợ lý lập trình AI của bạn kiểm tra chương trình và" +" giải thích cách nó hoạt động." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "ĐÃ BIẾT LẠI? {ph0}Chuyển đến hướng dẫn phân tích →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "Bạn muốn đi sâu hơn? {ph0}Đọc Blog →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "Dán lời nhắc này vào trợ lý lập trình AI của bạn:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "Sao chép" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "Hoặc chạy lệnh này trong terminal:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "Xem và chấp thuận kế hoạch cài đặt, rồi khởi động lại trợ lý." + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "Kỹ thuật đảo ngược là gì?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "" +"Tìm hiểu cách phần mềm hoạt động bằng cách {ph0}kiểm tra chính chương trình " +"đó.{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "" +"Mục tiêu: hiểu một tính năng đủ tốt để {ph0}giải thích nó{ph1}, {ph2}thay " +"đổi nó{ph3} hoặc {ph4}xây dựng lại nó.{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "Trước khi dùng REA · Bạn {ph0}tự điều tra{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} Giải mã chi nhánh" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} Theo dõi cuộc gọi" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} Khôi phục quy tắc" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}Ban đầu x64 * lựa chọn hướng dẫn{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 * chi Nhánh Nào?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "" +"“{ph0}0x5b? 0x5c?{ph1} Hai bước nhảy đến cùng một nơi. Những nhà khai thác " +"này là gì?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "Tra Cứu id lệnh, sau đó gắn nhãn nhánh." + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "Chia ÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "Nhân ×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · Các hàm được gọi làm gì?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "" +"\"100 là rõ ràng. Các cuộc gọi chỉ là địa chỉ. {ph0}Cái nào phân chia? Giá " +"trị nào đi vào?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "Kiểm tra các chức năng trợ giúp và theo dõi các giá trị được lưu trữ." + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "Chia" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 * quy tắc Là gì?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "" +"\"Con đường này nhân với đầu vào khác. Vậy {ph0}10% có nghĩa là 10% của " +"200{ph1} sau +.”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "Đặt tên cho các toán hạng và kiểm tra cả hai đường dẫn toán tử." + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "Lý luận chuyên gia minh họa" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "" +"{ph0}Bạn giải mã các hướng dẫn, làm theo các cuộc gọi hàm và xây dựng lại " +"tính toán.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "Với REA · Bạn hỏi {ph0}trợ lý AI{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "Chỉ một lời nhắc." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "Hỏi trợ lý {ph0}bằng ngôn ngữ thông thường.{ph1}" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ví dụ nhắc · Máy tính" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "Câu trả lời ví dụ · dựa trên những phát hiện" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "Sau +, nút % mất {ph0}một tỷ lệ phần trăm của số đầu tiên.{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA cung cấp" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "Hướng dẫn của trình xử lý, mã dịch ngược và các cuộc gọi." + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "Trợ lý giải thích" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "Chi nhánh nào áp dụng, những gì nó tính toán và cách xây dựng lại nó." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "" +"Lắp ráp được chọn từ DLL Máy tính đã cài đặt. Những suy nghĩ và trả lời minh" +" họa những phát hiện. {ph0}Tiếp tục với ví dụ máy tính ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "" +"{ph0}Hãy thử hai ví dụ.{ph1} Thay đổi tốc độ của trò chơi, sau đó quay lại " +"Máy tính và xây dựng lại nút % của trò chơi." + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "Ví dụ 01 * Chrome ' s trò chơi khủng long" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "Vì sao khủng long chạy nhanh dần?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "Mục tiêu" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "Xây dựng lại trò chơi với {ph0}tốc độ điều chỉnh.{ph1}" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "Tại sao kỹ sư đảo ngược nó?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "" +"Để tái tạo gia tốc của nó, chúng ta cần {ph0}quy tắc trong trò chơi đang " +"chạy{ph1}: nó bắt đầu nhanh như thế nào, nó tăng bao nhiêu và khi nào nó " +"dừng lại." + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "Chơi bản dựng lại" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "Chơi" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "Nhảy ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "Chơi lại" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "Tốc độ" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "Sử dụng quy tắc tăng tốc đã khôi phục" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "Quy tắc ban đầu: bắt đầu từ 6, sau đó tăng lên 13." + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "" +"Di chuyển thanh trượt để thiết lập tốc độ của riêng bạn. Không gian Hoặc " +"Nhảy xóa một cây xương rồng." + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "" +"Cho PHÉP JavaScript để chơi tái thiết. Mã và giải thích ở trên vẫn có thể " +"đọc được." + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA trả về" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "" +"{ph0}Kịch bản thực sự chạy trong trang.{ph1} Tác nhân đọc chức năng cập nhật" +" và cài đặt tốc độ của nó, sau đó sử dụng quy tắc đó trong một trò chơi mới." + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ví dụ nhắc · Trò Chơi Khủng Long" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ DỤNG REA để kiểm tra trò chơi khủng long này. Tại sao nó " +"nhanh hơn? Hiển thị quy tắc tốc độ, sau đó xây dựng một phiên bản nhỏ với " +"tốc độ có thể điều chỉnh.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "" +"Mục tiêu được kiểm tra: {ph0}PHIÊN bản trình duyệt CÓ NGUỒN GỐC TỪ Chromium " +"của wayou{ph1}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "" +"{ph0}Bắt đầu từ 6.{ph1} Thêm {ph2}0.001{ph3} mỗi bản cập nhật mà không có va" +" chạm, trong khi tốc độ thấp hơn {ph4}13{ph5}." + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "Mở phòng thí nghiệm tốc độ →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "Mỗi phần làm gì" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "" +"{ph0}01 * REA {ph1}{ph2}Đọc kịch bản của trò chơi đang chạy{ph3}{ph4}Trả lại" +" mã và cài đặt thực tế của nó cho tác nhân.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 * đại lý của Bạn{ph1}{ph2}Xây dựng lại quy tắc, thêm một điều " +"khiển{ph3}{ph4}Sử dụng khả năng tăng tốc phục hồi trong một trò chơi nhỏ với" +" một thanh trượt tốc độ.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "" +"{ph0}03 * Bạn{ph1}{ph2}Thay đổi tốc độ và chơi{ph3}{ph4}Hãy thử tăng tốc ban" +" đầu, sau đó chọn tốc độ của riêng bạn.{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "Xem kịch bản, kiểm tra và cách thử phân tích" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "" +"REA đã kiểm tra PHIÊN bản TRÌNH duyệt HTTP thông qua kết nối gỡ lỗi cục bộ " +"và trả về đã tải {ph0}, bao gồm cả nguồn và tiêu hóa của nó." + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"Chúng tôi đã gọi chức năng cập nhật của trò chơi gốc trong kiểm tra trình " +"duyệt được kiểm soát, với các chướng ngại vật và lập lịch tự động bị vô hiệu" +" hóa. Sau 4.000 bản cập nhật, tốc độ là 10.0; sau 10.000, nó là 13.0, được " +"làm tròn thành một số thập phân." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "" +"Trò chơi nhỏ mới giữ quy tắc tốc độ đó. Bản vẽ, nhảy và mã va chạm của nó là" +" một triển khai giảng dạy nhỏ. {ph0}Mở phòng thí nghiệm{ph1} để xem mã mới " +"và chạy kiểm tra tốc độ tương tự." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"Để tự mình kiểm tra mục tiêu, hãy làm theo {ph0}các bước kết nối trình " +"duyệt{ph1} sử dụng {ph2}trang khủng long{ph3}. Cung cấp cho đại lý CỦA bạn " +"URL trang đó và điểm cuối gỡ lỗi cục bộ của bạn, sau đó sao chép lời nhắc ở " +"trên." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "" +"{ph0}Kiểm tra mã tốc độ{ph1} · {ph2} Tác GIẢ Chromium * giấy phép BSD{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "Ví dụ 02 * Windows Máy Tính" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "Dựng lại nút % của Máy tính." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "Xây dựng một máy tính nhỏ xử lý {ph0}cả + và × chính xác.{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "" +"Nút tương tự sử dụng {ph0}các quy tắc khác nhau sau + và ×.{ph1} Chúng tôi " +"kiểm tra ứng dụng đã cài đặt để tìm số phần trăm được áp dụng." + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "Hãy thử tính toán" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "Đặt lại" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "10% của 200 = 20. Sau đó, 200 + 20 = 220." + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "Minh họa tương tác của quy tắc phần trăm được kiểm tra." + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "" +"{ph0}Một nhánh chia cho 100. Người kia cũng nhân với số đầu tiên.{ph1} Tác " +"nhân sử dụng cả hai để tạo lại nút%." + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "Đối với ví dụ này, {ph0} và {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ví dụ nhắc · Xây dựng lại nút %" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ dụng REA để kiểm tra NÚT % CỦA MÁY TÍNH Windows. Khôi " +"phục các quy tắc sau + và ×, sau đó xây dựng một máy tính nhỏ sử dụng cả " +"hai.{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "Với +" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}Lấy 10% số đầu tiên.{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "Với ×" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}Biến 10% thành 0,1.{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "Từ ứng dụng đã cài đặt đến nút % hoạt động" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 * REA đọc thư viện{ph1}{ph2}Trả lại mã % handler{ph3}{ph4}Hàm kiểm " +"tra toán tử và sử dụng hằng số {ph5}.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 * đại Lý của Bạn giải thích nó{ph1}{ph2}Giải thích và tái tạo các " +"quy tắc{ph3}{ph4}Kiểm tra chéo nhánh với Nguồn Của Microsoft, sau đó thử + " +"và × ở trên.{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "Xem mã thực và câu trả lời đã được kiểm tra như thế nào" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"KIỂM tra VỚI REA 4.1.0: Windows Máy tính 11.2508.4.0, x64. Tóm tắt có thể " +"đọc được sử dụng tên từ Nguồn công Khai Của Microsoft để giải thích chi " +"nhánh đã khôi phục." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "" +"{ph0}Thực hiện tỷ lệ phần trăm{ph1} · {ph2}Trường hợp thử nghiệm của " +"Microsoft{ph3} · {ph4}Hướng dẫn thiết lập gốc{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "Cuộc điều tra đầu tiên của bạn" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "Hãy thử REA trên một ứng dụng nhỏ." + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "" +"Tải Xuống Ví Dụ Ghi Chú của chúng tôi, theo dõi XUẤT CSV của NÓ và kiểm tra " +"một đầu vào đã thay đổi." + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "Hãy thử ví dụ hướng dẫn" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "Muốn tìm hiểu sâu hơn?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"Nói với đại lý của bạn những gì bạn muốn hiểu hoặc xây dựng. VỚI REA, bạn có" +" thể làm việc cùng nhau trên bất cứ điều gì từ {ph0}nhân bản trang web " +"này{ph1} để {ph2}xây dựng lại một trò chơi từ thực thi của nó.{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ví dụ nhắc * Trang Web" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "Vâng, cái này." + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Ví dụ nhắc · Tái Thiết Trò chơi" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ dụng REA để xây dựng lại trò chơi này từ thực thi của nó." +" Khôi phục logic trò chơi Trong C và kiểm tra nó so với bản " +"gốc.{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}Xem nghiên cứu điển hình DX-Ball →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "Đối với các bước thiết lập và phân tích, hãy chọn mục tiêu của bạn:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "Chương trình mã máy" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "" +"Kiểm tra các hàm, chuỗi, tham chiếu và mối quan hệ gọi hàm trong tệp thực " +"thi và thư viện." + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "Phân tích hướng dẫn chương trình mã máy" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript & Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "" +"Các mô-đun bản đồ, tuyến ĐƯỜNG, IPC và các phụ thuộc gốc từ thư mục ứng dụng" +" hoặc KHO LƯU trữ ASAR." + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "Quy trình làm việc ứng dụng" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "Hoạt động trình duyệt và thời gian chạy" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "" +"Nắm bắt các trình duyệt được lựa chọn hoặc quá trình hoạt động, sau đó so " +"sánh các kết quả trên chạy." + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "Hướng dẫn quan sát trình duyệt" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "Bạn có câu hỏi?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}Đọc CÂU hỏi THƯỜNG gặp{ph1}, {ph2}trò chuyện VỚI CHÚNG TÔI TRÊN Discord" +" {ph3}, hoặc {ph4}mở sự cố GitHub{ph5} đối với lỗi và yêu cầu tính năng." + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "Tham gia cộng đồng" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "" +"Chia sẻ điều tra và nhận trợ giúp từ NHỮNG NGƯỜI dùng REA khác TRÊN Discord " +". Theo DÕI REA Trên X để cập nhật dự án." + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA-Kỹ Thuật Đảo ngược Cho Đại Lý Mã Hóa Của Bạn" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "" +"Ứng dụng kỹ sư đảo ngược, nhị phân và hành vi trình duyệt với tác nhân mã " +"hóa của bạn. Làm theo hướng dẫn rõ ràng và thử các ví dụ tương tác VỚI REA ." + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "Sao CHÉP lời nhắc cài ĐẶT REA" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "Sao chép lệnh thiết lập" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "Thực hiện theo phân tích máy tính thủ công" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "Sao chép câu hỏi tỷ lệ phần Trăm máy Tính" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "" +"Khủng long mini-game. Sử dụng Nút Nhảy hoặc Nhấn Không gian trong khi trò " +"chơi được tập trung." + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "Sao chép dấu nhắc phân tích khủng long" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "Chọn tính toán" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "Sao chép lời nhắc phân tích máy tính" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "Sao chép lời nhắc dự án trang web" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "Sao chép lời nhắc tái thiết trò chơi" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}Nhà{ph1} / {ph2}Giới thiệu{ph3} / Android" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "Nghiên cứu trường hợp * Aegis Authenticator" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "Làm thế nào để một authenticator{ph0}tạo mã đăng nhập?" + +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "" +"Một mã gồm sáu chữ số thay đổi sau mỗi 30 giây. SỬ DỤNG REA để tìm phép tính" +" Trong ANDROID APK , sau đó xây dựng lại nó bằng đồng hồ bạn có thể điều " +"khiển." + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 * Android * PHÁT HÀNH CHÍNH THỨC APK * 6.9 MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "Xem Aegis TRÊN GitHub" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "TỪ APK đến mã bạn có thể sao chép" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 * Xác định vị trí các tính năng{ph1}{ph2}3.077 lớp → phương pháp " +"tạo{ph3}{ph4} REA tìm kiếm gói và theo dõi mã được sử dụng bởi các hành động" +" hiển thị và sao chép.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 * Đọc tính Toán{ph1}{ph2}Thời gian + khóa tài khoản → sáu chữ " +"số{ph3}{ph4} REA trả về các phương thức và mặc định. Các đại lý giải thích " +"cách họ phù hợp với nhau.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 * Xây dựng lại và kiểm tra{ph1}{ph2}Thay đổi đồng hồ. Xem " +"mã.{ph3}{ph4}Một bản demo trình duyệt mới tái tạo quy tắc và kiểm tra nó đối" +" với các trường hợp tham chiếu công khai.{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "Trong trường hợp này nghiên cứu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}Hỏi đại lý của bạn{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}Hãy thử trình tạo mã{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}Tìm mã VỚI REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}Đọc tính toán{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}Kiểm tra việc tái thiết{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}Tự kiểm tra APK{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "Hỏi đại lý của bạn" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "" +"Ứng dụng hiển thị mã đăng nhập thay đổi. Chúng tôi muốn tìm {ph0}điều gì làm" +" cho nó thay đổi{ph1} và tái tạo hành vi đó." + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "Sao chép" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"Một lời nhắc ví dụ cho APK đã tải xuống , VỚI PHÂN tích Android CỦA REA được" +" định cấu hình. {ph0}Nhận APK và thiết lập phân tích nhúng vào trang web " +"hoặc blog của bạn ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "Hãy thử trình tạo mã" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "" +"Các nhóm ứng dụng thời gian vào {ph0}Khối 30 giây.{ph1} Nó kết hợp số khối " +"với khóa tài khoản để tạo mã. Cùng một khóa và khối tạo ra cùng một mã." + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "Di chuyển đồng hồ qua 60 giây" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "Thời gian" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "giây" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "Đồng hồ ví dụ có thể điều chỉnh của chúng tôi" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "Khối 30 giây" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "Khối" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59 giây{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "Mã được tạo" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "Khóa tài khoản + khối → sáu chữ số" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "Thời gian ví dụ, tính bằng giây" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59 giây" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60 giây" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "" +"Lúc 59 giây: {ph0}287082.{ph1} Lúc 60 giây: {ph2}359152.{ph3} Di chuyển " +"trong một khối không thay đổi mã." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "" +"Chìa khóa là cố định, công khai {ph0}Dữ liệu thử NGHIỆM rfc 6238{ph1}. Bản " +"demo thực hiện tính toán được khôi phục từ APK ." + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "Sơ đồ hiển thị kết quả ở 59 giây. Bật JavaScript để thay đổi đồng hồ." + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "Tìm mã VỚI REA" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "Thu HẸP APK đến ba lớp" + +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "" +"{ph0} là ứng cử viên tính toán; hai người còn lại liên quan đến thanh tiến " +"trình và tài khoản nhập khẩu. TOTP có nghĩa là mật khẩu một lần dựa trên " +"thời gian." + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "Kết nối máy phát điện với màn hình của ứng dụng" + +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "" +"REA xác định quá tải dấu thời gian và tìm người gọi của phương thức cơ sở. " +"Kiểm tra {ph0} sau đó hiển thị cuộc gọi hiển thị {ph1}." + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "" +"Yêu cầu hiển thị một đường dẫn đầu vào rút gọn. Tên lớp kết quả bỏ qua điểm " +"chung {ph0} tiền tố." + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "Đọc tính toán" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA trả về {ph0}chuyển đổi đồng hồ, cài đặt mặc định và phương pháp " +"tạo.{ph1} Các hàm tạo đặt khoảng thời gian 30 giây và sáu chữ số; phương " +"thức dấu thời gian biến giây thành số khối." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} Khối thời gian" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} Phím + khối" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} Sáu chữ số" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "" +"{ph0}Thời gian chọn khối.{ph1} Giây 30 đến 59 tất cả cho khối 1. Ở 60 giây, " +"khối trở thành 2." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "" +"{ph0}Các vấn đề chính quá.{ph1} Trình tạo kết hợp khóa tài khoản với khối. " +"Một tài khoản có khóa khác có thể hiển thị một mã khác cùng một lúc." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "" +"{ph0}Giữ sáu chữ số.{ph1} Phần còn lại sau khi chia cho 1.000.000 được đệm " +"bằng số không khi cần, vì vậy mã có thể bắt đầu bằng 0." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "" +"Trích đoạn từ một số phương pháp được kiểm tra, với gói dòng để hiển thị. " +"Bảng điều khiển bên phải là một bản tóm tắt giải thích. {ph0} MÃ Aegis LÀ " +"GPL-3.0.{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "Bên trong máy phát điện" + +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"APK phát hành đặt {ph0} trong {ph1}. REA thực hiện cuộc gọi từ {ph2} và trả" +" về cơ thể này; nguồn gốc gọi người trợ giúp {ph3}." + +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"Byte băm cuối cùng chọn một vị trí. Bốn byte ở vị trí đó cung cấp số 31 bit " +"dương; định dạng giảm nó xuống số chữ số được yêu cầu. Đối số cuối cùng của " +"hàm tạo chọn nhánh định dạng mã được giới thiệu bằng cách biên dịch." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}So sánh với nguồn phát hành phù hợp{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "Kiểm tra việc tái thiết" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"Chúng tôi đã lắp ráp CÁC phương thức Java được chọn REA-returned trong một " +"chương trình thử nghiệm nhỏ. Đầu ra của họ phù hợp với một tái thiết độc lập" +" trên {ph0}133 trường hợp thử nghiệm{ph1}, bao gồm ranh giới khối thời gian " +"và mã bắt đầu bằng không." + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "Thời gian ví dụ" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "Mã sáu chữ số" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30 giây" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109 giây" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "" +"Trình tạo cũng khớp với sáu trường hợp tham chiếu SHA-1 đã xuất bản trong " +"{ph0}RFC 6238{ph1}. Kiểm tra việc triển khai trình duyệt chống lại chúng:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "Chạy kiểm tra tham chiếu" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "Đọc tính toán của bản demo" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "" +"Các trường hợp tham chiếu sử dụng tám chữ số. Kiểm tra cũng xác minh kết quả" +" sáu chữ số của họ." + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "" +"Xác minh chạy các phương thức Java được trích xuất và bản demo mới. Android " +"APK đã được kiểm tra tĩnh." + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "Tự kiểm tra APK" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"{ph0}Thiết LẬP REA {ph1} TRÊN macOS hoặc Linux, sau đó tải hai tệp này vào " +"cùng một thư mục. TRÊN Windows, sử dụng MÔI trường Linux như WSL." + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "" +"Phân tích Android cần MỘT jdk 17 đầy đủ hoặc mới hơn. Chọn nó với {ph0} hoặc" +" {ph1}. Trường hợp này sử DỤNG JDK 21." + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "Điểm REA tại tệp nhà cung cấp và kiểm TRA APK :" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS / Linux" + +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "" +"Đại lý của bạn có thể tiếp tục THÔNG qua REA 'S CLI bằng cách sử dụng lời " +"nhắc ở trên. ĐỐI VỚI MCP, thêm {ph0} ĐẾN MÔI trường CỦA MÁY chủ REA và kết " +"nối lại nó." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "" +"Một câu hỏi tiếp theo: {ph0}điều gì xảy ra khi một tài khoản sử dụng tám chữ" +" số hoặc một khoảng thời gian khác nhau?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "Nguồn" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "" +"{ph0}PHÁT HÀNH CHÍNH THỨC Aegis 3.4.3{ph1} · {ph2}Cam kết nguồn phù hợp{ph3}" +" · {ph4}Giấy phép GPL-3.0{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "" +"{ph0}Rfc 6238 trường hợp tham khảo{ph1} · {ph2}Dữ liệu thử nghiệm Demo{ph3}" + +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "" +"KIỂM tra VỚI REA 6.1.0 vào ngày 9 tháng 10 năm 2026. Các đoạn trích dịch " +"ngược được ghi có VÀO Aegis ; sơ đồ, tóm tắt có thể đọc được và tái tạo " +"trình duyệt là tài liệu giảng dạy mới." + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK Kỹ Thuật Đảo Ngược: Mã Đăng nhập-REA" + +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "" +"Kiểm tra Aegis ANDROID APK VỚI REA , khôi phục tính toán mã đăng nhập gồm " +"sáu chữ số của NÓ và thử tái tạo với đồng hồ có thể điều chỉnh." + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK trường hợp nghiên cứu" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "Sao CHÉP DẤU nhắc VÍ DỤ Aegis" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "Thực hiện theo tính toán mã đăng nhập" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "Sao CHÉP lệnh kiểm TRA APK" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}Nhà{ph1} / {ph2}Giới thiệu{ph3} / CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "Nghiên cứu điển hình * DownUnderCTF 2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "Tìm cờ trong{ph0}MỘT NHỊ phân CTF." + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "" +"SỬ DỤNG REA để kiểm tra một trình kiểm tra cờ nhỏ, biến các quy tắc của nó " +"thành các phương trình và tìm một đầu vào làm cho chương trình gốc in {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "mặt nạ hình vuông cờ checker * Dễ dàng * Linux x86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "Xem thử thách ban đầu" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "Từ nhị phân đến câu trả lời đã kiểm tra" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 * Tìm séc{ph1}{ph2}Chuỗi → kiểm tra chức năng{ph3}{ph4} REA tìm lời " +"nhắc, tham chiếu của NÓ và mã chấp nhận hoặc từ chối đầu vào.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 · Trích xuất các quy tắc{ph1}{ph2}36 ký tự · 26 tổng{ph3}{ph4} REA " +"trả về các hướng dẫn và dữ liệu đằng sau mỗi lần kiểm tra. Tác nhân biến " +"chúng thành phương trình.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 * Giải Quyết và chạy{ph1}{ph2}Cờ phục hồi → Đúng!{ph3}{ph4}Một kịch " +"bản Python giải quyết các phương trình. REA chụp chương trình ban đầu chấp " +"nhận kết quả.{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "" +"Thử thách là của joseph, được xuất bản trong Kho lưu trữ chính thức Của " +"DownUnderCTF." + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "Trong trường hợp này nghiên cứu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}Tìm mã kiểm tra{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}Đọc một mặt nạ{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}Lắp ráp để mã có thể đọc được{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}Giải các phương trình{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}Kiểm tra câu trả lời{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}Hãy thử nó cho mình{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "Tìm mã kiểm tra" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "" +"Bản phát hành là một TỆP thực thi 15 KB. Nó yêu cầu một lá cờ, sau đó in " +"{ph0} hoặc {ph1}. Bắt đầu với một yêu cầu đơn giản cho đại lý của bạn." + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "Sao chép" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ dụng REA để phân tích ms_flag_checker và tìm cờ. Giải " +"thích cách kiểm tra hoạt động, sau đó xác minh câu trả lời với chương trình " +"gốc.{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "" +"Một lời nhắc ví dụ, với thử thách đã tải xuống có sẵn tại địa phương và phân" +" tích nhà cung cấp chương trình mã máy được kết nối." + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "Thực hiện theo lời nhắc đầu vào cho chức năng của nó" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "" +"Tham chiếu cung cấp cho tác nhân một nơi để điều tra, mặc dù tên hàm ban đầu" +" của tệp thực thi đã bị xóa." + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "Đọc trình kiểm tra và hai người trợ giúp của nó" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"Vòng lặp đầu tiên sao chép 36 mã ký tự. Vòng kiểm tra giải mã mặt nạ, tổng " +"hợp các mã đã chọn và so sánh kết quả với một số được lưu trữ. Của nó {ph0}-" +" byte bước qua {ph1} byte cho 26 mặt nạ." + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "" +"Đây là những kết quả được chọn từ một phân tích REA mới. Đường dẫn mục tiêu " +"cục bộ được rút ngắn để hiển thị; địa chỉ tham khảo HÌNH ẢNH ĐÃ nhập CỦA " +"REA." + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "Một kiểm tra cho thấy một nhân vật" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "" +"Trình kiểm tra sắp xếp đầu vào trong lưới 6×6. Mặt nạ chọn ô nào đóng góp " +"vào tổng. Mã hóa nhỏ gọn của nó sử dụng số âm để bỏ qua các ô và số dương để" +" chọn chúng." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "Kiểm tra thứ bảy chỉ chọn một vị trí. {ph0}Hình mở{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "Đọc mặt nạ và mục tiêu của nó từ nhị phân" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"Hướng dẫn {ph0} đọc các byte mặt nạ dưới dạng các giá trị đã ký. Đây là lý " +"do tại sao {ph1} có nghĩa là -21. Mục tiêu là một số nguyên cuối nhỏ. Cùng " +"với nhau, các byte này cho đại lý biết rằng {ph2}, vì vậy nhân vật đó là " +"{ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "Từ hướng dẫn đến kiểm tra có thể đọc được" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "" +"Chọn một bước để kết Nối trình trợ giúp tổng hợp và người gọi của nó với " +"cùng một quy Tắc Trong C." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} Bắt đầu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} Chọn" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} Thêm" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} Tiến lên" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} So sánh" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA * hướng dẫn ban đầu được chọn" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "Có Thể đọc Được C * tóm tắt một lần kiểm tra" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 * Bắt đầu từ số không · {ph1} {ph2} giữ số tiền đang chạy." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "" +"{ph0}02 * Kiểm tra ô mặt nạ.{ph1} Một giá trị bằng không bỏ qua ký tự; một " +"giá trị khác không bao gồm nó." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "" +"{ph0}03 * Thêm mã ký tự.{ph1} Số nguyên của đầu vào ở cùng độ lệch được thêm" +" vào tổng." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "" +"{ph0}04 * Di chuyển đến ô tiếp theo.{ph1} Vòng lặp ban đầu tiến bốn byte " +"trên mỗi số nguyên và truy cập sáu hàng sáu ô." + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "" +"{ph0}05 * So sánh với mục tiêu được lưu trữ.{ph1} Người gọi nhận được số " +"tiền trong {ph2}. Một sự không phù hợp nhảy đến {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "" +"Các hướng dẫn đến từ người trợ giúp tổng hợp và người gọi của nó. C Là một " +"bản tóm tắt giải thích với tên mô tả và một vòng lặp 36 ô phẳng." + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "Giải 26 phương trình" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"Hầu hết các mặt nạ chọn một số ô. Ví dụ: kiểm tra đầu tiên thêm 16 mã ký tự " +"và yêu cầu tổng cộng 1441. Các lựa chọn chồng chéo cung cấp các phương trình" +" mà một tập Lệnh Python nhỏ có thể giải quyết cùng nhau." + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python * giải đoạn trích" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3 là một bộ giải tìm các giá trị thỏa mãn các phương trình này. Đoạn trích " +"này sử dụng các kiểm tra được trích xuất và giả định một {ph0} cờ có chữ " +"cái, chữ số, dấu gạch dưới và dấu ngoặc nhọn. Quá trình tải xuống hoàn chỉnh" +" bao gồm tất cả 26 mặt nạ và mục tiêu." + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "Tải xuống trình giải hoàn chỉnh" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "Kiểm tra câu trả lời với chương trình gốc" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REA ' s quá trình chụp ghi lại các thực thi ban đầu chấp nhận cờ giải quyết." +" Thay đổi một ký tự đã chọn từ {ph0} để {ph1} tạo tổng đầu tiên 1440 thay vì" +" 1441 và chương trình từ chối nó." + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "Đầu vào" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "Đầu ra quan sát" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "Mã thoát" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "Cờ của người giải" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "Một nhân vật đã thay đổi" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "Hiển thị cờ đã khôi phục và đầu ra đã chụp" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA * đầu ra chương trình gốc" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "Sao chép cờ" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "" +"Giá trị được khôi phục cũng khớp với cờ trong siêu dữ liệu thử thách đã xuất" +" bản của ban tổ chức, được kiểm tra sau khi giải nhị phân." + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "Nguồn, danh tính mục tiêu và chi tiết phân tích" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"Phân tích mới và hai quá trình chụp vào ngày 8 tháng 10 năm 2026, sử dụng " +"REA 4.1.0 với Ghidra 12.1.4 TRÊN Linux x64. Nhị phân là MỘT ELF x86-64 bị " +"tước, 15.248 byte." + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "" +"Các tham chiếu chuỗi, hàm và hằng số đã được kiểm tra trước khi đọc nguồn " +"hoặc giải pháp của ban tổ chức. Bộ giải Python và sơ đồ được xây dựng từ CÁC" +" KẾT quả REA đó." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "" +"{ph0}So sánh với nguồn của ban tổ chức{ph1} · {ph2}Thách thức siêu dữ liệu " +"và cờ{ph3} · {ph4} REA ghi chú bằng chứng{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "Hãy thử nó cho mình" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "" +"Tải xuống thử thách ban đầu và người giải quyết vào một thư mục. Sử dụng lời" +" nhắc ở trên để điều tra với đại lý của bạn hoặc chạy tập lệnh đi kèm." + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "Thiết bị đầu cuối * giải quyết và chạy" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "" +"Tập lệnh in cờ ứng cử viên; dán nó theo lời nhắc của chương trình. Giải " +"quyết Nhu cầu Python và {ph0}. Chạy các nhu CẦU thực thi BAN ĐẦU Linux " +"x86-64." + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "Thiết LẬP REA với đại lý mã hóa của bạn" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "CTF Kỹ Thuật Đảo Ngược: DownUnderCTF Cờ Checker-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "" +"SỬ dụng REA để giải Quyết DownUnderCTF của masked squares cờ checker. Tìm " +"các chức năng kiểm tra, trích xuất mặt nạ và so sánh cờ đã khôi phục với " +"chương trình gốc." + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "CTF cờ - kiểm tra trường hợp nghiên cứu" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "Sao CHÉP dấu nhắc VÍ DỤ CTF" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "PHƯƠNG trình mặt NẠ CTF; cuộn theo chiều ngang trên màn hình nhỏ hơn" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "" +"Mặt nạ thứ bảy bỏ qua 21 ô, chọn vị trí 21, sau đó bỏ qua 14. Chỉ có tế bào " +"đó đóng góp vào tổng. Mã ký tự bắt buộc của nó là 55, có nghĩa là ký tự là " +"7." + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "Thực hiện theo kiểm TRA CTF" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "Sao chép ctf hội" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "Sao chép KIỂM tra CTF có thể đọc được" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "Sao CHÉP CTF giải đoạn trích" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "Sao chép cờ phục hồi" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "Sao CHÉP LỆNH CTF solver" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}Nhà{ph1} / {ph2}Giới thiệu{ph3} / DX-Ball" + +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "Nghiên cứu trường hợp * DX-Ball 1.07" + +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "XÂY DỰNG LẠI DX-Ball {ph0}từ thực thi của nó." + +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "" +"Mục tiêu là một phiên bản C có thể bảo trì của TRÒ chơi Windows NĂM 1996. " +"REA giúp các đại lý kiểm tra bản gốc, một chức năng tại một thời điểm." + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 * C * REA" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"Một chức năng, từ thực thi đến Kiểm tra C. REA cung cấp các hướng dẫn, người" +" gọi và dữ liệu đọc; dự án tái thiết thực hiện và kiểm tra kết quả. " +"{ph0}Hình mở{ph1}" + +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "Trong trường hợp này nghiên cứu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}Dự án{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}Âm thanh pan{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}Kiểm tra kết quả{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}Tiếp tục công việc{ph1}" + +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "duy Trì Chức Năng C" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "so sánh với mã gốc" + +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "các hàm với các byte được biên dịch phù hợp" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "" +"Trạm kiểm soát dự án: 7 tháng 10 năm 2026. {ph0}Sổ cái tiến độ{ph1} · " +"{ph2}Bảo hiểm kiểm tra{ph3}" + +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "Dự án cho đến nay" + +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"Các mã phục hồi bao gồm hội đồng quản trị và xử lý tài nguyên, gạch hits, " +"hình ảnh động, hạt và sản xuất tiền thưởng. Các bản dựng hiện tại cung cấp " +"các tiện ích kiểm tra và thư viện phân tích. Làm việc trên trò chơi có thể " +"chơi được tiếp tục với vật lý bóng và mái chèo, xử lý tăng sức mạnh và TÍCH " +"hợp Windows." + +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "Tìm tính toán vị trí âm thanh trái/phải" + +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "" +"Khi một viên gạch bị trúng, vị trí nằm ngang của nó được chuyển đến mã âm " +"thanh. Cuộc điều tra cần thiết để khôi phục cách tọa độ màn hình đó trở " +"thành giá trị xoay trái/phải." + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "Sao chép" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ dụng REA để tìm CÁCH DX-Ball tính toán định vị âm thanh " +"nổi. Giải thích tính toán và hiển thị mã.{ph3}{ph4}{ph5}" + +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "" +"Một lời nhắc ví dụ cho tác nhân mã hóa của bạn, với tệp thực thi cục bộ có " +"sẵn. Cuộc điều tra dưới đây cho THẤY CÁC truy vấn REA và bằng chứng đằng sau" +" câu trả lời." + +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "" +"Tác nhân đã sử dụng REA để kiểm tra chức năng, theo dõi người gọi gạch của " +"nó và đọc các hằng số từ tệp thực thi. Những kết quả đó cung cấp đầu vào và " +"số học cần thiết để viết hàm C bên dưới." + +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"Kết quả chức năng đầu tiên cho {ph0} bao gồm khai báo mã giả {ph1} và gọi " +"{ph2}. Chế độ xem hướng dẫn của nó cho thấy một đầu vào ngăn xếp và các hoạt" +" động dấu phẩy động. Sự khác biệt đó đã cho đại lý một lý do cụ thể để tiếp " +"tục điều tra." + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "Chế độ xem dịch ngược đầu tiên" + +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "" +"Đầu ra hiển thị một cuộc gọi chuyển đổi. Đọc các hướng dẫn dưới đây cho thấy" +" đầu vào và tính toán cho ăn cuộc gọi đó." + +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "Ba câu HỎI được trả lời THÔNG QUA REA" + +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "Khôi phục đầu vào bị thiếu" + +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "" +"Kết quả chức năng bao gồm các hướng dẫn cùng với mã giả và người gọi. Đây, " +"{ph0} hiển thị đầu vào số nguyên bị thiếu từ chế độ xem trình dịch ngược." + +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "Theo dõi người gọi để hiểu đầu vào" + +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "" +"REA đã xác định người gọi này trong kết quả đầu tiên. Quy mô hướng dẫn trước" +" của nó {ph0} bằng 30; thêm 20 cho tọa độ màn hình của gạch, {ph1}." + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "Đọc các giá trị đằng sau địa chỉ bộ nhớ" + +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "" +"Các byte được trả về thiết lập hai hằng số học và thang đo pan ban đầu. Tác " +"nhân bây giờ có các giá trị cần thiết cho biểu Thức C." + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "TỪ NHỮNG phát Hiện CỦA REA Đến C" + +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "" +"Làm theo năm bước dưới đây. Mỗi lựa chọn làm nổi bật các hướng dẫn ban đầu " +"và Các dòng C mà họ thông báo." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} Đầu vào" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} Nhân" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} Trừ" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} Quy mô" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} Quay trở lại" + +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "Bản gốc x86 * trích đoạn" + +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "Tái Tạo C" + +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 * Đọc đầu vào.{ph1} Chế độ xem hướng dẫn TRONG REA kết quả chức năng" +" của đọc {ph2} và sử dụng {ph3} để tải số nguyên. Theo người gọi của NÓ " +"thông QUA REA thiết lập ý nghĩa tọa độ màn hình Của tham Số C {ph4}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 * Nhân với 1,5625 · {ph1} {ph2} đọc đôi tại {ph3}. Các byte được trả" +" về BỞI REA ' s {ph4} giải mã thành {ph5}; C sử dụng cùng một hằng số." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 * Trừ 500.0 · {ph1} {ph2} đọc đôi tại {ph3}. REA ' s byte kết quả " +"giải mã để {ph4}, chuyển trung tâm tính toán sang tọa độ màn hình {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 * Áp dụng thang đo được lưu trữ.{ph1} Thứ hai {ph2} đọc {ph3}. Toàn " +"cầu đó được đặt tên {ph4} trong nguồn duy trì. Đọc byte THỨ hai của REA " +"thiết lập giá trị ban đầu của nó là {ph5}." + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 * Trả về một số nguyên.{ph1} Cuộc gọi tại {ph2} đạt {ph3}, được xác " +"định TRONG REA 's callee kết quả. C đúc kết quả để {ph4}; so sánh " +"original-x86 kiểm tra giá trị trả về." + +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "" +"Đoạn trích lắp ráp chọn các hướng dẫn đầu vào, số học và trả về. Danh sách " +"đầy đủ dưới đây cũng bao gồm các cửa hàng can thiệp và thiết lập chức năng " +"và dọn dẹp." + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "Lắp ráp đầy đủ và bằng chứng hỗ trợ" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA kết quả · 0x406400-0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "Những gì người gọi cung cấp" + +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "" +"Chức năng gạch-hit tại {ph0} cân tọa độ gạch của nó thêm 30, thêm 20, sau đó" +" đẩy nó trước cuộc gọi:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "Những gì dữ liệu đọc thiết lập" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA byte đọc, giải mã như đôi endian ít" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "Địa chỉ" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "Giá trị" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "Được sử dụng cho" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "Phép nhân đầu tiên" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "Phép trừ" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} ban đầu" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "Quy mô chảo được lưu trữ" + +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "" +"Được ghi LẠI VỚI REA 4.1.0 cho mục tiêu DX-Ball 1.07 được ghim băm. Các ghi " +"chú điều tra liên quan giữ Lại Id Bằng chứng." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "" +"{ph0}Nguồn duy trì{ph1} · {ph2}Ghi chú điều tra và tài liệu tham khảo bằng " +"chứng{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "Kiểm tra chức năng phục hồi" + +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "" +"Hàm được khôi phục vượt qua hai lần kiểm tra: các giá trị trả về của nó khớp" +" với bản gốc và các byte được biên dịch của nó khớp với tệp thực thi." + +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3.205 trường hợp hành vi" + +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"Các thử nghiệm thực thi hàm x86 ban đầu và so sánh giá trị trả về của nó với" +" c. Chúng bao phủ mọi vị trí nguyên từ 0 đến 640 ở năm thang pan: 0, 0,5, 1," +" 20 và -1." + +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 byte phù hợp" + +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "" +"Hàm C được biên dịch với chuỗi CÔNG cụ vc4.0 được ghim. Phát lại trình biên " +"dịch khớp với chức năng hoàn chỉnh sau khi áp dụng các lần di dời đã xem xét" +" và kiểm tra các hằng số được tham chiếu." + +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "" +"Ở tỷ lệ 1, phép tính được phục hồi trả về -500 ở cạnh trái, 0 ở giữa và 500 " +"ở cạnh phải. Phần tiếp theo của công việc âm thanh là tích hợp giá trị đó " +"với phần phụ trợ âm thanh của trò chơi." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}Đọc chi tiết phát lại trình biên dịch{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "Tiếp tục điều tra" + +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "" +"Cách tiếp cận tương tự đang được sử dụng để cập nhật hạt, hàng đợi nổ và tạo" +" tiền thưởng: kiểm tra các chức năng có liên quan, khôi phục trạng thái và " +"phụ thuộc của chúng, sau đó so sánh việc triển khai với bản gốc." + +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "" +"Để tự kiểm tra chức năng sound-pan, hãy làm theo HƯỚNG dẫn thiết lập CỦA DỰ " +"án DX-Ball và cung cấp mục tiêu ban đầu phù hợp. Sau đó chạy:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "TRONG thanh TOÁN DX-Ball" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "" +"{ph0} KHO LƯU TRỮ DX-Ball{ph1}{ph2}Nguồn hiện tại, tiến độ và thiết lập cục " +"bộ.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "" +"{ph0} QUY trình phân tích REA{ph1}{ph2}Thực hiện theo các tính toán, sau đó " +"sử dụng cách tiếp cận tương tự với nhị phân của riêng bạn.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "" +"{ph0}Hạt và sản xuất tiền thưởng{ph1}{ph2}Một cuộc điều tra lớn hơn về trạng" +" thái, hàng đợi và pixel viết.{ph3}" + +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball Kỹ Thuật Đảo Ngược: Âm Thanh Panning-REA" + +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"Thực hiện theo CẤU TRÚC LẠI DX-Ball từ phân tích nhị phân thông qua REA để " +"duy trì Các bài kiểm tra C, original-x86 và các byte hàm được biên dịch phù " +"hợp." + +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "" +"DX-Ball sound-pan điều tra; di chuyển theo chiều ngang trên màn hình nhỏ hơn" + +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"DXBALL.EXE chức năng 0x00406400 được kiểm tra VỚI REA . Một người gọi gạch-" +"hit cung cấp 20 cộng với 30 lần tile_x. Hướng dẫn tải x, nhân với 1.5625, " +"trừ 500.0, áp dụng pan_scale và trả về một số nguyên. C được duy trì được " +"kiểm tra độc lập so với x86 ban đầu trong 3.205 trường hợp và bằng cách phát" +" lại trình biên dịch vc4.0 khớp với 63 byte." + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "Nghiên cứu trường HỢP tái THIẾT DX-Ball" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "Sao chép ví dụ dấu nhắc" + +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "Thực hiện theo các tính toán của trái/phải vị trí âm thanh" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "Sao chép đoạn trích lắp ráp ban đầu" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "Sao chép chức năng sound-pan" + +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "Sao chép hoàn chỉnh âm thanh-pan lắp ráp" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "Sao CHÉP lệnh PHÂN tích DX-Ball" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}Nhà{ph1} / Trưng bày" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA nghiên cứu trường hợp." + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "" +"Android, trò chơi, Electron và MỘT THÁCH thức CTF, với mã, số liệu và kết " +"quả kiểm tra." + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android * PHÂN tích APK" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "Cách trình xác thực tạo mã đăng nhập" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "" +"Tìm Aegis ' s tính mã sáu chữ số TRONG APK đã phát hành . Theo dõi các " +"phương thức tạo BẰNG REA , sau đó di chuyển đồng hồ demo để xem lý do tại " +"sao mã thay đổi sau mỗi 30 giây." + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "Đọc nghiên Cứu điển Hình Android" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF * Phân tích các chương trình mã máy" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "Giải QUYẾT MỘT TRÌNH kiểm tra cờ CTF" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "" +"Kiểm tra một Thách Thức DownUnderCTF dễ DÀNG VỚI REA . Tìm các hàm kiểm tra " +"của nó, biến mặt nạ và tổng thành phương trình, sau đó xác minh cờ đã giải " +"với chương trình gốc." + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "Đọc nghiên CỨU trường hợp CTF" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "Bản Địa · Tái Thiết" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball ' s tính toán vị trí âm thanh trái/phải" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"Khôi phục tính toán vị trí âm thanh trái/phải từ TRÒ chơi Windows năm 1996." +" REA ' s hướng dẫn, tham chiếu người gọi và hằng số dẫn đến một hàm c nhỏ, " +"được kiểm tra đối với hành vi ban đầu và tất cả 63 byte được biên dịch." + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "Đọc nghiên CỨU điển HÌNH DX-Ball" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron * Tính năng truy tìm" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Notion sao chép văn bản và HTML như thế nào" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"Theo DÕI API hướng trang thông qua Notion ' S JavaScript đóng gói . Thực " +"HIỆN THEO CÁC TRÌNH bao BỌC IPC của NÓ vào khay nhớ tạm của hệ thống, sau đó" +" xem cách một điểm đánh dấu HTML nhỏ giữ dữ liệu khối phong phú được kết nối" +" với một bản sao." + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "Đọc nghiên CỨU điển HÌNH Notion" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS * Tái thiết" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "TH04 nhắm vào một viên đạn như thế nào" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "" +"Kiểm tra trình trợ giúp góc 16 bit ban đầu VỚI REA . Khớp các phép toán " +"nhân, chia và phối hợp của nó với C++ có thể đọc được, sau đó xem cách chúng" +" tạo ra một vòng nhắm vào người chơi." + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "Đọc nghiên CỨU điển HÌNH TH04" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "Hướng dẫn từng bước" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "" +"Các hướng dẫn đi qua tính toán gốc, xuất Electron và yêu cầu trình duyệt. " +"Mỗi bắt đầu với một dấu nhắc và một mục tiêu cụ thể." + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "Đọc hướng dẫn" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "Nghiên cứu Trường hợp kỹ thuật đảo ngược-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"Theo DÕI CÁC cuộc điều tra REA thông qua mã, số liệu và bản demo: Trình xác " +"thực Android, DX-Ball , Notion , TH04 và Trình kiểm tra cờ DownUnderCTF." + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}Nhà{ph1} / {ph2}Giới thiệu{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "Nghiên cứu trường hợp * Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "Notion sao CHÉP như THẾ NÀO{ph0}văn bản VÀ HTML." + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "" +"Theo dõi cuộc gọi clipboard TỪ API trang CỦA Notion, thông qua quá trình tải" +" trước và quy trình chính, ĐẾN TRÌNH ghi clipboard CỦA Electron." + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion Máy tính để bàn 7.6.1 * JavaScript * REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Cây cầu BÊN TRONG GÓI máy TÍNH ĐỂ BÀN CỦA Notion" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "" +"{ph0}01 * Api Hướng Trang{ph1} {ph2}{ph3}{ph4} {ph5}Tải trước hiển thị một " +"phương thức có thể gọi được.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "" +"{ph0}02 * tải trước wrapper{ph1} {ph2}{ph3}{ph4} {ph5}Trình bao bọc gửi kênh" +" và đối số.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "" +"{ph0}03 · Xử lý quy Trình Chính{ph1} {ph2}{ph3}{ph4} {ph5}Người nhận kiểm " +"tra trang nào đã gửi nó.{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "" +"{ph0}04 * Hệ thống clipboard{ph1} {ph2}{ph3}{ph4} {ph5} Electron viết văn " +"bản và HTML được cung cấp.{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "Một kênh nối hai bên: {ph0}" + +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "" +"Mã đóng gói sử dụng cùng một kênh trong quá trình tải trước và chính. Giải " +"quyết các trình bao bọc cho thấy CÁC cuộc gọi Electron đằng sau những tên " +"đó." + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "Trong trường hợp này nghiên cứu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}Theo cầu clipboard{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}Giữ cấu trúc của một khối{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}Thêm ví dụ và nguồn{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "Thao tác sao chép đi đâu?" + +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "" +"Trang thấy một phương thức được gọi là {ph0}. Việc triển khai nó trong tải " +"trước là một trình bao bọc. Câu hỏi hữu ích là những gì trình bao bọc đó gửi" +" và mã nào nhận được nó." + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "Sao chép" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ DỤNG REA để theo dõi CÁCH Notion sao chép văn bản và HTML" +" vào bảng tạm hệ thống. Hiển thị mã ở mỗi bước.{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "" +"Một lời nhắc ví dụ VỚI GÓI ứng dụng CỤC BỘ CỦA Notion có sẵn cho đại lý mã " +"hóa của bạn." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA tìm nơi bắt đầu đọc" + +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "" +"Phân tích tab tải trước VỚI REA định vị API tiếp xúc với trang và cuộc gọi " +"gửi yêu cầu IPC. Cả hai phát hiện đều đi kèm với phạm vi nguồn trong gói thu" +" nhỏ:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA phát hiện → hai nơi để mở" + +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"Các lĩnh vực được lựa chọn từ một tươi {ph0} kết quả TRÊN Notion 's tab tải " +"trước, ghi LẠI VỚI REA 4.1.0. Các vị trí sử dụng dòng của gói ban đầu và cột" +" không dựa trên." + +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"Tác nhân mở các vị trí đó, tìm thành viên clipboard trong API được lắp ráp " +"và đọc {ph0}. Nguồn cung cấp trang web cuộc gọi của nó {ph1}. Tên đó cung " +"cấp cho tác nhân một cái gì đó chính xác để tìm kiếm trong gói chính. Bốn " +"đoạn trích dưới đây cho thấy tuyến đường mà nó kết nối." + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "Bốn đoạn mã ngắn" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "" +"Đơn giản hóa TỪ JavaScript đóng gói , với tên biến có thể đọc được. Các " +"thành viên không liên quan bị bỏ qua." + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "Bắt đầu TẠI API tiếp xúc với trang" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "" +"Thành viên này cung cấp tên kênh. Việc thực hiện {ph0} cho chúng tôi biết " +"cách yêu cầu rời khỏi quy trình của trang." + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "Giải quyết trình bao bọc tải trước" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "" +"Hàm trả về chuyển tiếp các đối số thông qua IPC YÊU cầu và phản hồi CỦA " +"Electron. Bây giờ chúng ta có thể tìm kiếm {ph0} về phía chính-quá trình." + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "Kiểm tra cách người nhận được đăng ký" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "" +"Quá trình chính sử dụng một trình bao bọc khác. Của nó {ph0} phương pháp " +"đăng ký một {ph1} người nhận cho kênh đó." + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "Tìm ghi và kiểm tra người gửi của nó" + +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"Đây là điểm đến. Sau khi kiểm tra người gửi, trình xử lý chuyển dữ liệu được" +" cung cấp cho API clipboard CỦA Electron. Kênh và hai trình bao bọc được " +"giải quyết kết nối phương thức tiếp xúc với cuộc gọi này." + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "Làm thế nào để một khối được sao chép giữ cấu trúc của nó?" + +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Notion ' s web editor gửi văn bản VÀ HTML thông qua {ph0}. Nó giữ dữ liệu " +"khối cục bộ và ĐẶT ID vào HTML đã sao chép để kết nối chúng." + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "LIÊN KẾT HTML để lưu dữ liệu khối" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "Đọc ID HTML" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "Tìm CÙNG MỘT ID cục BỘ" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "Khôi phục DỮ LIỆU KHỐI Notion" + +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "" +"Văn BẢN minh họa VÀ ID. Kiểm tra mô-đun được ghi sẽ khôi phục dữ liệu khối " +"khi id khớp; một mục cũ chỉ trả về văn bản và HTML." + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "" +"Khi dán, Notion tìm ID HTML và kiểm tra NÓ với bản sao đã lưu. Id phù hợp " +"khôi phục dữ liệu khối." + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "" +"Định dạng Clipboard được ghi lại từ tài sản web được lưu trong bộ nhớ cache " +"vào ngày 13 tháng 7 năm 2026." + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "Thêm ví dụ và nguồn" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "Một ví dụ khác: Bảng Markdown" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "" +"Notion phân Tích Markdown thành dữ liệu khối. Ví dụ này cho thấy cách một " +"bảng trở thành tiêu đề và các hàng dữ liệu." + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "Một bảng thông QUA TRÌNH phân tích Cú pháp Markdown CỦA Notion" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "" +"Ghi lại đầu ra từ Một Trình phân tích Cú pháp Markdown trích xuất. Bảng trở " +"thành hàng và ô." + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "Một đường dẫn khác: kết nối sqlite ngoại tuyến" + +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"YÊU CẦU trình kết xuất CỦA Notion {ph0} THÔNG QUA IPC. Quá trình chính tạo " +"kênh tin nhắn và cung cấp một cổng cho trình kết xuất và cổng kia cho quy " +"trình tiện ích SQLite. Các lô tuyên bố tiếp theo và kết quả đi qua cổng đó." + +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "" +"Sau đó, handoff giải thích nơi công việc cơ sở dữ liệu chạy và tại sao chỉ " +"truy tìm yêu cầu IPC ban đầu bỏ lỡ cuộc trò chuyện sau này." + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "Nguồn và cách đọc các đoạn trích" + +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"Cầu clipboard đến TỪ Notion Desktop 7.6.1 {ph0}: tab tải trước và {ph1}. Các" +" đoạn trích mở rộng tên biến được thu nhỏ và bỏ qua mã không liên quan; " +"trình trợ giúp kiểm tra người gửi được hiển thị với phần bên dưới của nó " +"{ph2} gọi." + +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"Các ví dụ về clipboard và Markdown ảo đến từ các tài sản web được lưu trong " +"bộ nhớ cache vào ngày 13 tháng 7 năm 2026, bao gồm các mô-đun {ph0}, {ph1}, " +"{ph2} và {ph3}. Những tài sản đó có phiên bản riêng. Các đầu dò đã lưu thực " +"thi các mô-đun được trích xuất và các dây nịt nhỏ; đầu ra của chúng mô tả " +"các đầu dò đó thay vì một phiên GIAO diện người dùng máy tính để bàn bị bắt." + +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"KẾT quả REA được hiển thị ở đây là phân tích tập trung của tab đã lưu tải " +"trước, được ghi lại với gói REA 4.1.0 đã xuất bản. Nó định vị API và gọi " +"hoạt động. Thành viên clipboard và bộ thu phù hợp được kết nối bằng cách đọc" +" các triển khai trình bao bọc của chúng trong gói." + +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"Ví Dụ Markdown sử dụng mô đun trình phân tích cú pháp {ph0}. Các bài kiểm " +"tra mô-đun đã lưu cho thấy cả bộ lọc trang và trò chuyện đều giữ nguyên bảng" +" này. Các trình phân tích cú pháp dán/nhập, Đánh dấu Có cấu trúc và ai/trò " +"chuyện có các điểm nhập và định dạng trung gian riêng biệt." + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "" +"{ph0} JavaScript hướng dẫn ứng DỤNG{ph1}{ph2}Thực hiện theo tính năng xuất " +"của ỨNG dụng Electron nhỏ.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "" +"{ph0} TÁI THIẾT DX-Ball{ph1}{ph2}Thực hiện theo hướng dẫn bản địa đến một " +"chức năng C kiểm tra.{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron Kỹ Thuật Đảo Ngược: Clipboard-REA" + +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"Thực HIỆN THEO Notion ' S CLIPBOARD API thông QUA Electron 's preload, IPC " +"wrappers và quy trình chính, với đoạn trích mã ngắn và xem xét định dạng " +"clipboard phong phú của NÓ." + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron trường hợp nghiên cứu" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "Sao CHÉP DẤU NHẮC PHÂN TÍCH Notion" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "Sao CHÉP Notion tải trước đoạn trích" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "Sao CHÉP Notion gọi wrapper đoạn trích" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "Sao CHÉP Notion handler wrapper đoạn trích" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "Sao CHÉP Notion clipboard receiver đoạn trích" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "Khôi phục dữ liệu clipboard phong phú trên dán" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "Bỏ qua nội dung" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}Nhà{ph1} / {ph2}Giới thiệu{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "Nghiên cứu điển hình * Touhou 4: Lotus Land Story" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "XÂY DỰNG LẠI TH04 ' s{ph0}mẫu đạn." + +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "" +"Một vòng đạn bắt đầu bằng một phép tính góc ngắn. SỬ DỤNG REA để kiểm tra " +"chức năng dos ban đầu, sau đó làm theo hướng dẫn của NÓ vào C++có thể đọc " +"được." + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98 * 16-bit DOS * c++ và lắp ráp" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "Xem TÁI THIẾT TH04" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "Từ hướng dẫn ban đầu để kiểm tra nguồn" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "" +"{ph0}01 * Trò Chơi Gốc{ph1}{ph2}CHÍNH.EXE{ph3}{ph4}TỆP THỰC thi PC-98 và " +"trình trợ giúp góc đạn của NÓ.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 * Kiểm tra VỚI REA {ph1}{ph2}Hướng dẫn + tài liệu tham " +"khảo{ph3}{ph4}Xác minh mã DOS đã tải và đọc phép tính góc từ tệp thực " +"thi.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 * Đọc C C{ph1}{ph2}Không gian → mục tiêu → xoay{ph3}{ph4}Kết nối " +"từng hoạt động với việc tái thiết được duy trì.{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 * Kiểm tra nguồn{ph1}{ph2}2,139 byte phù hợp{ph3}{ph4}Kiểm tra trình" +" biên dịch đã ghi bao gồm mã tạo đạn có chứa trình trợ giúp này.{ph5}" + +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "" +"REA trả về mã gốc và bằng chứng phân tích của nó. DỰ án TH04 cung cấp các " +"kiểm tra nguồn và trình biên dịch được duy trì." + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "Trong trường hợp này nghiên cứu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}Vòng đạn{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}REA trả về gì{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}Lắp Ráp Để C C{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}Kiểm tra nguồn{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}Dự án đầy đủ{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "Làm thế nào một chiếc nhẫn nhắm vào người chơi" + +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "" +"Cuộc tấn công của Elly yêu cầu một chiếc nhẫn nhắm với số lượng ban đầu là " +"16. Một người trợ giúp tính toán hướng của mỗi viên đạn. Cùng một vòng có " +"thể đối mặt với một hướng cố định hoặc quay về phía người chơi." + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Đại lý mã hóa của bạn" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "Sao chép" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ DỤNG REA để tìm CÁCH TH04 tạo ra một vòng đạn và nhắm vào" +" người chơi. Giải thích tính toán và hiển thị mã.{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "" +"Một lời nhắc ví dụ, với thanh toán thực thi và tái thiết ban đầu có sẵn tại " +"địa phương." + +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 lưu trữ một lượt theo chiều kim đồng hồ đầy đủ trong 256 đơn vị góc. " +"Đối với 16 viên đạn, mỗi chỉ số thêm 16 đơn vị: {ph0}. Thêm hướng của người " +"chơi xoay các vị trí đó lại với nhau." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "" +"Một minh họa của toán học góc phục hồi cho đếm 16, hướng máy nghe nhạc 40 và" +" mẫu xoay 0. {ph0}Hình mở{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "Mẫu bắn trong nguồn được phục hồi" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Elly ' s ring attack * đoạn trích nguồn" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "" +"Những dòng này chọn mẫu trước khi điều chỉnh độ khó và hiệu suất. {ph0}Đọc " +"nguồn của cuộc tấn công{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "REA trả về gì" + +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "" +"Chúng tôi kiểm tra {ph0}, chức năng đặt vận tốc và góc của mỗi viên đạn. " +"REA trả về hướng dẫn, mã giả và tài liệu tham khảo. Ba phần của kết quả đó " +"giải thích mô hình." + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "Kiểm tra hình ẢNH DOS trước khi đọc mã của nó" + +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "" +"Việc kiểm tra liên kết mã đã tải và các bản ghi di dời đến tệp thực thi được" +" cung cấp. Đường dẫn trên được rút ngắn để hiển thị." + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "Đọc nhân và chia của chiếc nhẫn" + +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} giữ chỉ số đạn. Sự thay đổi nhân nó với 256, sau đó phép chia sử dụng " +"số đếm đọc từ {ph1}. Tên nguồn duy trì trường đó {ph2}. Trình tự hoàn chỉnh " +"xuất hiện bên dưới." + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "Tìm nơi mẫu quay về phía người chơi" + +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"Các toán hạng hướng dẫn phơi bày hai sự khác biệt tọa độ và một trợ giúp " +"hướng. Giá trị trả về của nó được thêm vào góc vòng tương đối. Tên nguồn làm" +" cho các địa chỉ đó có thể đọc được; REA cho phép tác nhân kiểm tra các hoạt" +" động ban đầu đằng sau chúng." + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "Từ lắp Ráp Đến có Thể đọc Được c C" + +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "" +"Chọn một bước để khớp các hướng dẫn ban đầu với phép tính góc. Bản tóm tắt " +"này theo đường dẫn vòng nhắm; nguồn đầy đủ cũng xử lý chênh lệch, ngăn xếp " +"và các mẫu ngẫu nhiên." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} Chỉ số" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} Không gian" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} Mục tiêu" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} Xoay" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} Cửa hàng" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA * hướng dẫn 16-bit gốc" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "Có thể đọc Được C++ * tóm tắt vòng nhắm" + +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "" +"{ph0}01 * Đọc chỉ số đạn.{ph1} Đối số ngăn xếp được tải vào {ph2}. Trong " +"vòng 16 viên đạn, chỉ số thành viên này chạy từ 0 đến 15." + +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 * Không Gian hướng dẫn xung quanh một lượt đầy đủ.{ph1} {ph2} nhân " +"với 256. Số đếm bằng không-được mở rộng thành một từ, sau đó {ph3} chia sản " +"phẩm cho số đó. Đối với đếm 16, mỗi chỉ số tiến 16 đơn vị góc." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 * Thêm hướng người chơi.{ph1} Hai phép trừ tạo thành tọa độ người " +"chơi-trừ-gốc. Người trợ giúp hướng trả về một góc trong {ph2}; thêm nó biến " +"toàn bộ vòng về phía người chơi." + +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 * Thêm vòng quay của mẫu.{ph1} {ph2} thêm góc mẫu. Mẫu ban đầu của " +"Elly đặt nó thành số không; các mẫu khác có thể sử dụng cùng một trình trợ " +"giúp với một vòng quay." + +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 * Giữ góc cuối cùng trong một byte · {ph1} Cửa hàng viết {ph2} đến " +"trường góc đẻ trứng. Các giá trị bọc sau 255, giống như cast byte không dấu." +" Nguồn xung quanh cũng chuyển đổi góc và tốc độ này thành vận tốc." + +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "" +"Việc lắp ráp chọn nhánh vòng nhắm, tính toán mục tiêu và cửa hàng cuối cùng." +" C++ ở trên là một bản tóm tắt có thể đọc được. Kiểm tra trình biên dịch bên" +" dưới áp dụng cho nguồn được duy trì trong dự án được liên kết." + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "Đọc vòng duy trì và mục tiêu nguồn" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "" +"{ph0}Vòng macro{ph1} · {ph2}Mục tiêu và vận tốc nguồn{ph3} · {ph4}Biểu diễn " +"góc{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "Kiểm tra nguồn duy trì" + +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "" +"CÁC kiểm tra được ghi LẠI CỦA DỰ án TH04 biên dịch mã tạo đạn, bao gồm cả " +"trình trợ giúp này, với chuỗi công cụ Turbo C 4 4.0 J được ghim." + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139 byte phù hợp" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "" +"Mã tạo đạn được biên dịch khớp với phần 2.139 byte của tệp thực thi ban đầu." + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "Hai tòa nhà sạch sẽ" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "" +"Hai bản dựng riêng biệt tạo ra cùng một byte phù hợp. Các băm đầu vào được " +"ghi lại khớp với nguồn được duy trì được hiển thị ở đây." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "" +"Thu âm vào ngày 3 tháng 10 năm 2026. {ph0}Đọc kiểm tra trình biên dịch{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "Phạm vi phân tích và nhận dạng mục tiêu" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "Mục tiêu ban đầu" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0}, 156,258 byte, DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "Mục trợ giúp" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} TRONG HÌNH ẢNH ĐƯỢC tải CỦA REA" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "Tập tin ban đầu bù đắp" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0}, trả lại bởi {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "Kiểm tra mã được ghi lại" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA 4.1.0 * 7 tháng mười 2026" + +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "" +"Kiểm tra trình biên dịch bao gồm phần bullet-add code hoàn chỉnh, bao gồm cả" +" trình trợ giúp này. Họ cũng so sánh ĐÓNG góp BẢN đồ của nó và di dời chồng " +"chéo." + +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA đã xác minh hình ảnh tải DOS tĩnh ở phân đoạn tải {ph0}. Địa chỉ của nó " +"mô tả hình ảnh phân tích đó. Kết quả hàm báo cáo 503 byte cơ thể trong hai " +"phạm vi trong khoảng 517 byte; các hướng dẫn được chọn ở trên nằm trong các " +"phạm vi được báo cáo đó." + +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"Tên nguồn và kiểm tra trình biên dịch đến từ TRẠM KIỂM SOÁT TH04 {ph0}. Các " +"quan sát tái thiết trước đó đã sử dụng các kịch bản phân tích riêng của dự " +"án; trang này thêm một kiểm tra REA mới của cùng một mục tiêu ban đầu. Danh " +"tính của trò chơi được cung cấp được ghim bởi biểu hiện kho lưu trữ của nó, " +"với nguồn gốc tự đổ nguyên sơ độc lập vẫn còn mở." + +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "" +"Hình minh họa tính toán góc. Điều khiển đầy đủ trò chơi, thời gian VÀ HÀNH " +"vi PHẦN CỨNG PC-98 có kiểm tra thời gian chạy riêng biệt trong dự án tái " +"thiết." + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "VIỆC TÁI THIẾT TH04 đầy đủ" + +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "" +"Dự án xây dựng bốn sản phẩm dos của trò chơi từ C++ và lắp ráp được duy trì." +" Ngoài bullet generation, nguồn bao gồm các giai đoạn, ông chủ, kết xuất, " +"đầu vào, menu, kết thúc và xử lý điểm." + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}Khám PHÁ KHO LƯU TRỮ TH04{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "" +"{ph0}Nguồn tạo đạn{ph1}{ph2}Người trợ giúp hoàn chỉnh, các loại mẫu khác và " +"điều chỉnh mẫu.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "" +"{ph0}Hướng dẫn xây dựng và chạy dos{ph1}{ph2}Xây dựng nguồn và kiểm tra nó " +"trong QUY trình làm việc GIẢ lập PC-98 của dự án.{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "" +"{ph0}Trạng thái dự án hiện tại{ph1}{ph2}Xác minh DOS và cổng x64 gốc riêng " +"biệt.{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04 Kỹ Thuật Đảo ngược: Dos Bullet Patterns-REA" + +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "" +"KIỂM tra MÃ DOS 16 bit gốc CỦA TH04 VỚI REA . Thực hiện theo lắp Ráp Và phục" +" Hồi C++ để xem cách một vòng đạn được đặt cách nhau và nhắm vào người chơi." + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "Trên trang này" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04 bullet-nghiên cứu trường hợp mẫu" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "Sao CHÉP DẤU nhắc VÍ DỤ TH04" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "" +"TH04 cố định và nhằm mục đích đạn nhẫn; di chuyển theo chiều ngang trên màn " +"hình nhỏ hơn" + +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"Hai sơ đồ của một vòng 16 viên đạn. Vòng cố định bắt đầu ở góc không. Thêm " +"một hướng chơi của 40 xoay mỗi hướng bằng cùng một số tiền; các điểm đạn đầu" +" tiên được đánh dấu về phía người chơi. Cả hai đều giữ khoảng cách 16 đơn vị" +" góc hoặc 22,5 độ." + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "Sao CHÉP TH04 bắn mẫu" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "Thực HIỆN THEO CÁC TH04 nhằm mục đích tính vòng" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "Sao CHÉP TH04 lắp ráp đoạn trích" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "Sao chép có thể đọc được nhằm mục đích-tính toán vòng" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "Về đầu trang" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "Sao chép" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "Sao chép" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "Đã chọn" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "Mã sao chép vào clipboard." + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "Mã được chọn. Sử dụng bàn phím của bạn để sao chép nó." + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA TRÊN GitHub ({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "Khoảng cách {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "Đánh một cây xương rồng. Hãy thử một tốc độ khác." + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "Không gian hoặc Nhảy ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "Chơi lại" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "Chơi" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "Tạm dừng" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "Nhấn Play, sau đó nhảy qua cây xương rồng." + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "" +"Đánh một cây xương rồng. Nhấn Play một lần nữa, hoặc thay đổi tốc độ và khởi" +" động lại." + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "Chạy. Không gian Hoặc Nhảy xóa một cây xương rồng." + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "Dừng lại. Nhấn Play để tiếp tục." + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "Tốc độ cố định: {speed}. Không gian Hoặc Nhảy xóa một cây xương rồng." + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "Tốc độ cố định: {speed}. Nhấn Play để thử nó." + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "Quy tắc phục hồi: bắt đầu từ 6, sau đó tăng lên 13." + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "Tốc độ cố định: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "" +"Phát lại quy tắc phục hồi. Tất cả bốn giá trị phù hợp với kiểm tra trò chơi " +"gốc được kiểm soát khi được làm tròn thành ba số thập phân." + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "" +"Việc phát lại khác với các giá trị trò chơi gốc được ghi lại. So sánh quy " +"tắc tốc độ và cài đặt ở trên." + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} giây" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} giây, khối thời gian {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "" +"Tính toán tương tác không có sẵn trong trình duyệt này. Ví dụ hiển thị mã ở " +"59 giây." + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "Kiểm tra…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "" +"{passed} / {total} kiểm tra được thông qua (sáu trường hợp tham chiếu, ở sáu" +" và tám chữ số)." + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "Không thể chạy kiểm tra tham chiếu. Thử lại." + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "Một nhà phân tích suy nghĩ tại một máy tính" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "Một kiểm tra cho thấy một nhân vật" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "" +"Mặt nạ thứ bảy chỉ chọn vị trí 21 trong lưới đầu vào sáu x sáu. Mã ký tự của" +" nó phải bằng 55, vì vậy ký tự là 7. Các mặt nạ khác chọn các vị trí khác " +"nhau và đưa ra các phương trình tiếp theo." + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "Kiểm tra thứ bảy. Nhãn ô là vị trí đầu vào, bắt đầu từ 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "Mặt nạ được mã hóa: -21, +1, -14, 0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "Bỏ qua 21 ô. Chọn 1. Bỏ qua 14. Dừng lại ở 0." + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "Chỉ có một ô đóng góp vào tổng này" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "Vị trí 21 trong lá cờ phải chứa 7." + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "Chọn: một ô" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26 mặt nạ cho 26 phương trình." + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "Giải quyết chúng với nhau để tìm cờ." + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball âm thanh-pan điều tra" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA cung cấp hướng dẫn, người gọi và byte-đọc bằng chứng cho một CHỨC năng " +"DX-Ball. Đầu vào ngăn xếp được nhân với 1.5625, được bù bằng 500, chia tỷ lệ" +" và chuyển đổi thành số nguyên. Duy Trì C được kiểm tra trong 3.205 trường " +"hợp gốc-x86 và phát lại trình biên dịch 63 byte riêng biệt." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "Ngăn xếp" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "vào x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "int" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "trả về" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "Hàm khôi phục" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "Mã C bảo trì" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "Gọi khi va chạm" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "Mã gốc" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "so sánh" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3.205 ca thử" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "Build VC4.0" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 byte khớp" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA dòng điều tra" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "" +"Đặt câu hỏi về một mục tiêu địa phương. REA kiểm tra và theo dõi thông qua " +"các bộ điều hợp phân tích cục bộ, trả về bằng chứng và hỗ trợ các câu hỏi " +"tiếp theo như đại lý của bạn giải thích, thực hiện và kiểm tra." + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. Hỏi" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "Agent + tệp cục bộ" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "App / tệp / trình duyệt" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. Phân tích" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. Đọc bằng chứng" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "Mã / tham chiếu /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "điểm chưa rõ" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. Áp dụng" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "Agent của bạn" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "Giải thích / viết / kiểm tra" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "Công cụ phân tích" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "Bộ phân tích cục bộ" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "Câu hỏi tiếp theo" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04 : khoảng cách và nhắm một vòng đạn" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"Một lượt theo chiều kim đồng hồ đầy đủ có 256 đơn vị góc. Mười sáu viên đạn " +"bắt đầu ở góc số không, mười sáu, ba mươi hai, đến 240. Thêm một hướng người" +" chơi ví dụ bốn mươi lượt tất cả mười sáu hướng với nhau; các điểm đạn đầu " +"tiên tại người chơi. Mẫu xoay bằng không." + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "Vòng cố định" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "Viên đạn đầu tiên: góc 0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "Vòng nhắm" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "Viên đạn đầu tiên: hướng người chơi" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "Tâm" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "Người chơi" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "Khoảng cách tương tự: 256 ÷ 16 = 16 đơn vị góc = 22,5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "Ví dụ thực tế" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "Blog" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "Bắt đầu" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "Hướng dẫn" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "Mã nguồn" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "Giấy phép MIT" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "Tham gia cộng đồng" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "Theo dõi trên X" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA * nguồn tập lệnh đã chọn" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "Mã nguồn" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "Đầu ra định dạng dự kiến" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "Hướng dẫn" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "Người gọi" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "Hằng số" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "Chức năng C" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "Nút" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "TẢI TRƯỚC API" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSV tập tin" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "Nhấp chuột của bạn" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "Yêu cầu bị bắt" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "Xuất tập lệnh" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "KẾT quả REA · tóm tắt.trích đoạn ipc" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "TRÍCH ĐOẠN HƯỚNG dẫn REA · 0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA người gọi trích đoạn * 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "KẾT quả byte REA * được hiểu là đôi endian nhỏ" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "Phục Hồi C · trích Đoạn" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "Xem REA hoạt động thế nào ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "Hướng dẫn cài đặt" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "Giới thiệu →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "Cài đặt đã chọn từ tập lệnh được kiểm tra" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "Tóm tắt có thể đọc được của trình xử lý %" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA * hướng dẫn ban đầu được chọn" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "Id nhà điều Hành * Nguồn Của Microsoft" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "Theo dõi @ reatools Trên X" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "Đại lý → REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA → đại lý · kết quả đã chọn" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA → đại lý · phương pháp và người gọi" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA * Đã chọn Java dịch ngược" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "Tóm tắt có thể đọc được · giải thích của đại lý" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA * generateOTP · cơ thể hoàn chỉnh" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "Tải XUỐNG Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "Tải Xuống Nhà cung Cấp Phân Tích Android" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "Đại lý → REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA → đại lý · kết quả đã chọn" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA → đại lý · hướng dẫn đã chọn" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "Đại lý → REA * read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA → đại lý · mục thứ bảy" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "Thực thi ban đầu * SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "Tải xuống thử thách ban đầu" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "Tải về người giải quyết" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "KẾT quả REA · đoạn trích mã giả" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Đại lý → REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → đại lý · trích đoạn hướng dẫn" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA → đại lý · người gọi trích đoạn" + +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "Đại lý → REA * hai {ph0} yêu cầu" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REA byte kết quả * giải mã như đôi" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "Bắt đầu với mục tiêu của riêng bạn" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "Tạo mã" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "Quy tắc phục hồi" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "Đồng hồ có thể điều chỉnh" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "Nhị phân" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "Kiểm tra mã" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "Phương trình" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "Đúng!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "Thực thi" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "PHÁT HIỆN REA" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "Phục Hồi C" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "Xác nhận" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "Ứng dụng đóng gói" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "Api tiếp xúc" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "GIẤY GÓI IPC" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "Clipboard" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "Mã DOS gốc" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA hướng dẫn" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "Tính toán góc" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "Vòng đạn" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "Api trang tiếp xúc" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "Trình kết XUẤT CUỘC GỌI IPC" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "Gửi đến clipboard hệ thống" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Lưu cục BỘ BỞI Notion" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Đầu vào đánh dấu" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "Đầu ra trình phân tích cú pháp có cấu trúc · đoạn trích" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "Phân tích ứng dụng của riêng bạn" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "Đại lý → REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA → đại lý * các trường được chọn" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "Đại lý → REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA → đại lý · trích đoạn hướng dẫn" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "Kết quả chức năng tương tự * aim trích đoạn" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "Tương Ứng Duy Trì C C" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "Vòng macro * chi NHÁNH TH04, đoạn trích" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "Góc và vận tốc * trích đoạn nguồn" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "Nhấn % để xem điều gì xảy ra với 10." + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "10% của 200 là 20. Nhấn = để thêm nó." + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "Đối với phép nhân, 10 trở thành 0,1. Nhấn = để nhân." + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "" +"Bản dịch đang được cập nhật. Đọc trang này bằng tiếng anh ngay bây giờ." + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ DỤNG REA để phân tích {ph3} và giải thích cách nó xuất dữ" +" liệu. Hiển thị mã và vị trí nguồn có liên quan.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Cài đặt REA và kết nối với trợ lý lập trình này bằng {ph3}. " +"Trước tiên, cho tôi xem kế hoạch và chờ tôi chấp thuận. Sau đó, kiểm tra kết" +" quả cài đặt.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}Tải về {ph3} vào một thư mục ví dụ mới và giải nén nó. Sử " +"dụng REA để tìm những gì xảy ra khi tôi nhấp Vào xuất ghi chú. Hiển thị ở " +"đâu {ph4} được viết, trường nào chứa và các tệp và dòng có liên " +"quan.{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Cài đặt REA và kết nối với trợ lý lập trình này bằng {ph3}. " +"Trước tiên, cho tôi xem kế hoạch và chờ tôi chấp thuận. Sau đó, kiểm tra kết" +" quả cài đặt.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Cài đặt REA và kết nối với trợ lý lập trình này bằng {ph3}. " +"Trước tiên, cho tôi xem kế hoạch và chờ tôi chấp thuận. Sau đó, kiểm tra kết" +" quả cài đặt.{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}SỬ DỤNG REA để kiểm tra {ph3}. Sao chép trang web này cho " +"tôi.{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "Tái thiết · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "" +"Với {ph0} và npm có sẵn, chạy thiết lập, chọn đại lý mã hóa của bạn và xem " +"xét các thay đổi được đề xuất." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "Một ví dụ được cung cấp · {ph0} và npm * Đại lý mã hóa của bạn" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"Sử dụng một tác nhân mã hóa như Claude Code, Codex hoặc Cursor. Bạn sẽ cần " +"{ph0} và npm; các {ph1}danh sách hướng dẫn thiết lập các phiên bản được hỗ " +"trợ{ph2}." + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "" +"{ph0}Trang · {ph1}{ph2}{ph3}Xuất ghi chú{ph4}{ph5}Cuộc gọi {ph6}.{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "" +"{ph0}Cầu · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Gửi một tin nhắn có tên đến quy " +"trình chính.{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}Xử lý · {ph1}{ph2}{ph3}Viết {ph4}{ph5}{ph6}Gọi bộ định dạng trong {ph7}" +" và viết tập tin.{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} * dòng 8-12" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}Dự ĐOÁN CSV cho một lưu ý với id 1 và tiêu đề {ph3}. Sau đó " +"chạy ví dụ {ph4} định dạng với {ph5} để kiểm tra nó. Hiển thị dự đoán và đầu" +" ra thực tế.{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "" +"Tiêu đề nằm trong một trường được trích dẫn; mỗi dấu ngoặc kép được nhân " +"đôi. Điều này kiểm tra trực tiếp bộ định dạng với {ph0}." + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV định dạng" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "" +"Bạn sẽ cần {ph0} 22 (22.19+), 24 (24.11+) hoặc 26+. npm đi kèm với {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "Không có {ph0}, hay không chắc chắn?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"Nếu {ph0} bản in v22.19+, v24.11+ hoặc v26+, bạn đã sẵn sàng. Nếu nó in " +"phiên bản cũ hơn hoặc \"không được nhận dạng\" / \"không tìm thấy lệnh\", " +"hãy cài đặt {ph1} 24 KG:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} * trích đoạn nguồn ví dụ" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "{ph0}Mở ví dụ{ph1} · {ph2}Tải về {ph3}{ph4} · {ph5}Tải về {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} * nguồn ví dụ" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "" +"Tải xuống ví dụ và giải nén nó. Kho lưu trữ chứa đầy đủ {ph0} thư mục. Phân " +"tích nó với {ph1} và npm; Electron không cần thiết cho ví dụ này." + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "" +"Lần đầu tiên, hoặc mất tích {ph0} hoặc một đại lý mã hóa? {ph1}Làm theo " +"hướng dẫn thiết lập từng bước →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "Ví dụ: {ph0}vì sao Máy tính cho kết quả 220 khi tính {ph1}?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Sử dụng REA để kiểm tra Windows Máy tính. Tại sao {ph3} cho " +"220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA · đã tải {ph0} * các dòng đã chọn" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "" +"Chúng tôi đã thấy tại sao {ph0}{ph1} cho 220.{ph2} Bây giờ chúng ta hãy khôi" +" phục các quy tắc cho cả + và ×, và thử chúng." + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA đọc {ph1}{ph2}{ph3}Nó khởi chạy ứng dụng Máy Tính{ph4}{ph5}Mã " +"mở ra {ph6}. Sau đó, tác nhân chọn thư viện của ứng dụng đã cài đặt.{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}Sử dụng REA để kiểm tra aegis-v3. 4. {ph3}. Tìm cách nó tạo " +"mã đăng nhập gồm sáu chữ số, giải thích lý do tại sao nó thay đổi sau mỗi 30" +" giây và xây dựng lại một bản demo nhỏ nơi tôi có thể thay đổi thời " +"gian.{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} * THÀNH VIÊN API" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} * TRỢ GIÚP IPC" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "chính/{ph0} * trình trợ giúp xử lý" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "chính/{ph0} * bộ thu clipboard" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "Tái thiết * dino-tốc độ.sk" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "" +#~ "Với Node.js và npm có sẵn, chạy thiết lập, chọn đại lý mã hóa của bạn và xem" +#~ " xét các thay đổi được đề xuất." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "Một ví dụ được cung cấp · Node.js và npm * Đại lý mã hóa của bạn" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "Sử dụng một tác nhân mã hóa như Claude Code, Codex hoặc Cursor. Bạn sẽ cần " +#~ "Node.js và npm; các {ph0}danh sách hướng dẫn thiết lập các phiên bản được hỗ" +#~ " trợ{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "" +#~ "{ph0}Trang * trình kết xuất.sk{ph1}{ph2}Xuất ghi chú{ph3}{ph4}Cuộc gọi " +#~ "{ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "" +#~ "{ph0}Cầu * tải trước · sk{ph1}{ph2}{ph3}{ph4}{ph5}Gửi một tin nhắn có tên " +#~ "đến quy trình chính.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}Xử lý * chính.sk{ph1}{ph2}Viết ghi chú.csv{ph3}{ph4}Gọi bộ định dạng " +#~ "trong {ph5} và viết tập tin.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Dự đoán CSV đối với một lưu ý với id 1 và tiêu đề Xin Chào, " +#~ "\"REA\". Sau đó chạy trình định dạng tocsv của ví dụ với Node.js để kiểm tra" +#~ " nó. Hiển thị dự đoán và đầu ra thực tế.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "" +#~ "Tiêu đề nằm trong một trường được trích dẫn; mỗi dấu ngoặc kép được nhân " +#~ "đôi. Điều này kiểm tra trực tiếp bộ định dạng với Node.js." + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV định dạng" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "" +#~ "Bạn sẽ cần Node.js 22 (22.19+), 24 (24.11+) hoặc 26+. npm đi kèm với " +#~ "Node.js." + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "Không có Node.js, hay không chắc chắn?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "Nếu {ph0} bản in v22.19+, v24.11+ hoặc v26+, bạn đã sẵn sàng. Nếu nó in " +#~ "phiên bản cũ hơn hoặc \"không được nhận dạng\" / \"không tìm thấy lệnh\", " +#~ "hãy cài đặt Node.js 24 KG:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "" +#~ "{ph0}Mở ví dụ{ph1} · {ph2}Tải về xuất khẩu.sk{ph3} · {ph4}Tải xuống ghi " +#~ "chú.jk{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "" +#~ "Tải xuống ví dụ và giải nén nó. Kho lưu trữ chứa đầy đủ {ph0} thư mục. Phân " +#~ "tích nó với Node.js và npm; Electron không cần thiết cho ví dụ này." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "" +#~ "Lần đầu tiên, hoặc mất tích Node.js hoặc một đại lý mã hóa? {ph0}Làm theo " +#~ "hướng dẫn thiết lập từng bước →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "Ví dụ: {ph0}vì sao Máy tính cho kết quả 220 khi tính 200 + 10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Sử dụng REA để kiểm tra Windows Máy tính. Tại sao 200 + 10% " +#~ "cho 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "" +#~ "Chúng tôi đã thấy tại sao {ph0}200 + 10% cho 220.{ph1} Bây giờ chúng ta hãy " +#~ "khôi phục các quy tắc cho cả + và ×, và thử chúng." + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA đọc calc.exe{ph1}{ph2}Nó khởi chạy ứng dụng Máy " +#~ "Tính{ph3}{ph4}Mã mở ra {ph5}. Sau đó, tác nhân chọn thư viện của ứng dụng đã" +#~ " cài đặt.{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Sử dụng REA để kiểm tra aegis-v3. 4. 3.apk. Tìm cách nó tạo " +#~ "mã đăng nhập gồm sáu chữ số, giải thích lý do tại sao nó thay đổi sau mỗi 30" +#~ " giây và xây dựng lại một bản demo nhỏ nơi tôi có thể thay đổi thời " +#~ "gian.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/tải trước.js * THÀNH VIÊN API" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/tải trước.js * IPC trợ GIÚP" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "chính / chỉ số.js * trình trợ giúp xử lý" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "chính / chỉ số.js * bộ thu clipboard" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "chính.js * dòng 8-12" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "xuất khẩu.js * trích đoạn nguồn ví dụ" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "trình kết xuất.js * nguồn ví dụ" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "tải trước.js * nguồn ví dụ" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "chính.js * nguồn ví dụ" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA * chỉ số nạp.js * các dòng đã chọn" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Sử dụng REA để phân tích /absolute/path/to/app và giải thích" +#~ " cách nó xuất dữ liệu. Hiển thị mã và vị trí nguồn có liên " +#~ "quan.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Cài đặt REA và kết nối nó với tác nhân mã hóa này bằng cách " +#~ "sử dụng npx rea-agents@thiết lập mới nhất. Chỉ cho tôi kế hoạch thiết lập để" +#~ " phê duyệt, sau đó xác minh cài đặt.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Tải về https://rea.tools/examples/notes-example.zip vào một " +#~ "thư mục ví dụ mới và giải nén nó. Sử dụng REA để tìm những gì xảy ra khi tôi" +#~ " nhấp Vào xuất ghi chú. Hiển thị nơi ghi chú.csv được viết, trường nào chứa " +#~ "và các tệp và dòng có liên quan.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Cài đặt REA và kết nối nó với tác nhân mã hóa này bằng cách " +#~ "sử dụng npx rea-agents@thiết lập mới nhất. Chỉ cho tôi kế hoạch thiết lập để" +#~ " phê duyệt, sau đó xác minh cài đặt.{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Cài đặt REA và kết nối nó với tác nhân mã hóa này bằng cách " +#~ "sử dụng npx rea-agents@thiết lập mới nhất. Chỉ cho tôi kế hoạch thiết lập để" +#~ " phê duyệt, sau đó xác minh cài đặt.{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}Sử dụng REA để kiểm tra https://rea.tools/. Sao chép trang " +#~ "web này cho tôi.{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "mã[21] = 55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "× pan_scale" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}Kỹ Sư Đảo Ngược Bất Cứ Điều Gì{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/zh-CN/messages.po b/website/locales/zh-CN/messages.po new file mode 100644 index 000000000..f7627ccda --- /dev/null +++ b/website/locales/zh-CN/messages.po @@ -0,0 +1,12298 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: zh-CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted baseline; see website/locales/README.md for review workflow\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}首页{ph1} /博客" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "博客。" + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "逆向工程的思考。" + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "游戏重建{ph0}论文" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "逆向工程的工业革命" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "什么手动重新和重建TH08,TH095和TH04教我关于编程助手,验证和知识,跨项目的化合物。" + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "阅读文章" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "通过N0zoM1z0*10十月2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} 顶部" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA博客-逆向工程的思考" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "对逆向工程的思考,借鉴与 REA 和AI编程助手。" + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "REA-了解软件的工作原理。 逆向工程与你的编程助手." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "REA 首页" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "主导航" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "在 GitHub 查看 REA" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "加入 REA 的 Discord 社区" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "在 X 上关注 REA" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}首页{ph1} / {ph2}博客{ph3} / 东方游戏重建" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "随笔 · 东方游戏重建" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "逆向工程的工业革命。" + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "作者 N0zoM1z0 · 2026 年 10 月 10 日" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "要点" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "{ph0}让编程助手自主开展调查。{ph1}明确目标和验收标准,再让它决定下一步尝试什么。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "{ph0}把代码仓库和 Git 当作工作记忆。{ph1}推理过程和代码一起保存。用 Git 留下检查点,下一次会话就能在对话结束后接着做。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "{ph0}结论要由证据决定。{ph1}说得再肯定,也需要验证。证据不足时,“尚不清楚”是合理的答案。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "{ph0}校验基准本身也要测试。{ph1}故意给它应当拒绝的错误案例。如果它漏掉了 bug,就重新检查依赖这套基准的早期结果。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "{ph0}我们正处于逆向工程工业革命的早期。{ph1}方法还在成形,还有很多值得探索的地方。" + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "经验如何产生复利" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}人来定方向{ph1} · 目标和验收标准" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "自主探索" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "编程助手" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "选择实验。{ph0}提出假设。" + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "验证" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "校验基准" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "对照{ph0}具体的基准验证。" + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "代码仓库" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "工作记忆" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "代码、证据、{ph0}检查和经验。" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "不匹配{ph0}{ph1}修正假设{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "更好的{ph0}{ph1}起点{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "复用" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}通过{ph1} · 保留结果及其证据" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "每个项目都为下一个项目留下更好的起点。发现检查有漏洞时,也要把检查修好。" + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "在本文中" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}2026年8月{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0}TH08:接续前人的工作{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}两种方法{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0}TH095:经验的复利{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04:跨架构{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}从精确到可读{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}工业化的转变{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}新的可能性{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "2026年8月发生了什么变化" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"在这之前,我做过很多手工逆向。我会反复查看一个函数,直到能解释它,再对照程序验证这个解释。想推进项目,就得亲自花更多时间研究下一个函数,脑子里也要记住越来越多的整体关系。" + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"我的逆向工作主要围绕游戏。我希望通过重建弄清游戏的行为,最终做出移植版或 " +"mod。这篇文章来自这些经历。方法可以迁移到其他领域,但每个领域都需要先明确:什么可以用可靠的基准来验证。" + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"2026 年 8 月,我开始认真探索让编程助手做逆向。有了程序本身和常用开发工具,它究竟能走多远?东方游戏重建给了我一个足够完整的项目来寻找答案。" + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"早期的进展让我吃惊。我不再需要为每一步作选择,调查也能持续推进。对比失败后,助手可能转去查看另一个调用方,写一段诊断程序,再根据结果决定下一步。这种自主性改变了我的工作:我可以更多关注项目方向,以及检查是否可靠。" + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "速度先引起了我的注意。随后我开始想:当前项目结束后,什么会留下来?下一个游戏能不能用上我们刚学到的经验?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08:接续前人的工作" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0}TH08{ph1},也就是《东方永夜抄》,从接续{ph2}GensokyoClub " +"的重建工作{ph3}开始。他们的公开源码提供了扎实的基础,也留下了构建经验和贡献历史。我在后续工作中保留了这些历史。" + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"导入的历史截至 8 月 10 日的公开检查点。我的独立续作从 8 月 13 日开始。到 8 月 19 日,进度台账中已识别的 1,107 " +"个游戏函数都有了源码。" + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"8 月 24 日,我们提交了可玩的 Linux 重建移植版,距离开始续作约十一天。随后做出了 Web 版。8 月 30 日,原生 Linux 64 " +"位版发布。" + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"最打动我的是,这些工作最终变成了大家能运行的程序。为此必须解决单个函数以外的问题。即使两个函数分别看起来都对,也可能各自使用一份本应共享的状态。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"这让对照检查成为工作的核心。我把这些基准称为{ph0}校验基准(oracle){ph1}。代码对比可以检查重建函数是否复现原始指令;运行时检查可以确认已走过的路径是否到达预期状态。助手提出解释,再验证它。发现不匹配,就有了具体的调查方向。" + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "常量错了,却仍然“精确匹配”" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "校验工具也是人写的软件。TH08 让我清楚地看到,多少结论都依赖着它。" + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"9 月,下游 Switch 移植版报告了一个 bug,最后追溯到道具自动收集。重建源码把玩家火力与 {ph0} 比较,而原版用的是 " +"{ph1},即满火力的阈值。" + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"正常火力不会小于零,所以重建版的火力条件几乎总是满足。玩家到了收集线上方,不用满火力也会吸取道具。条件里的其他例外没有问题,但这一个常量就改变了行为。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}可这个函数之前已经通过了精确对比。{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"重新编译后,常量可能出现在不同地址。比较工具会先调整编译后指令中的地址,再和原版比较,以处理这种差异。问题是,它从未检查被引用地址中实际存放的浮点值。" + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "漏洞就在这里:工具可以把重建指令的引用地址调整为原版的 {ph0},而源码里写的仍然是 {ph1}。指令字节匹配了,源码含义却不同。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"{ph0}9 月 2 日的修复{ph1}纠正了源码,并让比较工具检查被引用常量的实际字节。随后进行的{ph2}全面审计{ph3}检查了 1,548 " +"处浮点常量引用,又在五个已通过验收的函数中发现十二处错误引用。" + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "现在工具会检查每一处这样的浮点常量。测试还会故意使用错误值,确保工具能够拒绝它们。我们也重新检查了曾经通过旧版检查的结果。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "{ph0}校验基准本身也需要重建。{ph1}修复它,就是修复游戏的一部分。" + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"当团队几乎就是一个人加一群编程助手时,这一点尤其重要。我无法逐行检查它们写出的所有代码,很多信心都来自检查结果。共享校验基准中的盲点,可能在我发现之前就影响许多调查。我必须弄清工具到底验证了什么,再用应当失败的案例测试它。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"随着项目推进,检查程序进入了代码仓库。源码修改的理由也保存在里面,还有让下一次会话能够接着做的记录。{ph0}代码仓库正在成为项目的工作记忆。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "{ph0}每完成一批工作,我们既得到了还原的代码,也改善了下一批工作的环境。{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "两种不同的重建理念" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub 的{ph0}公开 " +"README{ph1}明确表达了对这种工作的异议。公告说,项目完成前,后续开发将在私下进行。其中有这样一段话:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "“这个领域里出现了利用我们成果的投机者(AI 反编译和移植项目),给未来的反编译工作留下了不好的印象……”" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"公告也提到了维护者承受的心理压力。他们的贡献政策不接受主要由 AI 生成的 " +"PR。他们用业余时间投入了艰难的工作,这些成果让我的续作成为可能。我尊重他们付出的努力。我想讨论的分歧,是重建应当如何推进,以及贡献应当如何评价。" + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"在我熟悉的手工流程中,理解一个函数和重建它,通常由同一个人完成。项目非常依赖这个人的专业能力。很多推理发生在工作过程中,所以对贡献者本人的信任很重要。" + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "已有项目本就会在源码和构建工具中保存知识。对我而言,变化在于:编程助手能利用这些知识,自主推进下一次调查。" + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"在我的续作中,我来确定目标和验收标准,助手有充分的调查自由。它提出的重建方案必须通过相应检查。我希望其他人能够看懂我们为什么选择这个实现,即使大部分工作由助手完成。" + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"这可能是一个艰难的转变。多年的细致工作,可能成为一个推进得更快的续作的基础。这会带来真实的归属与署名问题,也改变维护者在接受贡献前需要了解的事情。" + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"工业化的比喻有助于理解这一点。手工作业的过程往往依赖操作者的技艺。机器改变了这些技艺发挥作用的位置,但仍然需要人设计流程、识别错误产出。不同社区可以选择接受多少这样的变化。" + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "我的选择是公开继续,注明继承的工作并保留其历史。我希望新工作可以被审查。这样,我们才能探索这种方法能走多远,也从沿途的问题中学习。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"来源:GensokyoClub 的{ph0}README 公告{ph1}(于 2026 年 10 月 10 " +"日核对)及其{ph2}贡献政策{ph3}。上面的引文为节选译文。TH08 的{ph4}贡献署名与来源记录{ph5}说明了独立续作的起点。" + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095:经验开始产生复利" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0}TH095{ph1},也就是《东方文花帖》,让这些经验的价值更容易看清。仓库于 8 月 29 " +"日建立,当时台账中确认的游戏函数数量为零。我们仍需研究游戏本身,但已经更清楚如何开始重建,以及怎样持续推进。" + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"到 9 月 7 日,全部 697 个已识别游戏函数都有了源码。9 月 8 日,其中 696 个通过了精确对比。9 月 9 日,整个程序完成链接。9 月 " +"10 日,Windows i386 重建版被记录为可玩,距离初始化约十二天。" + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "这比第一个项目的速度更让我兴奋。新目标能受益于另一个游戏的工作。经验已经进入工具,也进入了项目的组织方式。" + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"例如,TH08 教会我们尽早关注整个程序。如果几个还原函数依赖同一份状态,分别对比它们仍然会留下一个关键问题:它们能否一起正常工作?这条经验影响了 " +"TH095 的整程序构建方式。" + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"经验只记在我脑子里,我在场时它才有用。变成其他会话能运行的检查后,即使我离开,它仍能帮助项目。下一个助手可以利用检查结果,不用重复当初得出这条经验的调查。" + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"浮点常量的 bug 也属于这份记忆。它说明,检查引用时,还要检查引用背后的数据。把修正保存在代码旁边,可以帮助后续项目避免继承旧工具的盲点。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "{ph0}方法本身成了下一个游戏的起始材料。{ph1}我们可以把更多精力放在新目标真正不同的地方。" + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "后来加入的人也能受益。他们可以查看某个决定,重新运行检查,再继续工作。不用先重走整个项目的历史,才能理解源码为何这样写。" + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04:换了架构,工作方式仍然适用" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0}TH04{ph1},也就是《东方幻想乡》,把这套工作带到了 PC-98 DOS 时代。这次是一个由四个程序协作的 16 " +"位环境。理解硬件行为,需要和 Windows 游戏不同的证据。已有的{ph2}ReC98 工作{ph3}同样提供了宝贵的知识与源码材料。" + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"DOS 重建版现在已经能运行。我手工打完了完整的 Normal 路线,看到结局,并检查了存档。目前正在做原生 64 位移植。先得到一个正常工作的 DOS" +" 版,就为移植提供了参照。" + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "架构改变了要调查的问题,也改变了用来验证的编译器和运行时。但助手依然能沿着问题找到结果,再用结果指导下一次实验。" + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"比如从游戏过程切换到结局:哪些状态需要跨越这个边界?哪个程序负责它们?我们可以对照 DOS 原版调查。只要证据和检查可用,助手就能像研究 Windows" +" 游戏一样推进这个问题。" + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "这就是 TH04 对这篇文章的意义。大幅的平台变化,并没有迫使我们重新发明一套工作方式。架构决定了问题,工作流程仍然提供了解决问题的方法。" + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "做 64 位移植时,我们可以把新实现与 DOS 上已经还原的行为对照。重建得到的知识为移植提供了基础。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "截至 2026 年 10 月 10 日:{ph0}DOS 重建与手工测试{ph1} · {ph2}64 位移植{ph3}。移植仍在开发中。" + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "从精确还原到可读源码" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "重建版能运行之后,我还希望别人能读懂它。" + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"对我而言,汇编和原始偏移就像老朋友。我知道,这种“可读”的定义有点特别。多数人更希望直接看懂游戏逻辑,而不用在脑中记住可执行文件的内存布局。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"这就需要{ph0}语义重建{ph1}。一个还原字段可能仍然只有偏移作为标识。我们追踪游戏如何使用它,直到能解释其作用,再依据证据赋予合适的名称和类型。推理过程和源码一起保存,后来的人就能知道这个解释从何而来。" + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"移植时,语义尤其重要。绝对地址能告诉我数据在旧程序中的位置,却很难帮助 64 " +"位实现决定哪个对象应当持有这份状态。要正确迁移行为,就得还原旧内存访问背后的关系。" + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "我现在采用这样的顺序:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}先建立精确还原的基线。{ph1}用当年的编译器编译重建代码,与原始可执行文件对比相关代码和数据。记录尚未解决的差异,让下一阶段有明确的起点。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}在原平台上构建,并实际游玩。{ph1}用原架构和编译器把各部分链接为真正的程序,走过重要的游戏路径。这能发现单函数对比漏掉的共享状态或初始化问题。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}对照两套基准做语义重建。{ph1}每次处理游戏中一个完整、连贯的部分,明确还原源码的含义。改善代码表达,同时保留精确对比和可玩的原平台构建。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "{ph0}再做现代平台移植。{ph1}把已经确定的行为带入新环境,例如原生 64 位构建。原平台重建版继续作为比较移植行为的参照。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"第二阶段的可玩构建,在第三阶段成为{ph0}第二套校验基准{ph1}。第一套检查修改后的源码是否仍然复现原版相关代码和数据;第二套检查重建程序是否能构建,并在实际测试的路径上保持正确行为。" + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"它们能发现不同类型的错误。类型修改可能改变生成的指令。状态归属的修改,可能让游戏的两部分各自使用一份状态。保留两套检查,助手就能在继续重构之前,针对具体的失败展开调查。" + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"命名也需要自己的证据。精确对比不能证明某字段一定是“无敌时间”。我们必须从游戏如何写入和使用它来确认。如果含义仍不明确,中性名称比自信的猜测更有利于下一位读者。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"这个顺序来自项目中的教训。TH08 在后来的一些原平台审计之前,就已经有了可玩的移植版,一些缺陷因此更难察觉。{ph0}Factory " +"目前的工作流程{ph1}把原平台构建放在前面,让语义重建先有参照,再开始移植。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "{ph0}精确重建提供基准,语义重建让还原的知识可用。{ph1}移植随后建立在两者之上。" + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "为什么这是工业化的转变" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"这些项目改变了我投入注意力的地方。助手能自主推进大部分调查之后,改善它们的工作环境,就成了我最值得做的事情之一。一项工具的改进,可以帮助之后所有需要它的函数。" + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"自主性在这里很重要。下一步该怎么做,常常在实验失败后才清楚。助手需要足够的自由,沿着结果探索意料之外的方向。如果每一步都要等我指定,大部分工作仍然绑在我的注意力上。" + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"我预期助手会提出错误假设。关键是我们能否验证它们,并从结果中学习。失败的检查应该帮助它理解错误,再次尝试。我仍要判断:累积的证据是否足以支持某个项目里程碑。" + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA " +"让助手能够使用分析工具。调查某函数的调用方时,它可以直接继续检查那个调用方。重建项目提供编译器和自己的对照检查。助手用它们验证提出的源码,看看解释在哪些地方成立。" + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"TH08 的 bug " +"说明,检查工具本身也值得认真工程化。相同的比较用于数百个函数时,一个漏洞的影响可能远大于某个实现中的错误。测试检查器,能改善所有后续工作得到的反馈。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"工业史中有一个合适的例子:博尔顿和瓦特在{ph0}1796 " +"年引入蒸汽机示功器{ph1},帮助调节阀门。记录式示功器能绘出活塞行程中的压力变化,让人看到机器内部的运行情况。我们的比较工具也有类似作用:改进机器时,能看清它究竟做了什么。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}我们正处于这场工业化转变的早期。{ph1}许多基础设施还不成熟。助手推进工作的速度,可能超过原有检查的承受能力,所以流程也要一起发展。共享工具出现缺陷时,要修好它,并重查受影响的结果。下一个项目才能继承更可靠的工具。" + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "任何一段对话都有实际的长度限制。大型重建完成之前,对话就会结束。代码仓库必须让下一次会话能继续工作,而不丢失上一次决定背后的理由。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"{ph0}Touhou Reconstruction " +"Factory{ph1}正是为此而建立。它提供一种共用方式,让项目把检查和经验传递下去。一个游戏的工作,可以改善另一个游戏的起点。" + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "这就是工业化比喻对我的意义:经验开始进入别人也能使用的工具。改善工具,就能改变下一个人或下一个助手能完成多少工作。" + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "现在值得尝试的项目" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "速度的意义在于,它改变了是否开始一个项目的决定。某个游戏也许很值得逆向,却需要我投入远超现实所能承受的精力。很多项目因此一直停留在想法里。" + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"现在,我看到了通过一次次调查持续推进它们的可能。得到能运行的重建版,让移植更可行;还原可读的语义,让别人更容易探索 " +"mod。理解游戏的投入,可以在第一版运行之后继续带来回报。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "现在看到一个陌生程序,我会问:{ph0}怎样的工具访问、反馈和知识积累,能让助手可靠地推进这个项目?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "这个问题让我考虑以前会放弃的项目。每个项目都能改善下一个项目的工作方式。我想继续探索,这能带我们走多远。" + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "项目里程碑与来源" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"这些日期是已记录的项目检查点,于 2026 年 10 月 10 日对照公开 GitHub " +"历史核实。耗时是提交之间经过的日历时间。“有源码”“通过精确对比”“完成构建”和“得到运行结果”是不同的里程碑。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0}TH08:{ph1}{ph2}8 月 13 日开始续作{ph3}、{ph4}8 月 19 日源码台账{ph5}、{ph6}8 月 24 日 " +"Linux 移植{ph7}、{ph8}8 月 26 日 Web 版{ph9}、{ph10}8 月 30 日 64 位 Linux 发布{ph11}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0}TH095:{ph1}{ph2}8 月 29 日初始台账{ph3}、{ph4}9 月 7 日源码台账{ph5}、{ph6}9 月 8 " +"日对比结果{ph7}、{ph8}9 月 9 日链接{ph9}、{ph10}9 月 10 日可玩构建记录{ph11}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0}TH04:{ph1}{ph2}10 月 10 日交接记录{ph3}包含可运行的 DOS 重建版、维护者完成的 Normal " +"路线测试,以及当前的 64 位移植阶段。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0}TH08 校验基准修正:{ph1}{ph2}道具自动收集 bug " +"报告{ph3}、{ph4}源码与比较工具修复{ph5}、{ph6}全部浮点常量审计{ph7}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "{ph0}语义重建:{ph1}{ph2}TH08 可读性指南{ph3}和{ph4}Factory 的阶段顺序及两条验证路径{ph5}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "{ph0}工业史:{ph1}{ph2}英国科学博物馆集团的蒸汽机示功器记录{ph3}介绍了 1796 年的引入及压力记录机制。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "{ph0}方法:{ph1}Factory 的{ph2}助手自主性{ph3}与{ph4}跨游戏知识{ph5}文档保存了工作原则和经验。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}更多文章{ph1} · {ph2}查看 TH04 逆向案例{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "逆向工程的工业革命-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "N0zoM1z0 回顾从手工逆向到编程助手参与的东方游戏重建,以及经验如何在 TH08、TH095 和 PC-98 TH04 之间积累。" + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "在项目之间传递经验" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "东方游戏重建随笔" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}首页{ph1}{ph2}/{ph3}恐龙速度实验室" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "检查→重建→更改" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "重建恐龙的速度规则。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"要重新创建游戏的加速,首先找到控制其速度的规则。 {ph0} REA返回运行脚本;{ph1} 我们用它的规则来构建这个迷你游戏。 " +"{ph2}速度可调。{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "在本页" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}播放和改变速度{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}读取恢复的规则{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}检查重建{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}试试分析{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "播放和改变速度" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "按播放,然后跳过仙人掌。 移动速度滑块尝试更慢或更快的游戏;它切换到固定的速度。 选择恢复的规则从6开始,然后再次逐渐加速。" + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "试玩重建版" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "开始" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "跳跃 ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "重新开始" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "速度" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "使用恢复的加速规则" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "原始规则:从6开始,然后向13增加。" + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "移动滑块来设置自己的速度。 空间或跳跃清除仙人掌。" + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "启用JavaScript播放重建。 上面的代码和解释仍然是可读的。" + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "读取脚本REA返回" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"我们检查过 {ph0}wayou的Chromium派生浏览器版{ph1} 与REA。 它返回加载 {ph2},将此分支包含在游戏的更新功能中:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "设置是 {ph0}, {ph1} 和 {ph2}. 游戏在没有碰撞的更新上运行此分支。" + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "在新游戏中使用相同的规则" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "复制" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"迷你游戏使用此功能进行自动加速。 移动滑块提供了一个固定的速度代替. " +"绘图,跳跃物理和矩形碰撞检查是这个教学游戏的新代码;它的模拟以每秒60次更新的速度前进。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}下载速度规则{ph1} · {ph2}阅读游戏代码{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "检查重建" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "我们称原来的游戏的更新功能与障碍和自动调度禁用。 将这些记录的速度与恢复规则的重播进行比较。" + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "更新资料" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "原创游戏" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "重建规则" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "运行速度检查" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "四舍五入为三位小数的值。 分支在添加之前进行检查,因此最终增量可以采用略高于13的速度。" + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "自己试试分析" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}设立 REA{ph1} 用你的编程助手。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "跟随 {ph0}浏览器连接步骤{ph1},使用 {ph2} 作为页面URL。" + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "为你的编程助手提供页面URL和本地调试端点,然后复制此提示。" + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA检查这个恐龙游戏。 为什么它变得更快? " +"显示速度规则,然后构建一个可调节速度的小版本。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "要求跟进: {ph0}\"跳跃高度在哪里计算? 在新版本中添加跳高控件。”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"资料来源: {ph0}检查速度代码{ph1},Chromium作者。 {ph2}版权及BSD许可证{ph3}. " +"REA4.1.0检查了Chrome150中运行的HTTP版本。" + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome恐龙游戏:重建其速度规则-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "阅读恐龙游戏的速度规则与REA,重建它,然后改变速度和发挥。" + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "恐龙速度重建" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "恐龙迷你游戏。 使用跳跃按钮或按空格键,而游戏是重点。" + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "复制重建速度规则" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "复制恐龙分析提示" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}首页{ph1} / FAQ" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA 常见问题。" + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "安装、更新、分析和故障排查。" + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "主题" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}安装与更新{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}分析{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}故障排除{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}数据与分享{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "安装与更新" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "如何安装 REA?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "终端 · 配置编程助手" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "复制" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"setup 会注册 REA 的 MCP " +"连接,并安装配套的调查技能。完成后重启助手,再提供目标路径和问题。{ph0}查看安装指南{ph1},了解前置条件和第一次分析的步骤。" + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "哪些编程助手能使用 REA?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"支持本地 MCP 服务器的助手都可以。setup 提供 Claude Code、Claude Desktop、Codex、Cursor、Gemini " +"CLI、Windsurf、Devin、OpenCode、Antigravity、GitHub Copilot CLI、Command Code、Grok" +" Build、OMP 和 VS Code 的配置。Grok Bot 的连接器从聊天中添加。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}连接编程助手{ph1}。" + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "如何更新 REA?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "REA 更新很频繁,也会持续修复 bug。如果你通过 npm 安装了 CLI:" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "终端 · 已安装的 CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "更新后,按照输出中的命令刷新配置。如果之前通过 {ph0} 配置助手,运行:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "终端 · 刷新助手配置" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"检查变更后,重启编程助手。REA 的连接配置指定了包版本,重新运行 setup 才会让助手使用新版本。临时执行 CLI 命令时,在 {ph0} " +"后面接具体命令即可。" + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "只从 skills.sh 安装技能就够了吗?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"技能告诉助手如何开展调查。还需要运行 {ph0}REA setup{ph1},连接 MCP 服务器并安装配套技能。随后重启助手,它才能调用工具。" + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "分析" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "REA 可以分析什么?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "根据手里的软件类型选择:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "{ph0}原生可执行文件和库{ph1}:函数、汇编、伪代码和引用。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "{ph0}JavaScript 和 Electron 应用{ph1}:模块、导入、IPC 和源码位置。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "{ph0}浏览器页面{ph1}:脚本、请求和运行时观察。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "REA 也提供托管程序集、Android APK、固件和打包资源的分析流程。{ph0}查看案例{ph1},了解完整的调查过程。" + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "需要 Hopper、Ghidra 或 IDA 吗?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "深度原生分析需要其中一个工具。静态 JavaScript 和 .NET 检查直接使用提供的文件,不需要原生分析引擎。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"连接已有的 Ghidra 或 IDA 安装,或让 setup 检测 Hopper " +"并提出安装计划。可用的分析后端取决于你的系统和分析目标。{ph0}配置原生分析{ph1}。" + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "不用编程助手,也能用 REA 吗?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "可以。CLI 使用同一套分析流程。对于本地 JavaScript 或 Electron 应用:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "终端 · 静态应用分析" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "把路径换成解包后的应用目录或 ASAR 文件。{ph0}查看 CLI 的安装方式{ph1}。" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "REA 会返回什么代码?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "原生程序分析返回汇编、伪代码、函数调用、引用和相关常量。JavaScript 分析返回模块、模块之间的关系,以及源码位置。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"助手根据这些结果解释行为,或编写实现并测试。{ph0}DX-Ball 计算规则{ph1}和{ph2}CTF flag 检查器{ph3}展示了这个过程。" + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "应该向助手提什么问题?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "提供一个本地目标,以及一个想调查的行为。比如 JavaScript 或 Electron 应用:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "把路径换成自己的目标。{ph0}指南{ph1}提供了原生、Electron 和浏览器示例的 prompt。" + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "故障排除" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "为什么助手看不到 REA 工具?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "安装后重启或重新连接助手。用 {ph0} 检查 REA 注册情况。以 Codex 为例:" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "终端 · 检查一个客户端" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "把 {ph0} 换成客户端 ID,例如 {ph1} 或 {ph2}。如果报告显示注册缺失或过期,为这个客户端运行 setup:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "终端 · 修复一个客户端的配置" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "确认计划后重启客户端。如果注册正常但工具仍未出现,检查客户端的 MCP 连接错误。{ph0}查看更多配置诊断{ph1}。" + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "需要先启动 Hopper 吗?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA 会在操作需要时启动 Hopper。在 macOS " +"上,首次使用时先完成演示模式或许可证激活的选择,再进行无人值守分析。{ph0}查看原生分析配置{ph1}。" + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "遇到 bug 怎么办?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "先{ph0}更新 REA{ph1},重启助手,再试一次相同任务。新版本可能已经修复这个问题。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"如果问题仍然存在,{ph0}提交 issue{ph1},附上 REA 版本、操作系统、目标类型、复现步骤和错误输出。涉及原生分析时,也写明分析后端。" + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "数据与分享" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "REA 会上传我的应用吗?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "REA 在你的机器上分析目标。助手会收到分析结果,这些结果受其模型服务商的数据政策约束。" + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "如何分享案例或参与贡献?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"做出了有用的 REA 案例?我们很想看看!通过 {ph0}issue{ph1} 或 {ph2}PR{ph3} " +"分享目标、问题、结果,以及如何验证。简短的代码片段和图示,能帮助大家理解调查过程。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "也欢迎反馈 bug、提出需求、改进文档和代码。你还可以在{ph0}社区{ph1}里讨论自己的案例。" + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA FAQ:安装、更新与故障排查" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "解答 REA 的常见问题:安装、更新、分析工具、编程助手、故障排查和分享案例。" + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "REA 常见问题" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "复制REA设置命令" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "复制REA更新命令" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "复制编程助手设置刷新命令" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "复制REA CLI分析命令" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "复制示例分析提示" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "复制客户端诊断命令" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "复制作用域设置命令" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}首页{ph1} / 第一次调查" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "弄清楚{ph0}导出的笔记写到哪里。" + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "用 REA 检查一个小应用,追踪 Export notes 按钮,再亲自验证一个细节。" + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "在这个练习中" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. 配置{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. 询问导出过程{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. 追踪回答{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. 检查预测{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. 再问一个问题{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. 把助手连接到 REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "复制" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "或者在终端中运行此命令:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "查看计划,确认配置后重启助手。如果已经连接,直接继续。" + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. 问清 CSV 写到哪里" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"示例是一个包含六个文件的 Electron 应用,带有{ph0}Export notes(导出笔记){ph1}按钮。助手无需安装或启动 Electron" +" 就能检查代码。" + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "助手会下载并解压文件,再把目录交给 REA 检查。" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}下载示例ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "如果助手不能下载文件,你也可以手动解压。把 {ph0} 文件夹的路径交给它,再问同一个导出问题。" + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. 从回答追踪到代码" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "寻找带文件和行号的简短解释:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "按钮发送 {ph0} 消息。主进程把笔记转换为 CSV,并将 {ph1} 写到用户的下载文件夹。列名为 {ph2} 和 {ph3}。" + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "从按钮到文件写入" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "REA 的静态分析把消息和处理函数关联起来。导出位置是从代码中读到的。" + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "文件路径、格式化函数和写入调用都在这个处理函数中。如果回答没有展示这些行,可以让助手补上。" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}查看完整的代码追踪和记录的 REA 结果{ph1}。" + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. 检查预测" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "CSV 用逗号分隔各列。如果笔记标题本身包含逗号或引号,会发生什么?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "自己检查一下" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "在解压后的 {ph0} 文件夹里打开终端:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"这条命令需要 Bash、Zsh 等支持 here-document 的 shell。助手也可以在你的系统 shell 中运行同样的 " +"JavaScript。" + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. 再问一个问题" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "在同一段对话中继续提问:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "如果文件无法写入,会发生什么?沿着错误处理追踪回页面。" + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "也可以提供自己的应用,询问其中一个按钮、文件或行为。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "{ph0}Notion 如何复制文本和 HTML{ph1}{ph2}追踪打包 Electron 应用中的剪贴板功能。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "{ph0}DX-Ball 如何计算声音左右位置{ph1}{ph2}查看原始指令,以及重建结果的验证。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "{ph0}安装或分析遇到问题{ph1}{ph2}先更新 REA,再检查连接。{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "你的第一次逆向工程调查-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "用小型 Notes 应用尝试 REA。配置助手,询问导出的笔记写到哪里,再用一个示例标题验证 CSV 格式化函数。" + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "你的第一次REA调查" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "复制REA安装提示" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "复制安装命令" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "复制笔记调查提示" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "复制CSV检查提示" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "复制格式化程序检查命令" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}首页{ph1} / 开始使用" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "安装与配置 REA。" + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "把 REA 连接到编程助手,或从终端检查本地应用。" + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "打开终端,检查版本:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "终端机" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "复制" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0}Windows(PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "WindowsQ" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "如果提示接受条款,输入 Y。关闭 PowerShell,再次打开,然后运行 {ph0}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"如果之后运行 {ph2} 时,PowerShell 提示{ph0}“running scripts is disabled on this " +"system”{ph1}(系统禁止运行脚本),运行下面的命令一次,再重试:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "如果你使用 Homebrew:" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS*Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "其他情况:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "关闭终端,重新打开,然后运行:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "安装程序需要 {ph0} 和 {ph1}(Debian/Ubuntu 上用 {ph2} 安装)。关闭终端,重新打开,然后运行:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "发行版自带的 {ph0} 包经常早于 22.19。如果使用它,请用 {ph1} 确认版本。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "更喜欢普通安装包?从 {ph0}nodejs.org{ph1} 下载 LTS 版。" + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "配置方式" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}连接编程助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}使用CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}配置原生分析{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}寻求帮助{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "连接编程助手" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"运行 setup,把 REA 连接到编程助手。可选择 Claude Code、Codex、Cursor、Gemini CLI、Windsurf、Grok" +" Build 和其他受支持的 MCP 客户端。Grok Bot 的连接器从聊天中添加。" + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "第一次使用编程助手?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"编程助手是一种在你的电脑上工作、而不只待在浏览器页面里的 AI 助手。它能读取文件、运行命令,并在修改前征求确认。REA 为它提供逆向工程工具。" + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "如果还没有助手,选择一个,按照其安装页面操作并登录:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "{ph0}{ph1}Claude Code{ph2}{ph3},由 Anthropic 开发,需要付费 Claude 套餐。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "{ph0}{ph1}Codex{ph2}{ph3},由 OpenAI 开发,用 ChatGPT 账号登录。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "{ph0}{ph1}OpenCode{ph2}{ph3},开源,可以连接你选择的模型服务商。" + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "打开助手,把下面的 prompt 复制进去。助手会运行 REA setup,并在执行更改前展示计划。" + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "也可以自己运行 setup" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "怎么打开终端?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "{ph0}Windows:{ph1}打开开始菜单,输入 {ph2}PowerShell{ph3},按 Enter。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "{ph0}macOS:{ph1}按 {ph2} {ph3},输入 {ph4}Terminal{ph5},按 Enter。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "{ph0}Linux:{ph1}多数桌面环境可以按 {ph2} {ph3} {ph4}。" + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"用 {ph0} {ph1} 粘贴命令(macOS:{ph2} {ph3};Linux 终端:{ph4} {ph5} {ph6}),再按 Enter。" + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "选择客户端,并查看配置计划。REA 会添加 MCP 连接和配套调查技能,同时备份已有配置。确认后才会应用更改。" + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "配置完成后重启客户端。" + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "如何重启客户端?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}桌面应用{ph1}(Claude Desktop、Cursor、Windsurf、VS Code):完全退出后再打开,只关窗口不够。macOS" +" 上按 {ph2} {ph3};Windows 上,如果有托盘图标,也要从那里退出。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "{ph0}终端助手{ph1}(Claude Code、Codex、Gemini CLI):退出当前会话,再启动一次。" + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "给助手目标路径和一个具体问题。比如 JavaScript 或 Electron 应用,可以这样开始:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "检查 {ph0},找出它如何导出数据。展示涉及的入口点、函数调用和依赖,并给出分析结果对应的源码位置。" + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "把路径换成自己的本地目标。" + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "怎么取得文件夹的完整路径?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1}在文件资源管理器中右键文件夹,选择{ph2}“复制文件地址”{ph3}。Windows 10 上,按住 Shift " +"再右键。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "{ph0}macOS:{ph1}在 Finder 中右键文件夹,按住 Option,选择{ph2}“将…拷贝为路径名称”{ph3}。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "{ph0}所有系统:{ph1}把文件夹拖进终端窗口,也能显示路径。" + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "在终端里,包含空格的路径需要加引号。" + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "使用CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "静态分析 JavaScript 或 Electron 应用目录、ASAR 文件,无需启动应用:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "静态应用分析" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "把路径换成解包后的应用目录或 {ph0} 文件。Windows 上也可以使用 {ph1} 这样的路径。" + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "在哪里找到应用的 .asar 文件?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron 应用通常把它放在 {ph0} 文件夹中:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "{ph0}macOS:{ph1}{ph2}(右键应用,选择{ph3}“显示包内容”{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0}Linux:{ph1}通常位于 {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "有些应用安装在其他位置。在应用目录里搜索 {ph0}。" + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "结果会识别应用,展示模块之间的关系,并给出源码位置。REA 无法解析的关系会在结果中注明。" + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "如果希望在 shell 中直接使用 {ph0} 命令:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "安装CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}继续看 JavaScript 应用指南{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "配置原生分析" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "原生二进制需要本地分析工具。在下面选择并配置一个工具,再提供可执行文件或库。" + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "选择工具:Ghidra、Hopper 或 IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"在 Linux 或 macOS 的 x64、arm64 上,使用已有的 Ghidra 12.1.x 和 64 位 JDK 21 或更新版本。Ghidra" +" 需要对应主机架构的原生反编译器。运行 setup 前先设置路径:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "连接已有的 Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra 连接 · macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"把两个路径换成自己的安装位置。setup 会检查路径,并为选定客户端保存有效配置。Linux arm64 上可能需要另行构建 Ghidra " +"原生反编译器。" + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "在 Windows 上连接 Ghidra" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 提供实验性的只读支持:分析固定本地 NTFS 驱动器上的原生 x86、x64 PE 应用和 DLL。使用已有的 Ghidra " +"12.1.x 和 64 位 JDK 21 或更新版本:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra 连接 · Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "把两个路径换成安装位置,再查看 setup 计划。" + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "在 macOS 或 Linux 上连接 Hopper。运行上面的 setup 命令,它会检测已有安装,或提出安装计划供你确认。" + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "在 macOS 上,首次使用 Hopper 时先完成演示模式或许可证激活的选择,再做无人值守分析。" + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"已验证的 IDA 配置使用 Windows,连接已有的 MCP 注册,可附加到 GUI,也可使用无界面数据库。Linux 和 macOS " +"的无界面分析仍未验证。" + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "连接已有的 IDA MCP 注册" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"把上游服务器可用的 {ph0}、{ph1} 和可选的 {ph2} 保存在 JSON 文件中。已有的 {ph3} 对象中包含 {ph4} 条目也可以。运行" +" setup 前让 REA 指向这个文件:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA 连接 · Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"附加配置使用上游 legacy 1.4.0 工具,原始二进制应已在 IDA 中打开。无界面配置使用上游 database-supervisor " +"API,以及包含 {ph0} 的注册;实际验证覆盖 IDA 9.3 Windows x64 supervisor。doctor 只检查注册,不会启动 " +"IDA。" + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"给 REA 原始可执行文件的路径,在 CLI 查询中加入 {ph0}。使用编程助手时,把 {ph1} 加入 REA 注册的环境配置,并在打开二进制时选择" +" IDA。" + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "已配置 Ghidra 时,可以这样检查函数:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "函数分析" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "把 {ph0} 换成要检查的函数名或地址。" + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "原生分析会话如何工作" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "每条 CLI 命令导入并分析二进制文件,完成后关闭会话。助手的 MCP 查询会在会话保持打开时复用已导入的二进制文件。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "{ph0}跟着原生分析示例{ph1},看看函数结果如何帮助还原计算规则。" + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "寻求帮助" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "助手看不到 REA 工具时" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "配置后重启或重新连接客户端。用 {ph0} 检查 REA 连接。以 Codex 为例:" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "检查一个客户端" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "分析后端出现问题时" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "检查正在使用的分析后端。以 Ghidra 为例:" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "检查一个分析后端" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "报告会列出失败的检查和建议的下一步。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "{ph0}REA FAQ{ph1}{ph2}关于更新、助手和分析的常见解答。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "{ph0}选择调查指南{ph1}{ph2}二进制、Electron 应用和浏览器的完整示例。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "{ph0}GitHub issues{ph1}{ph2}附上命令与诊断结果,反馈问题。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "{ph0}REA 社区{ph1}{ph2}交流问题、调查和正在进行的工作。{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "安装 REA 并配置编程助手" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "把 REA 连接到编程助手,或用终端检查本地 JavaScript、Electron 应用。包含配置、首次提问和原生分析后端指南。" + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "复制Node.js版本检查" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "复制Node.js的Windows安装命令" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "复制PowerShell执行策略命令" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "复制 Homebrew Node.js 安装命令" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "复制macOS的fnm安装命令" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "复制 Node.js 24命令 macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "复制Linux的fnm安装命令" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "复制 Node.js 24命令 Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA入门指南" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "复制REA安装提示" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "复制编程助手设置命令" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "复制JavaScript分析命令" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "复制CLI安装命令" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "复制ghidra连接 · macos/linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "复制 Ghidra 连接 Windows PowerShell的" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "复制 IDA 连接 Windows PowerShell的" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "复制原生函数分析命令" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "复制客户端诊断命令" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "复制提供者诊断命令" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}首页{ph1} / {ph2}指南{ph3} /浏览器观察" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "看看会发生什么{ph0}当你点击。" + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "使用小型浏览器应用程序连接操作,其网络请求和构建下载的JavaScript。" + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "在本指南中" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}例子{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}打开浏览器{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}问问你的编程助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}从CLI捕获 {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}阅读请求和脚本{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "单击导出时会发生什么?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"{ph0}Notes 浏览器示例{ph1}有一个{ph2}Export notes(导出笔记){ph3}按钮。点击后加载 {ph4},把两条笔记格式化为" +" CSV,再开始下载。" + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "从点击到CSV下载" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "{ph0}01 · 你{ph1}{ph2}点击 Export notes{ph3}{ph4}在捕获进行时,用浏览器执行操作。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "{ph0}02*REA {ph1}{ph2}记录请求{ph3}{ph4}从所选页面捕获请求URL,响应状态和JSON结构。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 · 编程助手{ph1}{ph2}读取导出代码{ph3}{ph4}把观察到的请求与 {ph6} 中的 {ph5} 关联起来。{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "在单击导出注释之前开始捕获。" + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "使用远程调试打开Chrome" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "用独立的浏览器配置和本地调试端口打开在线 Notes 示例。Linux 上:" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "启动示例浏览器" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "复制" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "在macOS或Windows上使用已安装的浏览器的可执行路径。 你可以将页面URL替换为要检查的其他页面。" + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "REA连接到这个现有的浏览器。 你可以控制页面,执行操作,并在完成后关闭浏览器。" + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "让你的编程助手看一个动作" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 检查这个页面。我点击 Export notes 时,它发起什么请求?CSV " +"是怎样生成的?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "示例 prompt。把调试地址 {ph0} 和页面网址交给助手。等它开始捕获,再点击按钮。" + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "你的编程助手发现页面目标,启动观察窗口,并读取生成的证据。 然后,它可以检查导出后面的脚本。" + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "或从终端捕获" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "查找页面的目标ID:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "查找页面" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "选择网址为 Notes 示例的目标,把下面的 {ph0} 换成目标 ID,再运行:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "捕捉接下来的十秒" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "让命令连接几秒钟,再在浏览器中点击{ph0}Export notes{ph1}。观察时间窗口结束后会返回结果。" + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "捕获的结果包括所选页面、该窗口期间的网络活动以及JSON响应的形状。 较早的请求在此捕获之外。" + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "读取请求和导出脚本" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "在本地笔记示例中用REA4.1.0记录" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "捕获的事实" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "数值" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "请求" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "回应" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "请求发起者" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} · 脚本" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "响应结构" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} 与 {ph1} 和 {ph2} 字段" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "阅读加载的脚本" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "请求指出了数据来源,REA 记录的请求发起方是 {ph0}。读取捕获的脚本源码,看看它如何使用数据:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "下载是使用JSON响应在页面中构建的。 CSV格式化步骤来自脚本;网络捕获建立此单击请求 {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "查找请求的脚本 {ph0}. 它如何转义包含逗号或引号的标题?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "对于已安装的JavaScript或Electron应用程序,请继续 {ph0}应用程序工作流程{ph1} 要遵循文件和进程边界。" + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "浏览器和网络分析-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "观察一个笔记导出与 REA:选择浏览器页面,捕获单击,检查请求并遵循导出脚本。" + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "浏览器观察" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "复制启动示例浏览器" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "复制示例提示" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "复制查找页面" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "复制捕获接下来的十秒钟" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "复制读取加载的脚本" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}首页{ph1} /指南" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REA 分析指南。" + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "分析本机函数、Electron导出或浏览器请求。 每个指南包括提示,代码和结果。" + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "第一次调查" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "设置REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "连接你的编程助手或使用 REA 从终端。" + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "开始使用 REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "原生二进制" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "恢复左/右声音位置的计算" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "从Windows游戏可执行文件开始。 检查指令,跟随调用者,读取数字常量并检查恢复的C。" + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "原生分析指南" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "追踪 CSV 导出" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "一个小Notes应用程序在渲染器,预加载和主进程中传播一个功能。 使用REA连接API,IPC通道和文件编写器。" + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript&Electron指南" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "对于更大的打包应用程序,请遵循 {ph0} Notion的剪贴板桥{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "浏览器行为" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "观察点击" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "打开工作笔记示例,捕获导出请求并找到将其响应转换为下载的代码。" + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "浏览器观察指南" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "逆向工程指南-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "通过简短的示例学习REA:本机计算,Electron CSV导出和浏览器请求。" + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}首页{ph1} / {ph2}指南{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "追踪安 Electron{ph0}CSV 导出。" + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "按照一个按钮点击从页面API,通过Electron IPC,到CSV文件编写器。" + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "在本指南中" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}例子{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}问问你的编程助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}跟踪导出代码{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}试试这个例子{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}检查CSV写入器{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "\"Export notes(导出笔记)\"去哪儿了?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"本指南使用一个小型 Electron 应用。点击{ph0}Export notes(导出笔记){ph1}后,页面调用 " +"API,通过进程边界进入主进程,最后写出 CSV。这个行为分散在几个文件中。" + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "该 CSV 跨导出 Electron 过程" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "{ph0}渲染器→预加载{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} 调用由 {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "{ph0}进程之间{ph1}{ph2}{ph3}{ph4}{ph5}预加载调用IPC通道:主进程的命名消息。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "{ph0}主进程{ph1}{ph2}导出处理函数{ph3}{ph4}{ph5}处理这个通道,再调用 CSV 写入函数。{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} 格式化注释→ {ph1} 写道 {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "REA将字面IPC调用与其处理程序相匹配,并标识公开的API。 路径是从代码中推断出来的;运行时捕获可以检查执行的内容。" + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "询问有关 CSV 导出" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "{ph0}将你的编程助手连接到 REA{ph1} 并给它的应用程序目录或 ASAR 档案:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "复制" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "{ph0}›{ph1}{ph2}用 REA 找出这个应用导出笔记时发生了什么。CSV 文件在哪里创建?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "示例提示。 包括应用程序文件夹的绝对路径或 {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "REA读取应用程序文件并构建入口点,模块和流程边界的映射。 你的编程助手使用该映射将调查范围缩小到导出功能。" + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "跟踪导出代码" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "页面调用一个小API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "页面知道方法名称。 实现存在于预加载中,预加载将其暴露给渲染器。" + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "REA 记录 {ph0} 和直接写在代码中的通道名 {ph1},并将调用关联到主进程里唯一匹配的处理函数。" + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "读取处理函数就能回答最初的问题:{ph0} 格式化笔记,主进程将 {ph1} 写入用户的下载文件夹。" + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "使用 REA 4.1.0 分析下面可下载的示例。API、通道和处理函数的结果均附有源码位置。" + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "自己分析例子" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}下载示例ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "浏览六个源文件" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "静态应用分析" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "将路径替换为你解压缩的文件夹。 你应该在以下位置找到一个IPC通道和一个匹配的处理程序 {ph0}. 源位置在 {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"对于你自己的应用程序,请对其目录或ASARpath使用相同的命令。 编程助手可以使用REA的功能跟踪工具跟随文字字符串,API名称或IPC通道。" + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "检查CSV写入器" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "追踪 {ph0} 到处理函数。哪些输入传给 CSV 写入函数?如果写入失败,会怎样?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "使用源位置检查这些详细信息。 计算的通道名称和不明确的处理程序可以保持未解析;运行时观察为你提供了另一种调查它们的方法。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "{ph0}追踪 Notion 剪贴板桥接代码{ph1}{ph2}把同样的方法用于打包的 Electron 应用。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "{ph0}观察浏览器导出{ph1}{ph2}捕获一个真正的点击,看看它提出了哪个请求。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "{ph0}遵循原生函数{ph1}{ph2}当特性依赖于原生代码时,继续进入二进制文件.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "JavaScript和Electron分析-REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "通过具有REA的渲染器API,预加载和IPC处理程序跟踪Notes CSV导出。 包括可下载的示例文件和经过验证的分析结果。" + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "复制示例提示" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "复制静态应用程序分析" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "{ph0}首页{ph1} / {ph2}指南{ph3} /原生分析" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "恢复DX-Ball的{ph0}左/右声音位置的计算。" + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "检查原始指令,识别输入和常量,然后检查恢复的C。" + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "在本指南中" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}例子{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}问问你的编程助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}阅读REA结果{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}恢复和检查{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}使用你自己的二进制文件{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "计算左/右立体声声音定位" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "在DX-Ball中,砖击提供水平屏幕位置。 声音代码将其转换为左/右平移值。" + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "启动函数, {ph0},有一个简短的反编译器结果:调用 {ph1}. REA 还返回其指令和调用者,这给编程助手一种方法来调查丢失的算术。" + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "新的这些条款?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "{ph0}指令:{ph1}处理器执行的步骤,以 {ph2}、{ph3} 这样的可读形式显示。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "{ph0}反编译器结果/伪代码:{ph1} 分析工具试图将指令转换回类似C的代码。 它可能会错过部分,如本例所示。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "{ph0}调用方:{ph1}调用当前函数的函数,可以看出传入的数值。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "{ph0}地址:{ph1} 程序中的一个位置,用十六进制编写,如 {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "{ph0}常量:{ph1} 固定数字存储在程序中,读取为原始字节和解码。" + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "三件证据,一个计算" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "{ph0}01 · 指令{ph1}{ph2}整数输入{ph3}{ph4}从栈读取一个值,供浮点指令使用。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "{ph0}02 · 调用方{ph1}{ph2}屏幕坐标{ph3}{ph4}砖块碰撞处理函数传入 {ph5}。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 · 数据字节{ph1}{ph2}数值常量{ph3}{ph4}引用的字节解码为 {ph5}、{ph6} 和一个缩放系数。{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "REA提供指令,调用关系和字节。 编程助手一起解释它们。" + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "询问行为" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "{ph0}将 REA 连接到助手{ph1}并{ph2}配置原生分析工具{ph3}后,提供本地可执行文件和一个问题:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "我应该使用哪种分析工具?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA需要其中一个来阅读原生程序:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} (macOS或Linux):REA的安装程序检测到它或提供安装它。 " +"在macOS上,打开一次Hopper,然后选择演示模式或在第一次分析之前激活许可证。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} " +"(macOS或Linux;在Windows上进行实验):免费,但需要现有的Ghidra12.1。x安装和64位JDK21或更高版本。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "{ph0} IDA {ph1} (Windows):用于具有MCP注册的现有IDA设置。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "见 {ph0}设置原生分析{ph1} 为步骤。" + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "复制" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 找出 DX-Ball 如何计算声音的左右位置。解释计算过程,并展示代码。{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"示例 prompt。把本地 DX-Ball 1.07 可执行文件的路径交给助手。REA 不附带游戏,需要用自己的副本,也可以换成手里的其他小型 " +"Windows 程序,问同类问题。" + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "如何获取文件的完整路径?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} 在文件资源管理器中,右键单击该文件并选择 {ph2}复制为路径{ph3}. " +"在Windows10上,在右键单击时按住Shift。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "{ph0} macOS :{ph1} 在Finder中,右键单击文件,按住选项并选择 {ph2}复制\"...\"作为路径名{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "{ph0}任何系统:{ph1} 将文件拖到终端窗口中并显示其路径。" + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "阅读REA结果" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "阅读输入" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "指令加载一个整数参数并将其转换为浮点算术。 这是第一个伪代码视图中没有的输入。" + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "跟随调用方" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "REA 找到砖块碰撞处理函数。它先把砖块横坐标乘以 30,再加上 {ph0}(20),得到砖块的屏幕位置。" + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "读取引用的常量" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "算术引用这些地址。 读取字节提供实际值;指令顺序告诉编程助手如何使用它们。" + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "写入并检查恢复的函数" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "比例为1.0时,屏幕位置0、320和640在整数转换之前映射到-500、0和500。 计算将屏幕的中心置于立体场的中心。" + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "编程助手使用REA的发现来编写C.单独的检查将3,205个输入与原始x86函数进行了比较,并再现了完整函数的所有63个编译字节。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}查看完整的调查和组装到C的比较{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "用你自己的二进制文件试试" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}连接原生分析提供程序{ph1},然后给你的编程助手一个本地可执行文件或库和一个要调查的函数。 " +"有用的起始问题包括\"如何解析此文件?\"或\"哪个函数处理此菜单操作?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "如果你已经知道函数名称或地址,则可以从终端查询它。 对于已配置的Ghidra安装:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "函数分析" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"替换目标路径和 {ph0} 使用你自己的函数名称或地址。 每个 CLI 调用导入并分析二进制文件,然后关闭其会话。 你的编程助手 MCP " +"查询在该会话打开时重用导入的二进制文件。" + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "把伪代码与指令、引用一起阅读。结果中尚未解析的调用或数值,可以成为下一个调查问题。" + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "原生二元分析-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "使用REA恢复本机计算:检查指令,遵循调用者,读取常量并检查重构的C。" + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "机器代码程序分析" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "复制示例提示" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "复制函数分析" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "安装与配置 REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}安装与配置 REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}什么是RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}REA 如何帮忙{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}恐龙游戏{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}计算器{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}试试REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}更深入{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}帮助和反馈{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}社区{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "和编程助手一起做逆向工程" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "弄清楚{ph0}软件如何工作。" + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "REA 为编程助手提供分析工具,让它检查程序并解释程序的行为。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "已经了解逆向工程?{ph0}直接看分析指南 →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "想深入了解?{ph0}阅读博客 →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "把这段话复制给编程助手:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "复制" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "也可以在终端运行:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "确认安装计划后,重启编程助手。" + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "什么是逆向工程?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "通过{ph0}检查程序本身{ph1},弄清软件如何工作。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "目标是理解一项功能,从而能{ph0}解释它{ph1}、{ph2}修改它{ph3},或{ph4}重新实现它。{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "使用 REA 之前 · 你要{ph0}亲自调查{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} 分析分支" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} 追踪函数调用" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} 还原计算规则" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}原始 x64 指令节选{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 · 走哪个分支?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "“{ph0}0x5b?0x5c?{ph1}两个跳转去了同一个位置。它们对应哪些运算符?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "查找命令 ID,再标明分支含义。" + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "除÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "乘×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · 这些函数调用做什么?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "“100 很明确,但函数调用只有地址。{ph0}哪个负责除法?传进去的是哪个值?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "检查辅助函数,追踪存储的数值。" + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "除法" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 · 规则是什么?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "“这个分支乘上了另一个输入。所以在 + 之后,{ph0}10% 表示 200 的 10%{ph1}。”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "确定操作数的含义,并检查两条运算路径。" + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "专家思考过程示意" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "{ph0}你需要读懂指令、追踪调用,再还原计算过程。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "使用 REA · 你只需问{ph0}编程助手{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "一句话即可。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "{ph0}用日常语言{ph1}告诉助手你的问题。" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 计算器" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "示例回答 · 根据分析结果" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "在 + 之后,% 按钮计算的是{ph0}第一个数的百分比。{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA 提供" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "处理函数的指令、反编译代码和调用关系。" + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "编程助手解释" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "走哪个分支、怎样计算,以及如何重新实现。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "汇编节选自已安装的计算器 DLL。思考过程和回答用于解释分析结果。{ph0}继续看完整的计算器示例 ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "{ph0}来试两个例子。{ph1}先调整游戏速度,再回到计算器,重新实现 % 按钮。" + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "示例 01 · Chrome 小恐龙游戏" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "为什么恐龙变得更快?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "目标" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "重建一个{ph0}速度可调{ph1}的游戏。" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "为什么逆向工程?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "要复现加速过程,得先找到{ph0}实际运行的游戏中的规则{ph1}:起始速度是多少、每次增加多少、何时停止加速。" + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "试玩重建版" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "开始" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "跳跃 ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "重新开始" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "速度" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "使用还原的加速规则" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "原版规则:速度从 6 开始,逐渐增加到 13。" + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "拖动滑块,选择自己的速度。按空格键或“跳跃”越过仙人掌。" + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "启用 JavaScript 即可试玩。上面的代码和说明无需 JavaScript 也能阅读。" + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA 返回" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "{ph0}页面实际运行的脚本。{ph1}助手读取更新函数和速度设置,再把规则用到新的游戏中。" + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 小恐龙游戏" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA " +"检查这个小恐龙游戏。它为什么会越来越快?找出速度规则,再做一个速度可调的小版本。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "分析目标:{ph0}wayou 基于 Chromium 制作的浏览器版本{ph1}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "{ph0}起始速度为 6。{ph1}速度低于 {ph4}13{ph5} 时,每次没有发生碰撞的更新增加 {ph2}0.001{ph3}。" + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "打开速度实验室 →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "各部分负责什么" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "{ph0}01 · REA{ph1}{ph2}读取正在运行的游戏脚本{ph3}{ph4}把实际代码和设置交给助手。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "{ph0}02 · 编程助手{ph1}{ph2}重建规则,加入控制{ph3}{ph4}把还原的加速规则用于带速度滑块的小游戏。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "{ph0}03 · 你{ph1}{ph2}调整速度,亲自试玩{ph3}{ph4}先体验原版加速,再选择自己的节奏。{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "查看脚本、验证过程和分析步骤" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "REA 通过本地调试连接检查 HTTP 浏览器版本,返回了已加载的 {ph0},包含源码和摘要。" + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"我们在受控的浏览器检查中调用原版更新函数,禁用了障碍物和自动调度。保留一位小数时,更新 4,000 次后的速度为 10.0,更新 10,000 次后为 " +"13.0。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "新小游戏保留了这条速度规则。绘图、跳跃和碰撞代码是简化的教学实现。{ph0}打开实验室{ph1},可以查看新代码并运行同样的速度检查。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"想亲自分析?用{ph2}小恐龙页面{ph3}跟着{ph0}浏览器连接步骤{ph1}操作。把页面网址和本地调试地址交给助手,再复制上面的 prompt。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "{ph0}分析的速度代码{ph1} · {ph2}Chromium Authors · BSD 许可证{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "示例 02 · Windows 计算器" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "重新实现计算器的 % 按钮。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "做一个小计算器,能{ph0}正确处理 + 和 × 两种情况。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "同一个按钮,在{ph0}+ 和 × 后采用不同规则。{ph1}我们检查已安装的应用,弄清百分比究竟作用于哪个数。" + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "试试计算" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "重置" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "200的10%=20. 则200+20=220。" + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "根据实际分析得到的百分比规则制作的交互示例。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "{ph0}一个分支除以 100;另一个还要乘上第一个数。{ph1}助手用这两条规则重新实现 % 按钮。" + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "对于这个例子, {ph0} 和 {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 重建 % 按钮" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 检查 Windows 计算器的 % 按钮。还原 + 和 × " +"后的规则,再做一个同时采用这两条规则的小计算器。{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "在 + 之后" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}取第一个数字的10%。{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "在 × 之后" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}把10%变成0.1。{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "从已安装的应用,到能运行的 % 按钮" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 · REA 读取库{ph1}{ph2}返回 % 处理函数的代码{ph3}{ph4}函数检查运算符,并使用常量 {ph5}。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 · 编程助手解释{ph1}{ph2}解释并复现规则{ph3}{ph4}对照 Microsoft 的源码核实分支,再试试上面的 + 和 " +"×。{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "查看实际代码和验证方式" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"使用 REA 4.1.0 检查 Windows 计算器 11.2508.4.0(x64)。可读摘要采用 Microsoft " +"公开源码中的名称,解释还原的分支。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "{ph0}百分比实现{ph1} · {ph2}Microsoft 测试用例{ph3} · {ph4}原生分析配置指南{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "第一次调查" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "用一个小应用试试 REA。" + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "下载 Notes 示例,追踪 CSV 导出,再修改一个输入来验证。" + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "跟着示例开始" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "想更深入吗?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"告诉助手你想弄清什么,或者想做什么。有了 REA,你们可以从{ph0}克隆这个网站{ph1},一直做到{ph2}从可执行文件重建一款游戏。{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 网站" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "对,就是这个网站。" + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 游戏重建" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 从这个游戏的可执行文件重建游戏。用 C 还原游戏逻辑,并对照原版测试。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}查看 DX-Ball 案例 →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "根据目标选择配置和分析指南:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "原生二进制" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "检查可执行文件和库中的函数、字符串、引用和函数调用关系。" + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "原生分析指南" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "从应用目录或 ASAR 文件中分析模块、路由、IPC 和原生依赖。" + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "应用分析流程" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "浏览器与运行时活动" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "记录指定的浏览器或进程活动,再比较不同运行的结果。" + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "浏览器观察指南" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "有什么问题吗?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}阅读 FAQ{ph1}、{ph2}在 Discord 和我们聊聊{ph3},或{ph4}提交 GitHub issue{ph5}反馈 bug " +"和功能需求。" + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "加入社区" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "在 Discord 分享调查,与其他 REA 用户交流。关注 REA 的 X 账号获取项目更新。" + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA — 和编程助手一起做逆向工程" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "和编程助手一起分析应用、二进制文件和浏览器行为。跟着清晰的指南,体验 REA 的交互示例。" + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "复制REA安装提示" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "复制安装命令" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "按照手动计算器分析" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "复制计算器百分比问题" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "小恐龙游戏。点击“跳跃”,或在游戏获得焦点后按空格键。" + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "复制恐龙分析提示" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "选择计算" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "复制计算器分析提示" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "复制网站项目提示" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "复制游戏重建提示" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}首页{ph1} / {ph2}案例展示{ph3} /安卓" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "案例研究 · Aegis验证器" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "身份验证器如何{ph0}生成登录代码?" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "六位验证码每 30 秒变化一次。用 REA 在 Android APK 中找出计算方法,再重建一个可调节时钟的演示。" + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 · Android · 正式发布 APK ·6.9MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "在GitHub上查看Aegis" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "从 APK 还原可复现的验证码" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 · 定位功能{ph1}{ph2}3,077 个类 → 生成方法{ph3}{ph4}REA " +"搜索包,追踪显示和复制验证码时使用的代码。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 · 阅读计算{ph1}{ph2}时间 + 账户密钥 → 六位数字{ph3}{ph4}REA " +"返回方法与默认值,助手解释它们如何配合。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 · 重建并验证{ph1}{ph2}调整时钟,查看验证码。{ph3}{ph4}新的浏览器演示复现规则,再用公开对照用例检查。{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "在本个案研究中" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}问问你的编程助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}试试代码生成器{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}用REA查找代码 {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}阅读计算{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}检查重建{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}亲自检查APK{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "问问你的编程助手" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "该应用程序显示更改的登录代码。 我们想找到 {ph0}是什么让它改变{ph1} 再现这种行为。" + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "复制" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"这是用于下载的 APK 的示例 prompt,需要先配置 REA 的 Android 分析后端。{ph0}获取 APK 和分析配置 ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "试试代码生成器" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "应用把时间划分为{ph0}每块 30 秒{ph1},再结合时间块编号和账户密钥生成验证码。同样的密钥和时间块,会得到同样的验证码。" + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "将时钟移动60秒" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "时间" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "秒数" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "我们的可调节示例时钟" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30秒区块" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "时间块" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59秒{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "生成的验证码" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "帐户密钥+区块→六位数字" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "示例时间,以秒为单位" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59秒" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60秒" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "在59秒: {ph0}287082.{ph1} 在60秒: {ph2}359152.{ph3} 在一个块内移动会使代码保持不变。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "密钥是固定的,公开的 {ph0}RFC6238测试数据{ph1}. 该演示实现了从APK恢复的计算。" + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "该图显示了59秒时的结果。 启用JavaScript以更改时钟。" + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "用REA查找代码" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "将APK缩小到三个类" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "{ph0} 是计算逻辑的候选方法;另外两个涉及进度条和导入的账户。TOTP 指基于时间的一次性密码。" + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "将生成器连接到应用程序的显示器" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "REA 找到接受时间戳的方法重载,并定位基础方法的调用方。继续检查 {ph0},就能看到显示逻辑调用了 {ph1}。" + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "请求显示缩短的输入路径。 结果类名省略常用 {ph0} 前缀。" + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "阅读计算" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA 返回{ph0}时间转换、默认设置和生成方法{ph1}。构造函数把间隔设为 30 秒、位数设为 6;接受时间戳的方法将秒数转换为时间块编号。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} 时间块" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} 键+块" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} 六位数" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "{ph0}时间选择块。{ph1} 秒30到59都给块1。 在60秒时,块变为2。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "{ph0}密钥也会影响结果。{ph1} 生成函数把账户密钥和时间块组合起来。密钥不同的账户,在同一时间也可能显示不同验证码。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "{ph0}保留六位数字。{ph1} 取除以 1,000,000 的余数,位数不足时在前面补零,因此验证码也可以以 0 开头。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "这些节选来自多个检查过的方法,为便于显示增加了换行。右侧是解释性摘要。{ph0}Aegis 源码采用 GPL-3.0 许可。{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "验证码生成函数内部" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"发布的 APK 将 {ph0} 放在 {ph1} 中。REA 从 {ph2} 追踪调用,并返回这个函数体;原始源码把辅助函数命名为 {ph3}。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"哈希的最后一个字节决定读取位置。从这个位置读取四个字节,得到正的 31 " +"位数,再格式化为指定的位数。构造函数的最后一个参数选择了编译过程引入的验证码格式化分支。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}与匹配的发布源进行比较{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "检查重建" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"我们将选定的 REA 返回的 Java 方法放进小型测试程序。它们的输出与独立重建的实现一致,共验证 {ph0}133 " +"个测试用例{ph1},包括时间块边界和以零开头的验证码。" + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "示例时间" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "六位验证码" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30秒" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109秒" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "生成函数还符合 {ph0}RFC 6238{ph1} 中发布的六个 SHA-1 对照用例。可以用这些用例检查浏览器实现:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "运行对照检查" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "阅读演示的计算" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "参考案例使用八位数字。 检查也验证他们的六位数的结果。" + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "验证运行提取的Java方法和新的演示。 对Android APK进行了静态检查。" + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "亲自检查APK" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"先在 macOS 或 Linux 上{ph0}设置 REA{ph1},再将这两个文件下载到同一文件夹。Windows 上可使用 WSL 等 Linux " +"环境。" + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "Android分析需要完整的JDK17或更高版本。 选择它与 {ph0} 或 {ph1}. 本案例使用了JDK21。" + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "让 REA 使用分析后端配置文件,再检查 APK:" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS/Linux" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "助手可以通过 REA CLI 继续使用上方的 prompt。如果使用 MCP,将 {ph0} 加入 REA 服务的环境配置,再重新连接。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "下一个问题: {ph0}当帐户使用八位数字或不同的时间间隔时会发生什么?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "资料来源" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "{ph0}官方Aegis3.4.3发布{ph1} · {ph2}匹配源提交{ph3} · {ph4}GPL-3.0许可证{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}RFC6238参考案例{ph1} · {ph2}演示测试数据{ph3}" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "使用 REA 6.1.0 于 2026 年 10 月 9 日检查。反编译节选归属 Aegis;图示、可读摘要和浏览器重建为新增教学材料。" + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK逆向工程:登录代码-REA" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "用 REA 检查 Aegis Android APK,还原六位登录验证码的计算,再试玩可调时钟的重建演示。" + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK案例研究" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "复制Aegis示例提示" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "按照登录代码计算" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "复制APK检查命令" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}首页{ph1} / {ph2}案例展示{ph3} /CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "案例研究·Downunderctf2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "找到国旗{ph0}一个CTF二进制文件。" + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "使用方法 REA 要检查一个小的flag 检查器,将其规则转换为方程,并找到一个使原始程序打印的输入 {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "蒙面方格旗检查器 · 容易·Linuxx86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "查看原始挑战" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "从二进制到检查答案" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 · 找到检查{ph1}{ph2}字符串→检查函数{ph3}{ph4}REA 查找提示、其引用以及接受或拒绝输入的代码。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 · 提取规则{ph1}{ph2}36个字符·26个总和{ph3}{ph4}REA 返回每个检查后面的指令和数据。 " +"剂将它们转化为方程。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 · 解决并运行{ph1}{ph2}恢复旗→正确!{ph3}{ph4}一个Python脚本解决方程. REA " +"捕获接受结果的原始程序。{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "挑战是由约瑟夫,发表在DownUnderCTF的官方代码仓库。" + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "在本个案研究中" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}查找检查代码{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}读一个面具{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}汇编到可读代码{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}解方程{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}检查答案{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}你自己试试吧{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "查找检查代码" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "讲义是一个15KB可执行文件。 它要求一面旗帜,然后打印 {ph0} 或 {ph1}. 从一个简单的请求开始给你的编程助手。" + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "复制" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA分析ms_flag_checker并找到标志。 " +"解释检查是如何工作的,然后用原始程序验证答案。{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "一个示例提示,下载的质询在本地可用,并连接了原生分析提供程序。" + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "按照输入提示到其函数" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "引用为编程助手提供了一个调查的地方,即使可执行文件的原始函数名已被删除。" + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "阅读检查器和它的两个助手" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"第一个循环复制36个字符代码。 检查循环解码掩码,对所选代码求和,并将结果与存储的数字进行比较。 其 {ph0}-字节跨步 {ph1} " +"字节给出26个掩码。" + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "这些是来自新鲜REA分析的选择结果。 本地目标路径缩短显示;地址参考REA的导入图像。" + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "一张检查显示一个字符" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "检查器将输入排列在6×6网格中。 掩码选择哪些单元格对总和做出贡献。 它的紧凑编码使用负数跳过单元格和正数来选择它们。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "第七个检查只选择一个位置。 {ph0}打开图{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "从二进制文件中读取掩码及其目标" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"指示 {ph0} 将掩码字节读取为有符号值。 这就是为什么 {ph1} 表示-21. 目标是一个小端整数。 这些字节一起告诉编程助手 " +"{ph2},所以该字符是 {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "从指令到可读的检查" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "选择一个步骤将求和帮助程序及其调用者连接到C中的同一规则。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} 开始" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} 选择" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} 添加" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} 前进,前进" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} 比较一下" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA · 选定的原始说明" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "可读的C · 一检查摘要" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 · 从零开始。{ph1} {ph2} 持有运行总和。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "{ph0}02 · 检查掩码单元格。{ph1} 零值跳过字符;非零值包括它。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "{ph0}03 · 添加字符代码。{ph1} 输入在相同偏移量处的整数被添加到总和中。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "{ph0}04 · 移动到下一个单元格。{ph1} 原始循环每个整数前进四个字节,并访问六个单元格的六行。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "{ph0}05 · 与存储的目标进行比较。{ph1} 调用方在 {ph2}. 不匹配跳转到 {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "指令来自求和助手及其调用者。 C是一个具有描述性名称和扁平36个单元格循环的解释性摘要。" + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "求解26个方程" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"大多数掩码选择几个单元格。 例如,第一次检查添加了16个字符代码,总共需要1441个。 重叠的选择给出了一个小的Python脚本可以一起求解的方程。" + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python · 求解器摘录" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3是一个求解器,可以找到满足这些方程的值。 此摘录使用提取的检查,并假定 {ph0} 用字母,数字,下划线和大括号标记。 " +"完整的下载包括所有26个面具和目标。" + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "下载完整的求解器" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "用原始程序检查答案" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REA的进程捕获记录接受已解决标志的原始可执行文件。 更改一个选定的字符 {ph0} 到 {ph1} 使第一和1440而不是1441,并且程序拒绝它。" + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "输入" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "观察到的输出" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "退出代码" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "解算者之旗" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "一个角色改变了" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "显示恢复的标志和捕获的输出" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA · 原始程序输出" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "复制标志" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "恢复的值还与组织者发布的挑战元数据中的标志相匹配,在解决二进制后检查。" + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "来源、目标身份和分析详细信息" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"在2026年10月8日使用REA4.1.0和Ghidra12.1.4在Linux x64上进行新的分析和两个过程捕获。 " +"二进制文件是一个剥离的x86-64ELF,15,248字节。" + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "在阅读组织者的源代码或解决方案之前,对字符串引用,函数和常量进行了检查。 Python求解器和图表是根据REA结果构建的。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "{ph0}与主办方来源比较{ph1} · {ph2}挑战元数据和标志{ph3} · {ph4} REA证据说明{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "你自己试试吧" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "将原始挑战和求解器下载到一个文件夹中。 使用上面的提示与你的编程助手进行调查,或运行包含的脚本。" + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "终端 · 解决和运行" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "脚本打印候选标志;将其粘贴到程序的提示符处。 解决需要Python和 {ph0}. 运行原始可执行文件需要Linux x86-64。" + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "设置REA与你的编程助手" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "CTF逆向工程:DownUnderCTFflag 检查器-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "使用REA来解决DownUnderCTF的掩码方块flag 检查器。 找到检查函数,提取掩码并将恢复的标志与原始程序进行比较。" + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "CTFflag 检查个案研究" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "复制CTF示例提示" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "CTF掩码方程;在较小的屏幕上水平滚动" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "第七个掩码跳过21个单元格,选择位置21,然后跳过14。 只有该单元格贡献总和。 它所需的字符代码是55,这意味着字符是7。" + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "遵循CTF检查" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "复制CTF装配" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "复制可读CTF检查" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "复制CTF解算器摘录" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "复制恢复标志" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "复制CTF求解器命令" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}首页{ph1} / {ph2}案例展示{ph3} / DX-Ball" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "案例 · DX-Ball 1.07" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "从可执行文件{ph0}重建 DX-Ball。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "目标是为这款 1996 年的 Windows 游戏重建一份可维护的 C 代码。REA 帮助编程助手逐个分析原版函数。" + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 · C · REA" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"从可执行文件中的一个函数,到经过验证的 C 代码:REA 提供指令、调用方和读取的数据,重建项目据此实现并测试函数。{ph0}查看大图{ph1}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "本案例内容" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}项目进度{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}声像计算{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}检查结果{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}继续工作{ph1}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "个可维护的 C 函数" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "与原始代码的比较" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "个编译后字节匹配的函数" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "项目进度截至 2026 年 10 月 7 日。{ph0}进度记录{ph1} · {ph2}测试覆盖情况{ph3}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "当前进度" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"目前已还原关卡与资源处理、砖块碰撞、动画、粒子和奖励生成。当前构建提供检查工具与分析库。可玩的游戏版本还在开发,后续工作包括球和挡板的物理逻辑、道具处理及" +" Windows 集成。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "找出声音的左右位置如何计算" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "砖块被击中时,它的横坐标会传给声音处理代码。这次调查要找出:屏幕坐标如何转换为声音的左右声像值?" + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "复制" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 找出 DX-Ball 如何计算声音的左右位置。解释计算过程,并展示代码。{ph3}{ph4}{ph5}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "把本地可执行文件交给编程助手,再使用这个示例 prompt。下面展示助手为回答问题发起的 REA 查询,以及得到的证据。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "助手用 REA 检查函数、追踪调用它的砖块碰撞函数,再从可执行文件中读取常量。这些结果确定了输入和计算步骤,才有了下面的 C 函数。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"REA 最初返回的 {ph0} 伪代码声明了 {ph1},并调用 {ph2}。但指令中还有来自栈的输入和浮点运算。这个差异提示助手:还需要继续查。" + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "最初的反编译结果" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "结果里能看到一次转换调用。继续阅读下面的指令,就能找出输入,以及传入这个调用前的计算。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "用 REA 回答三个问题" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "找回缺失的输入" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "函数结果同时提供伪代码、指令和调用方。这里的 {ph0} 显示了反编译结果中缺失的整数输入。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "追踪调用方,理解输入含义" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "REA 在第一次结果中就给出了这个调用方。调用前的指令将 {ph0} 乘以 30,再加上 20,得到砖块的屏幕坐标 {ph1}。" + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "读取内存地址后面的值" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "返回的字节确定了两个运算常量,以及声像缩放系数的初始值。助手由此得到编写 C 表达式所需的数值。" + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "从 REA 分析结果到 C 代码" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "下面分五步展示计算。点击每一步,原始指令和对应的 C 代码行会同时高亮。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} 输入" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} 乘以" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} 减去" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} 缩放" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} 返回" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "原始 x86 · 节选" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "重建的 C 代码" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 · 读取输入。{ph1} REA 返回的指令读取 {ph2},再通过 {ph3} 加载这个整数。用 REA 追踪调用方,就能确定 C " +"参数 {ph4} 表示屏幕坐标。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 · 乘以 1.5625。{ph1} {ph2} 读取 {ph3} 处的双精度浮点数。REA 的 {ph4} 返回的字节解码后是 " +"{ph5},C 代码使用相同常量。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 · 减去 500.0。{ph1} {ph2} 读取 {ph3} 处的双精度浮点数。REA 返回的字节解码后是 " +"{ph4},让计算的中心对应屏幕坐标 {ph5}。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 · 乘以存储的缩放系数。{ph1} 第二条 {ph2} 读取 {ph3}。这个全局变量在重建源码中名为 {ph4}。REA " +"的第二次字节读取确认它的初始值是 {ph5}。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 · 返回整数。{ph1} {ph2} 处的调用进入 {ph3},REA 返回的被调用函数信息确认了这一点。C 代码把结果转换为 " +"{ph4},再与原始 x86 函数比较,验证返回值。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "这段汇编节选包含输入、运算和返回指令。下面的完整列表还保留了中间的存储操作,以及函数开头和结尾的处理。" + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "完整汇编与相关证据" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA结果 · 0x406400–0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "调用方传入什么" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "{ph0} 处的砖块碰撞函数把格子坐标乘以 30,再加上 20,然后在调用前将结果压栈:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "读取数据确认了什么" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA 读取的字节,按小端双精度浮点数解码" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "地址" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "数值" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "用于" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "第一次乘法" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "减法" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} 最初" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "存储的声像缩放系数" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "使用 REA 4.1.0 记录,分析目标为通过哈希确定的 DX-Ball 1.07 文件。链接的调查笔记保留了 Evidence ID。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "{ph0}重建源码{ph1} · {ph2}调查笔记与证据引用{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "验证还原的函数" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "还原的函数通过了两项检查:返回值与原版一致,编译后的字节与原始可执行文件一致。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3,205 个行为测试用例" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"测试执行原始 x86 函数,将返回值与重建的 C 函数比较。测试覆盖 0 到 640 的所有整数位置,并分别使用五个声像缩放系数:0、0.5、1、20 " +"和 −1。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 字节完全匹配" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "C 函数使用指定的 VC4.0 工具链编译。应用经过检查的重定位,并核对引用的常量后,编译结果与原始函数的全部字节一致。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "缩放系数为 1 时,计算在屏幕左边缘返回 −500,中心返回 0,右边缘返回 500。接下来要将这个值接入游戏的声音后端。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}阅读编译器重播详细信息{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "继续调查" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "粒子更新、爆炸队列和奖励生成也使用同样的方法:检查相关函数,还原状态与依赖,再把实现和原版比较。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "如果你也想分析这个声像函数,先按 DX-Ball 项目的说明配置环境,并准备匹配的原始文件。然后运行:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "在 DX-Ball 仓库目录中" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "{ph0}DX-Ball 仓库{ph1}{ph2}当前源码、进度和本地配置。{ph3}" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "{ph0}REA 分析流程{ph1}{ph2}追踪这段计算,再用同样方法分析自己的二进制文件。{ph3}" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "{ph0}粒子与奖励生成{ph1}{ph2}进一步分析状态、队列和像素写入。{ph3}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball 逆向工程:声像计算 — REA" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "查看 DX-Ball 的重建过程:用 REA 分析二进制文件,编写可维护的 C 代码,再通过原始 x86 行为测试和编译字节匹配验证。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "DX-Ball 声像计算调查;小屏幕可横向滚动" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"用 REA 检查 DXBALL.EXE 中的函数 0x00406400。砖块碰撞调用方传入 20 + 30 × tile_x。指令加载 x,乘以 " +"1.5625,减去 500.0,再乘以 pan_scale,最后返回整数。重建的 C 代码通过 3,205 个用例与原始 x86 函数比较,并用 " +"VC4.0 编译结果匹配全部 63 字节。" + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball重建案例研究" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "复制示例提示" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "追踪声像计算" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "复制原始汇编摘录" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "复制声像函数" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "复制完整声像计算汇编" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "复制DX-Ball分析命令" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}首页{ph1} /陈列柜" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA 实际案例。" + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "安卓,游戏,Electron和CTF挑战,与代码,数字和检查结果。" + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android · APK 分析" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "验证器如何生成登录验证码" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "在其发布的APK中找到Aegis的六位数代码计算。 使用REA跟踪生成方法,然后移动演示时钟以查看代码每30秒更改一次的原因。" + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "阅读Android案例研究" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF · 原生分析" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "分析 CTF flag 检查器" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "使用REA检查一个简单的DownUnderCTF挑战。 找到它的检查函数,将掩码和和转换为方程,然后用原始程序验证已求解的标志。" + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "阅读CTF案例研究" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "原生程序 · 重建" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball 的声像计算" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"从1996年的Windows游戏中恢复左/右声音位置的计算。 " +"REA的指令,调用者引用和数字常量导致一个小的C函数,对照原始行为和所有63个编译字节进行检查。" + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "阅读DX-Ball案例研究" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron · 功能追踪" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Notion 如何复制文本和 HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"通过跟踪面向页面的API Notion包装好了 JavaScript. " +"跟随它的IPC包装到系统剪贴板,然后看看一个小的HTML标记如何保持丰富的块数据连接到复制。" + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "阅读Notion案例研究" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS · 重建" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "TH04 如何把环形弹幕对准玩家" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "用REA检查原始的16位角度助手。 将其乘法,除法和坐标操作匹配到可读的C++,然后看看它们如何产生一个针对玩家的环形弹幕。" + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "阅读TH04案例研究" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "循序渐进指南" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "本指南介绍了本机计算、Electron导出和浏览器请求。 每个都以提示和具体目标开始。" + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "阅读指南" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "逆向工程案例研究-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"跟我来 REA 通过代码、数字和演示进行调查:Android身份验证器, DX-Ball, Notion, TH04 " +"和一个DownUnderCTFflag 检查器。" + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}首页{ph1} / {ph2}案例展示{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "个案研究*Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "如何 Notion 复制{ph0}文本和HTML。" + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "跟踪剪贴板调用从Notion的页面API,通过预加载和主进程,到Electron的剪贴板编写器。" + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion桌面7.6.1·JavaScript*REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Notion 桌面包中的桥接代码" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "{ph0}01 · 面向页面的API{ph1} {ph2}{ph3}{ph4} {ph5}预加载公开了一个可调用的方法。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "{ph0}02 · 预加载包装器{ph1} {ph2}{ph3}{ph4} {ph5}包装器发送通道和参数。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "{ph0}03 · 主进程处理程序{ph1} {ph2}{ph3}{ph4} {ph5}接收器检查哪个页面发送它。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "{ph0}04 · 系统剪贴板{ph1} {ph2}{ph3}{ph4} {ph5}Electron 写入提供的文本和HTML。{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "一个通道连接双方: {ph0}" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "预加载脚本和主进程使用同一个通道。解析包装函数后,就能看出这些名称背后实际调用的 Electron 函数。" + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "在本个案研究中" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}跟随剪贴板桥{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}保留内容块的结构{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}更多示例和来源{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "复制操作去哪里?" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "页面可以调用名为 {ph0} 的方法。它在预加载脚本中的实现是一个包装函数。关键问题是:它发送了什么,又由哪段代码接收?" + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "复制" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA跟踪Notion如何将文本和HTML复制到系统剪贴板。 在每个步骤显示代码。{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "一个示例提示与Notion的本地应用程序包可供你的编程助手." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA查找从哪里开始阅读" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "用 REA 分析标签页的预加载脚本,可以找到暴露给页面的 API,以及发送 IPC 请求的调用。两个结果都给出了在压缩代码中的位置:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA 分析结果 → 两个源码位置" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"这是新一次 {ph0} 分析结果中的部分字段,来自 Notion 标签页的预加载脚本,使用 REA 4.1.0 " +"记录。位置对应原始压缩包中的行号和从零开始的列号。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"助手打开这些位置,在组装的 API 中找到剪贴板成员,再读取 {ph0}。调用处传入 " +"{ph1},让助手知道要在主进程代码中搜索哪个名称。下面四段代码展示这条调用链。" + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "四段简短代码" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "从打包的JavaScript简化,具有可读的变量名称。 不相关的成员被省略。" + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "从公开到页面的API开始" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "此成员提供通道名称。 的实施 {ph0} 告诉我们请求如何离开页面的进程。" + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "解析预加载的包装器" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "返回的函数通过 Electron 的请求/响应 IPC 转发参数。接下来可以在主进程中查找 {ph0}。" + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "检查接收器是如何注册的" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "主进程使用另一个包装器。 其 {ph0} 方法注册一个 {ph1} 那个频道的接收器。" + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "查找写入及其发件人检查" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"这就是调用的终点。处理函数检查发送方后,把收到的数据交给 Electron 的剪贴板 " +"API。通道名和两个解析后的包装函数,把暴露给页面的方法连接到了这里。" + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "复制的块如何保持其结构?" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Notion 的网页编辑器通过 {ph0} 发送文本和 HTML。它在本地保留内容块数据,再在复制的 HTML 中放入一个 ID,将二者关联起来。" + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "保存的块数据的HTML链接" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "读取HTML ID" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "查找相同的本地ID" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "恢复Notion块数据" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "文本和 ID 为示意值。已记录的模块测试显示:ID 匹配时可以取回内容块数据;条目失效时只返回文本和 HTML。" + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "在粘贴时,Notion查找HTML ID并根据保存的复制进行检查。 匹配的Id恢复所述块数据。" + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "从2026年7月13日缓存的web资产中记录的剪贴板格式。" + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "更多示例和来源" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "另一个例子:Markdown 表格" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "Notion将Markdown解析为块数据。 此示例显示表如何成为标题和数据行。" + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "通过Notion的Markdown解析器的表格" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "从提取的Markdown解析器记录输出。 表变为行和单元格。" + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "另一条路径:脱机SQLite连接" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Notion 的渲染进程通过 IPC 请求 {ph0}。主进程创建消息通道,把一个端口交给渲染进程,另一个交给 SQLite " +"工具进程。后续的语句批次和结果直接通过这个端口传输。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "追踪这次交接,就能知道数据库操作在哪个进程执行,也能解释为什么只跟踪最初的 IPC 请求会漏掉后续通信。" + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "资料来源及如何阅读摘录" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"剪贴板桥接代码来自 Notion Desktop 7.6.1 的 {ph0},包括标签页预加载脚本和 " +"{ph1}。节选中展开了压缩后的变量名,并省略无关代码;发送方检查辅助函数展示了底层的 {ph2} 调用。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"虚拟剪贴板和 Markdown 示例来自 2026 年 7 月 13 日缓存的网页资源,包括 {ph0}、{ph1}、{ph2} 和 {ph3} " +"模块。这些资源有独立版本。保存的测试执行提取出的模块和小型测试程序;输出反映的是这些测试,没有记录桌面 UI 操作。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"这里的 REA 结果是对保存的标签页预加载脚本进行的专项分析,使用已发布的 REA 4.1.0 记录。它定位了 API " +"和调用操作。读取包中的包装函数实现后,就能把剪贴板成员与匹配的接收方连接起来。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"Markdown 示例使用解析器模块 {ph0}。保存的模块测试显示,页面和聊天过滤器都会保留这张表格。粘贴/导入、结构化标记和 " +"AI/聊天解析器各自有不同入口与中间格式。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "{ph0} JavaScript应用指南{ph1}{ph2}遵循一个小的Electron应用程序的导出功能。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "{ph0}DX-Ball 重建工程{ph1}{ph2}按照原生说明检查c函数。{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron逆向工程:Clipboard-REA" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"追踪 Notion 的剪贴板 API,经过 Electron 预加载脚本、IPC 包装函数和主进程。通过简短代码节选了解调用链,再查看富文本剪贴板格式。" + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron案例研究" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "复制Notion分析提示" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "复制Notion预加载摘录" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "复制 Notion 调用包装摘录" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "复制Notion处理程序包装器摘录" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "复制Notion剪贴板接收器摘录" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "在粘贴上还原丰富的剪贴板数据" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "跳转到内容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}首页{ph1} / {ph2}案例展示{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "个案研究·东方4:莲花地故事" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "重建TH04{ph0}子弹图案。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "一圈弹幕从一段简短的角度计算开始。用 REA 检查原始 DOS 函数,再把指令对应到可读的 C++ 代码。" + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98·16位DOS · C++和汇编" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "查看TH04重建" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "从原始指令到经过验证的源码" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "{ph0}01 · 原创游戏{ph1}{ph2}主要。EXE文件{ph3}{ph4}该 PC-98 可执行文件及其子弹角助手。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 · 用 REA 检查{ph1}{ph2}指令 + 引用{ph3}{ph4}验证加载的 DOS " +"代码,再从可执行文件中读取角度计算。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 · 阅读 C++{ph1}{ph2}等分 → 瞄准 → 旋转{ph3}{ph4}把每个操作对应到维护中的重建源码。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 · 验证源码{ph1}{ph2}2,139 " +"字节匹配{ph3}{ph4}已记录的编译器检查覆盖了包含这个辅助函数的弹幕生成代码。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "REA 返回原始代码和分析证据。TH04 项目提供维护中的源码,以及编译器检查结果。" + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "在本个案研究中" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}子弹环{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}REA 返回什么{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}汇编到C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}检查来源{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}完整项目{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "环形弹幕如何瞄准玩家" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "Elly 的攻击请求一个初始数量为 16 的自机狙环形弹幕。辅助函数计算每颗子弹的方向。同一圈弹幕既可以朝向固定方向,也可以转向玩家。" + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的编程助手" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "复制" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA查找TH04如何创建一个子弹环并将其瞄准玩家。 解释计算并显示代码。{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "一个示例提示,原始可执行文件和重建签出可在本地使用。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 用 256 个角度单位表示顺时针转一整圈。16 颗子弹之间各隔 16 个单位:{ph0}。再加上玩家方向,就能让所有方向一起旋转。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "图中演示还原出的角度计算:子弹数量为 16,玩家方向为 40,模板旋转角为 0。{ph0}查看大图{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "还原源码中的发射模板" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Elly 的环形攻击 · 源码节选" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "这些线在难度和性能调整之前选择模式。 {ph0}阅读攻击的来源{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "REA 返回什么" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "我们检查设置每颗子弹速度和角度的函数 {ph0}。REA 返回指令、伪代码和引用,其中三部分解释了这种弹幕如何生成。" + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "在阅读其代码之前检查DOS映像" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "这项检查确认加载的代码和重定位记录对应提供的可执行文件。上方路径为便于显示而缩短。" + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "查看环形弹幕的乘除计算" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} 保存子弹索引。移位将它乘以 256,再除以从 {ph1} 读取的数量。重建源码把这个字段命名为 {ph2}。完整指令序列见下文。" + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "找到模式转向玩家的位置" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"指令操作数显示了两个坐标差,以及一个计算方向的辅助函数。它的返回值加到相对环形角度上。源码名称让这些地址的含义更易读;REA " +"则帮助助手核对地址背后的原始操作。" + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "从汇编到可读C++" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "点击每一步,对照原始指令和角度计算。这份摘要展示自机狙环形弹幕的路径;完整源码还处理散射、叠层和随机模式。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} 索引" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} 等分" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} 瞄准" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} 旋转" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} 存储" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA · 原始 16 位指令" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "可读 C++ · 自机狙环形弹幕摘要" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "{ph0}01 · 读取子弹索引。{ph1} 栈参数加载到 {ph2}。在 16 颗子弹的环中,索引从 0 到 15。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 · 在整圈中等分方向。{ph1} {ph2} 将索引乘以 256。数量先零扩展为一个字,再由 {ph3} 用乘积除以数量。数量为 16 " +"时,每个索引前进 16 个角度单位。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 · 加上玩家方向。{ph1} 两次减法得到玩家坐标与原点坐标的差。方向辅助函数在 {ph2} " +"中返回角度;加上这个值,就能把整圈弹幕转向玩家。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 · 加上模板旋转角。{ph1} {ph2} 加上模板中的角度。Elly 的初始模板将它设为零;其他弹幕可以用同一个辅助函数进行旋转。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 · 用一个字节保存最终角度。{ph1} 存储指令把 {ph2} 写入子弹生成角度字段。值超过 255 " +"后回绕,与无符号字节转换一致。周围源码还会根据这个角度和速率计算速度分量。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "汇编节选展示自机狙环形分支、瞄准计算和最终存储。上面的 C++ 是便于阅读的摘要。下方的编译器检查针对链接项目中维护的源码。" + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "阅读维护的环和瞄准源" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "{ph0}环宏{ph1} · {ph2}目标和速度源{ph3} · {ph4}角度表示{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "检查维护的源" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "TH04 项目记录的检查使用指定的 Turbo C++ 4.0J 工具链,编译包含这个辅助函数的弹幕生成代码。" + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139匹配字节" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "编译的子弹生成代码与原始可执行文件的2,139字节部分相匹配。" + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "两个干净的构建" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "两个单独的构建产生相同的匹配字节。 记录的输入哈希值与此处显示的维护源匹配。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "2026年10月3日录得。 {ph0}阅读编译器检查{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "目标身份和分析范围" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "原始目标" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0},156,258字节,DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "佣工入境" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} 在REA的加载图像" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "原始文件偏移量" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0},返回 {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "记录代码检查" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA4.1.0*2026年10月7日" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "编译器检查覆盖完整的弹幕添加代码段,包括这个辅助函数。检查还比较它在 map 文件中的贡献,以及重叠的重定位项。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA 验证了加载段为 {ph0} 的静态 DOS 加载映像。地址描述的是分析映像。函数结果在一个 517 字节范围内报告了两段代码,共 503 " +"字节;上方节选的指令都位于这些已报告的代码范围内。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"源码名称和编译器检查来自 TH04 检查点 {ph0}。较早的重建分析使用项目自身的脚本;这个页面新增了用 REA " +"对同一原始目标的检查。游戏文件的身份由仓库清单确定,独立原始转储的来源仍未确定。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "图中说明的是角度计算。完整游戏的控制、时序和 PC-98 硬件行为,在重建项目中有各自的运行时检查。" + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "完整的TH04重建" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "项目用维护中的 C++ 和汇编构建游戏的四个 DOS 程序。除了弹幕生成,源码还覆盖关卡、Boss、渲染、输入、菜单、结局和分数处理。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}探索 TH04 代码仓库{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "{ph0}子弹生成源{ph1}{ph2}完整的助手,其他模式类型和模板调整。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "{ph0}DOS构建和运行指南{ph1}{ph2}构建源代码并在项目的PC-98仿真器工作流中进行测试。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "{ph0}当前项目状态{ph1}{ph2}DOS验证和单独的原生x64移植版。{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04逆向工程:DOS子弹模式-REA" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "用 REA 检查 TH04 的原始 16 位 DOS 代码。对照汇编与还原的 C++,了解环形弹幕如何等分方向并瞄准玩家。" + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "在本页" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04子弹型案例研究" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "复制TH04示例提示" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "TH04固定和瞄准子弹环;在较小的屏幕上水平滚动" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"两幅图展示 16 颗子弹的环。固定环从角度 0 开始。加上玩家方向 40 后,每个方向都旋转相同角度,高亮的第一颗子弹指向玩家。两者都保持 16 " +"个角度单位的间距,即 22.5 度。" + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "复制TH04烧制模板" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "按照TH04-环计算" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "复制TH04汇编摘录" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "复制可读瞄准环计算" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "回到顶部" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "复制" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "已复制" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "已选中" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "代码已复制到剪贴板。" + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "代码已选中,请用键盘快捷键复制。" + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA在GitHub({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "距离 {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "撞到仙人掌了,试试其他速度。" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "空格键或“跳跃” ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "再玩一次" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "开始" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "暂停" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "点击“开始”,再跳过仙人掌。" + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "撞到仙人掌了。再点击“开始”,或调整速度后重新开始。" + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "游戏运行中。按空格键或“跳跃”越过仙人掌。" + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "已暂停。点击“开始”继续。" + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "固定速度:{speed}。按空格键或“跳跃”越过仙人掌。" + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "固定速度:{speed}。点击“开始”试试。" + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "还原的规则:速度从 6 开始,逐渐增加到 13。" + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "固定速度: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "重放了恢复的规则。 当四舍五入到三位小数时,所有四个值都匹配受控的原始游戏检查。" + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "重播与记录的原始游戏值不同。 比较上面的速度规则和设置。" + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} 秒" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} 秒,时间块 {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "交互式计算在此浏览器中不可用. 该示例显示了59秒时的代码。" + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "检查中…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "通过 {passed} / {total} 项检查(六个对照案例,分别验证六位和八位结果)。" + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "未能完成对照检查,请重试。" + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "在电脑前思考的分析师" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "一张检查显示一个字符" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "第七掩码仅选择六乘六输入网格中的位置21。 它的字符代码必须等于55,所以字符是7。 其他掩码选择不同的位置并给出进一步的方程。" + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "第七次检查。 单元格标签是输入位置,从0开始。" + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "编码掩码:-21,+1,-14,0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "跳过21个单元格。 选择1。 跳过14。 停在0。" + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "只有一个单元格贡献这一总和" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "标志中的位置21必须包含7。" + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "选择:一个单元格" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26个掩码给出26个方程。" + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "解决他们一起找到标志。" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball 声像调查" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA为一个DX-Ball函数提供指令、调用方和字节读取证据。 堆栈输入乘以1.5625,偏移500,缩放并转换为整数。 " +"在3,205个原始-x86案例和单独的63字节编译器重放中检查维护的C。" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "栈" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "输入 x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "整数" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "返回" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "还原的函数" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "可维护的 C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "砖块碰撞调用方" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "原始代码" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "比较" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3,205 个用例" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "VC4.0 编译" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 字节匹配" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA调查流程" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "问一个关于当地目标的问题。 REA通过本地分析适配器检查和跟踪,返回证据,并在你的编程助手解释,实施和测试时支持后续问题。" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. 提问" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "助手 + 本地目标" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "应用 / 二进制 / 浏览器" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. 检查与追踪" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. 阅读证据" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "代码 / 引用 /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "未知信息" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. 应用结果" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "编程助手" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "解释 / 实现 / 测试" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "分析工具" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "本地分析适配器" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "继续提问" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04:间隔和瞄准一圈子弹" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"一个完整的顺时针旋转有256个角度单位. 十六颗子弹从零,十六,三十二,到240角度开始。 " +"添加一个四十的示例玩家方向将所有十六个方向旋转在一起;第一个子弹指向玩家。 模板旋转为零。" + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "固定环" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "第一颗子弹:角度0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "瞄准环" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "第一弹:玩家方向" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "原点" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "球员" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "相同间距:256÷16=16角度单位=22.5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "案例展示" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "博客" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "开始使用" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "指南" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "源代码" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "MIT 许可证" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "加入社区" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "在 X 上关注我们" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA · 选定脚本源" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "源代码" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "预期格式化程序输出" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "指令" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "调用方" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "常量" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "C函数" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "按钮" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "预加载API" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSV文件" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "你的点击" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "捕获的请求" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "导出脚本" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA结果 · 摘要。ipc摘录" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA指令摘录·0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA调用方摘录 · 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "REA字节结果 · 解释为little-endian双精度浮点数" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "恢复C · 摘录" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "看看 REA 如何工作 ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "安装指南" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "查看案例 →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "实际脚本中的设置节选" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "% 处理函数的可读摘要" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA · 原始指令节选" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "运算符 ID · Microsoft 源码" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "在X上关注@reatools" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "编程助手→ REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA →编程助手 · 选定结果" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA →编程助手·方法和调用者" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA · 精选反编译Java" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "可读摘要 · 编程助手解释" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA · generateOTP 完整函数体" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "下载Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "下载 Android 分析后端" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "编程助手→ REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA →编程助手 · 选定结果" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA →编程助手 · 选择说明" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "编程助手→ REA · read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA →编程助手·第七项" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "原始可执行文件 · SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "下载原始挑战" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "下载求解器" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA结果 · 伪代码摘录" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "编程助手→ REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA →编程助手·指令摘录" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA →编程助手·调用方摘录" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "助手 → REA · 两次 {ph0} 请求" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REA 字节结果 · 双精度浮点数解码" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "从你自己的目标开始" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "生成验证码" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "还原的规则" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "可调时钟" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "二进制" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "检查 flag 的代码" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "方程" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "正确!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "可执行文件" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA调查结果" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "还原的 C 代码" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "验证" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "打包应用程序" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "公开API" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "IPC包装器" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "剪贴板" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "原始DOS代码" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA 指令" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "角度计算" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "环形弹幕" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "公开页面API" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "渲染器IPC调用" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "发送到系统剪贴板" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Notion本地保存" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Markdown 输入" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "结构化解析器输出 · 摘录" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "分析你自己的应用程序" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "编程助手→ REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA →编程助手 · 选定字段" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "编程助手→ REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA →编程助手·指令摘录" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "相同的函数结果 · 目标摘录" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "对应维护的C++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "环宏 · TH04分支,摘录" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "角度和速度 · 源摘录" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "按%查看10会发生什么。" + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "200的10%是20. 按=添加它。" + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "对于乘法,10变为0.1。 按=相乘。" + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "译文正在更新,这一页暂时显示英文。" + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "{ph0}›{ph1}{ph2}用 REA 分析 {ph3},解释它如何导出数据。给出相关代码和源码位置。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}使用 {ph3} 安装 " +"REA,并连接到这个编程助手。先展示安装计划,等我确认后再执行,然后验证安装结果。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}下载 {ph3},放进一个新的示例文件夹并解压。用 REA 找出点击 Export notes 后发生了什么。展示 " +"{ph4} 写到哪里、有哪些字段,以及相关文件和行号。{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}使用 {ph3} 安装 " +"REA,并连接到这个编程助手。先展示安装计划,等我确认后再执行,然后验证安装结果。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}使用 {ph3} 安装 " +"REA,并连接到这个编程助手。先展示安装计划,等我确认后再执行,然后验证安装结果。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "{ph0}›{ph1}{ph2}用 REA 检查 {ph3}。帮我克隆这个网站。{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "重建工程 · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "准备好 {ph0} 和 npm 后,运行 setup,选择编程助手,再确认拟进行的更改。" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "提供的示例 · {ph0} 和 npm · 编程助手" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"使用 Claude Code、Codex、Cursor 等编程助手。需要 {ph0} 和 npm;{ph1}安装指南列出了支持的版本{ph2}。" + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "{ph0}页面 · {ph1}{ph2}{ph3}Export notes(导出笔记){ph4}{ph5}调用 {ph6}。{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "{ph0}桥接 · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}向主进程发送命名消息。{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}处理函数 · {ph1}{ph2}{ph3}写入 {ph4}{ph5}{ph6}调用 {ph7} 中的格式化函数,再写入文件。{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} · 第 8–12 行" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}预测 id 为 1、标题为 {ph3} 的笔记会导出怎样的 CSV。再用 {ph5} 运行示例的 {ph4} " +"格式化函数验证。展示预测和实际输出。{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "标题保留在一个带引号的字段里,每个引号都写成两个。这里用 {ph0} 直接检查格式化函数。" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV 格式化函数" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "你需要 {ph0} 22 (22.19+), 24 (24.11+) 或26+。 npm自带 {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "还没安装 {ph0},或不确定?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"如果 {ph0} 显示 v22.19+、v24.11+ 或 v26+,就可以继续。如果版本更旧,或显示“无法识别”/“command not " +"found”,先安装 {ph1} 24 LTS:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} · 示例源摘录" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "{ph0}打开示例{ph1} · {ph2}下载 {ph3}{ph4} · {ph5}下载 {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} · 示例来源" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "下载示例并解压缩。 存档包含完整的 {ph0} 文件夹。 分析它与 {ph1} 和 npm; Electron 本例不需要。" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "第一次使用,还没安装 {ph0} 或编程助手?{ph1}跟着安装指南一步步来 →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "比如:{ph0}为什么计算器算 {ph1} 会得到 220?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 检查 Windows 计算器。为什么 {ph3} 会得到 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA · 已加载 {ph0} · 代码节选" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "我们已看到{ph0}为什么 {ph1} 得到 220。{ph2}现在把 + 和 × 后的规则都还原出来,亲自试试。" + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA 读取 {ph1}{ph2}{ph3}它启动计算器应用{ph4}{ph5}代码打开 " +"{ph6}。助手随后选择已安装应用的库。{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA检查aegis-v3.4。{ph3}. " +"找到它如何生成六位数的登录代码,解释为什么它每30秒更改一次,并重建一个我可以更改时间的小演示。{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} · API 成员" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} · IPC 辅助函数" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "主要/{ph0} · 处理程序助手" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "主要/{ph0} · 剪贴板接收器" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL.EXE" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "重建*迪诺-速度。js的" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "准备好 Node.js 和 npm 后,运行 setup,选择编程助手,再确认拟进行的更改。" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "提供的示例 · Node.js 和 npm *你的编程助手" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "使用编码剂如 Claude Code, Codex 或 Cursor. 你需要 Node.js 和 npm; " +#~ "{ph0}安装指南列出了支持的版本{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "{ph0}页*渲染器。js的{ph1}{ph2}出口票据{ph3}{ph4}函数调用 {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "{ph0}桥*预紧。js的{ph1}{ph2}{ph3}{ph4}{ph5}向主进程发送命名消息。{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}处理程序*主。js的{ph1}{ph2}写笔记。csv档案源{ph3}{ph4}调用格式化程序 {ph5} 并写入文件。{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}预测 CSV 对于id1和标题Hello的注释,\"REA\". 然后运行示例的toCsv格式化程序 Node.js " +#~ "检查一下。 示预测和实际输出。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "标题停留在一个带引号的字段中;每个引号加倍。 这直接用Node.js检查格式化程序。" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV 格式化程序" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "需要 Node.js 22(22.19+)、24(24.11+)或 26+。Node.js 自带 npm。" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "还没安装 Node.js,或不确定?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "如果 {ph0} 显示 v22.19+、v24.11+ 或 v26+,就可以继续。如果版本更旧,或显示“无法识别”/“command not " +#~ "found”,先安装 Node.js 24 LTS:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "{ph0}打开示例{ph1} · {ph2}下载导出。js的{ph3} · {ph4}下载笔记。json格式{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "下载示例并解压缩。 存档包含完整的 {ph0} 文件夹。 分析它与 Node.js 和 npm; Electron 本例不需要。" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "第一次使用,还没安装 Node.js 或编程助手?{ph0}跟着安装指南一步步来 →{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "比如:{ph0}为什么计算器算 200 + 10% 会得到 220?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}用 REA 检查 Windows 计算器。为什么 200 + 10% 会得到 220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "我们已看到{ph0}为什么 200 + 10% 得到 220。{ph1}现在把 + 和 × 后的规则都还原出来,亲自试试。" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA 读取 calc.exe{ph1}{ph2}它启动计算器应用{ph3}{ph4}代码打开 " +#~ "{ph5}。助手随后选择已安装应用的库。{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用方法 REA 检查aegis-v3.4.3。丹共。 " +#~ "找到它如何生成六位数的登录代码,解释为什么它每30秒更改一次,并重建一个我可以更改时间的小演示。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/预加载。js*API成员" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/预加载。js*IPC助手" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "主/索引。js*handler helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "主/索引。js*剪贴板接收器" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "主要。js*第8-12行" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "出口。js*实例源码摘录" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "渲染器。js*示例源" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "预紧力。js*示例源" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "主要。js*示例源" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA · 已加载 index.js · 代码节选" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用方法 REA 分析/绝对/路径/到/应用程序并解释它如何导出数据。 " +#~ "显示相关代码和源位置。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}安装/安装 REA 并将其连接到这个编码代理使用 npx rea-代理@最新设置。 " +#~ "向我显示安装计划以供批准,然后验证安装。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}下载 https://rea.tools/examples/notes-example.zip " +#~ "到一个新的示例文件夹中并解压缩。 使用方法 REA 要查找当我单击导出笔记时会发生什么。 " +#~ "显示注释的位置。csv被写入,它包含哪些字段,以及相关的文件和行。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}安装/安装 REA 并将其连接到这个编码代理使用 npx rea-代理@最新设置。 " +#~ "向我显示安装计划以供批准,然后验证安装。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}安装/安装 REA 并将其连接到这个编码代理使用 npx rea-代理@最新设置。 " +#~ "向我显示安装计划以供批准,然后验证安装。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用方法 REA 检查 https://rea.tools/. 为我克隆这个网站。{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "编码[21]=55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "×××尺度" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "{ph0}REA{ph1}{ph2}逆向工程任何东西{ph3}" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/locales/zh-TW/messages.po b/website/locales/zh-TW/messages.po new file mode 100644 index 000000000..e39cd5ee3 --- /dev/null +++ b/website/locales/zh-TW/messages.po @@ -0,0 +1,12306 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: REA website\n" +"Language: zh-TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Initial-Translation: Machine-assisted Traditional Chinese baseline; community review welcome\n" + +#: website/public/blog/index.html:99 +msgctxt "page:blog/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/index.html:181 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "{ph0}Home{ph1} / Blog" +msgstr "{ph0}首頁{ph1} /部落格" + +#: website/public/blog/index.html:182 +msgctxt "page:blog/index.html" +msgid "Blog." +msgstr "部落格。" + +#: website/public/blog/index.html:183 +msgctxt "page:blog/index.html" +msgid "Thoughts on reverse engineering." +msgstr "逆向工程的思考。" + +#. {ph0}:
+#: website/public/blog/index.html:187 +#, python-brace-format +msgctxt "page:blog/index.html" +msgid "Game reconstruction{ph0}Essay" +msgstr "遊戲重建{ph0}論文" + +#: website/public/blog/index.html:189 +msgctxt "page:blog/index.html" +msgid "The industrial revolution in reverse engineering" +msgstr "逆向工程的工業革命" + +#: website/public/blog/index.html:190 +msgctxt "page:blog/index.html" +msgid "" +"What manual RE and reconstructing TH08, TH095 and TH04 taught me about " +"agents, verification and knowledge that compounds across projects." +msgstr "什麼手動重新和重建TH08,TH095和TH04教我關於程式設計助手,驗證和知識,跨專案的化合物。" + +#: website/public/blog/index.html:195 +msgctxt "page:blog/index.html" +msgid "Read the article" +msgstr "閱讀文章" + +#: website/public/blog/index.html:198 +msgctxt "page:blog/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "透過N0zoM1z0*10十月2026" + +#. {ph0}: +#: website/public/blog/index.html:217 +#: website/public/blog/touhou-reconstruction/index.html:1067 +#: website/public/examples/dino-lab/index.html:462 +#: website/public/faq/index.html:560 +#: website/public/first-investigation/index.html:510 +#: website/public/get-started/index.html:869 +#: website/public/guides/browser/index.html:485 +#: website/public/guides/index.html:269 +#: website/public/guides/javascript/index.html:490 +#: website/public/guides/native/index.html:496 website/public/index.html:1173 +#: website/public/showcase/aegis/index.html:795 +#: website/public/showcase/ctf/index.html:764 +#: website/public/showcase/dx-ball/index.html:772 +#: website/public/showcase/index.html:304 +#: website/public/showcase/notion/index.html:618 +#: website/public/showcase/th04/index.html:787 +#, python-brace-format +msgctxt "shared" +msgid "{ph0}↑{ph1} Top" +msgstr "{ph0}↑{ph1} 頂部" + +#: website/public/blog/index.html:6 +msgctxt "page:blog/index.html" +msgid "REA Blog — Thoughts on Reverse Engineering" +msgstr "REA部落格-逆向工程的思考" + +#: website/public/blog/index.html:7 +msgctxt "page:blog/index.html" +msgid "" +"Thoughts on reverse engineering, drawing on practical experience with REA " +"and AI agents." +msgstr "對逆向工程的思考,借鑑與 REA 和AI程式設計助手。" + +#: website/public/blog/index.html:75 website/public/blog/index.html:88 +#: website/public/blog/touhou-reconstruction/index.html:75 +#: website/public/blog/touhou-reconstruction/index.html:88 +#: website/public/examples/dino-lab/index.html:75 +#: website/public/examples/dino-lab/index.html:88 +#: website/public/faq/index.html:75 website/public/faq/index.html:88 +#: website/public/first-investigation/index.html:75 +#: website/public/first-investigation/index.html:88 +#: website/public/get-started/index.html:75 +#: website/public/get-started/index.html:88 +#: website/public/guides/browser/index.html:75 +#: website/public/guides/browser/index.html:88 +#: website/public/guides/index.html:75 website/public/guides/index.html:88 +#: website/public/guides/javascript/index.html:75 +#: website/public/guides/javascript/index.html:88 +#: website/public/guides/native/index.html:75 +#: website/public/guides/native/index.html:88 website/public/index.html:75 +#: website/public/index.html:88 website/public/showcase/aegis/index.html:75 +#: website/public/showcase/aegis/index.html:88 +#: website/public/showcase/ctf/index.html:75 +#: website/public/showcase/ctf/index.html:88 +#: website/public/showcase/dx-ball/index.html:75 +#: website/public/showcase/dx-ball/index.html:88 +#: website/public/showcase/index.html:75 website/public/showcase/index.html:88 +#: website/public/showcase/notion/index.html:75 +#: website/public/showcase/notion/index.html:88 +#: website/public/showcase/th04/index.html:75 +#: website/public/showcase/th04/index.html:88 +msgctxt "shared" +msgid "" +"REA — Find out how software works. Reverse engineering with your coding " +"agent." +msgstr "REA-瞭解軟體的工作原理。 逆向工程與你的程式設計助手." + +#: website/public/blog/index.html:104 +#: website/public/blog/touhou-reconstruction/index.html:104 +#: website/public/examples/dino-lab/index.html:105 +#: website/public/faq/index.html:104 +#: website/public/first-investigation/index.html:104 +#: website/public/get-started/index.html:104 +#: website/public/guides/browser/index.html:104 +#: website/public/guides/index.html:104 +#: website/public/guides/javascript/index.html:104 +#: website/public/guides/native/index.html:104 website/public/index.html:106 +#: website/public/showcase/aegis/index.html:105 +#: website/public/showcase/ctf/index.html:104 +#: website/public/showcase/dx-ball/index.html:104 +#: website/public/showcase/index.html:104 +#: website/public/showcase/notion/index.html:104 +#: website/public/showcase/th04/index.html:104 +msgctxt "shared" +msgid "REA home" +msgstr "REA 首頁" + +#: website/public/blog/index.html:108 +#: website/public/blog/touhou-reconstruction/index.html:108 +#: website/public/examples/dino-lab/index.html:109 +#: website/public/faq/index.html:108 +#: website/public/first-investigation/index.html:108 +#: website/public/get-started/index.html:108 +#: website/public/guides/browser/index.html:108 +#: website/public/guides/index.html:108 +#: website/public/guides/javascript/index.html:108 +#: website/public/guides/native/index.html:108 website/public/index.html:110 +#: website/public/showcase/aegis/index.html:109 +#: website/public/showcase/ctf/index.html:108 +#: website/public/showcase/dx-ball/index.html:108 +#: website/public/showcase/index.html:108 +#: website/public/showcase/notion/index.html:108 +#: website/public/showcase/th04/index.html:108 +msgctxt "shared" +msgid "Main navigation" +msgstr "主導航" + +#: website/public/blog/index.html:117 +#: website/public/blog/touhou-reconstruction/index.html:117 +#: website/public/examples/dino-lab/index.html:118 +#: website/public/faq/index.html:117 +#: website/public/first-investigation/index.html:117 +#: website/public/get-started/index.html:117 +#: website/public/guides/browser/index.html:117 +#: website/public/guides/index.html:117 +#: website/public/guides/javascript/index.html:117 +#: website/public/guides/native/index.html:117 website/public/index.html:119 +#: website/public/showcase/aegis/index.html:118 +#: website/public/showcase/ctf/index.html:117 +#: website/public/showcase/dx-ball/index.html:117 +#: website/public/showcase/index.html:117 +#: website/public/showcase/notion/index.html:117 +#: website/public/showcase/th04/index.html:117 +msgctxt "shared" +msgid "REA on GitHub" +msgstr "在 GitHub 檢視 REA" + +#: website/public/blog/index.html:137 +#: website/public/blog/touhou-reconstruction/index.html:137 +#: website/public/examples/dino-lab/index.html:138 +#: website/public/faq/index.html:137 +#: website/public/first-investigation/index.html:137 +#: website/public/get-started/index.html:137 +#: website/public/guides/browser/index.html:137 +#: website/public/guides/index.html:137 +#: website/public/guides/javascript/index.html:137 +#: website/public/guides/native/index.html:137 website/public/index.html:139 +#: website/public/showcase/aegis/index.html:138 +#: website/public/showcase/ctf/index.html:137 +#: website/public/showcase/dx-ball/index.html:137 +#: website/public/showcase/index.html:137 +#: website/public/showcase/notion/index.html:137 +#: website/public/showcase/th04/index.html:137 +msgctxt "shared" +msgid "Join REA on Discord" +msgstr "加入 REA 的 Discord 社群" + +#: website/public/blog/index.html:156 +#: website/public/blog/touhou-reconstruction/index.html:156 +#: website/public/examples/dino-lab/index.html:157 +#: website/public/faq/index.html:156 +#: website/public/first-investigation/index.html:156 +#: website/public/get-started/index.html:156 +#: website/public/guides/browser/index.html:156 +#: website/public/guides/index.html:156 +#: website/public/guides/javascript/index.html:156 +#: website/public/guides/native/index.html:156 website/public/index.html:158 +#: website/public/showcase/aegis/index.html:157 +#: website/public/showcase/ctf/index.html:156 +#: website/public/showcase/dx-ball/index.html:156 +#: website/public/showcase/index.html:156 +#: website/public/showcase/notion/index.html:156 +#: website/public/showcase/th04/index.html:156 +msgctxt "shared" +msgid "Follow REA on X" +msgstr "在 X 上關注 REA" + +#: website/public/blog/index.html:217 +msgctxt "page:blog/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/blog/touhou-reconstruction/index.html:99 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:181 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction" +msgstr "{ph0}首頁{ph1} / {ph2}部落格{ph3} / 東方遊戲重建" + +#: website/public/blog/touhou-reconstruction/index.html:185 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Essay · Touhou reconstruction" +msgstr "隨筆 · 東方遊戲重建" + +#: website/public/blog/touhou-reconstruction/index.html:186 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The industrial revolution in reverse engineering." +msgstr "逆向工程的工業革命。" + +#: website/public/blog/touhou-reconstruction/index.html:187 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "By N0zoM1z0 · 10 October 2026" +msgstr "作者 N0zoM1z0 · 2026 年 10 月 10 日" + +#: website/public/blog/touhou-reconstruction/index.html:189 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Takeaway" +msgstr "要點" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:191 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and " +"acceptance criteria, then let the agent decide what to try next." +msgstr "{ph0}讓程式設計助手自主開展調查。{ph1}明確目標和驗收標準,再讓它決定下一步嘗試什麼。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:196 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning " +"with the code. Git checkpoints let the next session continue after the " +"conversation ends." +msgstr "" +"{ph0}把程式碼儲存庫和 Git 當作工作記憶。{ph1}推理過程和程式碼一起儲存。用 Git 留下檢查點,下一次會話就能在對話結束後接著做。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:201 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still " +"needs testing. “Unknown” is a valid answer when the evidence is incomplete." +msgstr "{ph0}結論要由證據決定。{ph1}說得再肯定,也需要驗證。證據不足時,“尚不清楚”是合理的答案。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:206 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a " +"bug, revisit the earlier results that depended on it." +msgstr "{ph0}驗證基準本身也要測試。{ph1}故意給它應當拒絕的錯誤案例。如果它漏掉了 bug,就重新檢查依賴這套基準的早期結果。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:211 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early days of RE's industrial revolution.{ph1} The " +"methods are still taking shape. There is plenty left to explore." +msgstr "{ph0}我們正處於逆向工程工業革命的早期。{ph1}方法還在成形,還有很多值得探索的地方。" + +#: website/public/blog/touhou-reconstruction/index.html:223 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "How experience compounds" +msgstr "經驗如何產生複利" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:224 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria" +msgstr "{ph0}人來定方向{ph1} · 目標和驗收標準" + +#: website/public/blog/touhou-reconstruction/index.html:312 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Autonomy" +msgstr "自主探索" + +#: website/public/blog/touhou-reconstruction/index.html:313 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Agent" +msgstr "程式設計助手" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:314 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Choose an experiment.{ph0}Propose a hypothesis." +msgstr "選擇實驗。{ph0}提出假設。" + +#: website/public/blog/touhou-reconstruction/index.html:317 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Verification" +msgstr "驗證" + +#: website/public/blog/touhou-reconstruction/index.html:318 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Oracle" +msgstr "驗證基準" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:319 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Test against a{ph0}concrete reference." +msgstr "對照{ph0}具體的基準驗證。" + +#: website/public/blog/touhou-reconstruction/index.html:322 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Repository" +msgstr "程式碼儲存庫" + +#: website/public/blog/touhou-reconstruction/index.html:323 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Working memory" +msgstr "工作記憶" + +#. {ph0}:
+#: website/public/blog/touhou-reconstruction/index.html:324 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Code, evidence,{ph0}checks and lessons." +msgstr "程式碼、證據、{ph0}檢查和經驗。" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:326 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}" +msgstr "不匹配{ph0}{ph1}修正假設{ph2}" + +#. {ph0}:
+#. {ph1}: +#. {ph2}: +#: website/public/blog/touhou-reconstruction/index.html:329 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "A better{ph0}{ph1}starting point{ph2}" +msgstr "更好的{ph0}{ph1}起點{ph2}" + +#: website/public/blog/touhou-reconstruction/index.html:332 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reuse" +msgstr "複用" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:333 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Pass{ph1} · Keep the result and its evidence" +msgstr "{ph0}透過{ph1} · 保留結果及其證據" + +#: website/public/blog/touhou-reconstruction/index.html:345 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Each project leaves the next with a better starting point. That includes " +"fixing the checks when we discover a gap." +msgstr "每個專案都為下一個專案留下更好的起點。發現檢查有漏洞時,也要把檢查修好。" + +#: website/public/blog/touhou-reconstruction/index.html:352 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "In this article" +msgstr "在本文中" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:354 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}August 2026{ph1}" +msgstr "{ph0}2026年8月{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:355 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH08: the continuation{ph1}" +msgstr "{ph0}TH08:接續前人的工作{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:356 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Two approaches{ph1}" +msgstr "{ph0}兩種方法{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:357 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH095: compounding{ph1}" +msgstr "{ph0}TH095:經驗的複利{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:358 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}TH04: across architectures{ph1}" +msgstr "{ph0} TH04:跨架構{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:359 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}From exact to readable{ph1}" +msgstr "{ph0}從精確到可讀{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:362 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}The industrial shift{ph1}" +msgstr "{ph0}工業化的轉變{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:363 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}What becomes possible{ph1}" +msgstr "{ph0}新的可能性{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:368 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What changed in August 2026" +msgstr "2026年8月發生了什麼變化" + +#: website/public/blog/touhou-reconstruction/index.html:369 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Before this work, I had done a lot of manual reverse engineering. I would " +"inspect a function until I had an explanation, then test that explanation " +"against the program. Getting further meant spending more of my own time on " +"the next function. It also meant keeping an increasingly large picture in my" +" head." +msgstr "" +"在這之前,我做過很多手工逆向。我會反覆檢視一個函式,直到能解釋它,再對照程式驗證這個解釋。想推進專案,就得親自花更多時間研究下一個函式,腦子裡也要記住越來越多的整體關係。" + +#: website/public/blog/touhou-reconstruction/index.html:376 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Most of my RE work is on games. I reconstruct them so their behavior can be " +"understood and eventually carried into a port or a mod. That is the " +"experience behind this article. The method can be useful elsewhere, but each" +" field needs to establish what it can check against a reliable reference." +msgstr "" +"我的逆向工作主要圍繞遊戲。我希望透過重建弄清遊戲的行為,最終做出移植版或 " +"mod。這篇文章來自這些經歷。方法可以遷移到其他領域,但每個領域都需要先明確:什麼可以用可靠的基準來驗證。" + +#: website/public/blog/touhou-reconstruction/index.html:383 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In August 2026, I started exploring agent-driven RE seriously. I wanted to " +"see how far an agent could get with access to the program and ordinary " +"development tools. Touhou reconstruction gave me a substantial project in " +"which to find out." +msgstr "" +"2026 年 8 月,我開始認真探索讓程式設計助手做逆向。有了程式本身和常用開發工具,它究竟能走多遠?東方遊戲重建給了我一個足夠完整的專案來尋找答案。" + +#: website/public/blog/touhou-reconstruction/index.html:389 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The early progress was startling. An investigation could keep moving without" +" me choosing every individual step. A failed comparison might send the agent" +" to another caller. It could write a small diagnostic and use the result to " +"decide what to try next. Giving it that freedom made a difference: I could " +"spend more attention on the project's direction and on whether its checks " +"were trustworthy." +msgstr "" +"早期的進展讓我吃驚。我不再需要為每一步作選擇,調查也能持續推進。對比失敗後,助手可能轉去檢視另一個呼叫方,寫一段診斷程式,再根據結果決定下一步。這種自主性改變了我的工作:我可以更多關注專案方向,以及檢查是否可靠。" + +#: website/public/blog/touhou-reconstruction/index.html:398 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace got my attention first. Then I began wondering what would survive " +"beyond the current project. Would the next game benefit from everything we " +"had just learned?" +msgstr "速度先引起了我的注意。隨後我開始想:當前專案結束後,什麼會留下來?下一個遊戲能不能用上我們剛學到的經驗?" + +#: website/public/blog/touhou-reconstruction/index.html:405 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH08: building on human work" +msgstr "TH08:接續前人的工作" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:406 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of " +"{ph2}GensokyoClub's reconstruction{ph3}. Their public source gave me a " +"substantial foundation. It came with knowledge of the build and a history of" +" contributions that I preserved in the continuation." +msgstr "" +"{ph0}TH08{ph1},也就是《東方永夜抄》,從接續{ph2}GensokyoClub " +"的重建工作{ph3}開始。他們的公開原始碼提供了紮實的基礎,也留下了構建經驗和貢獻歷史。我在後續工作中保留了這些歷史。" + +#: website/public/blog/touhou-reconstruction/index.html:415 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The imported history ends at the public 10 August checkpoint. My independent" +" continuation began on 13 August. By 19 August, the ledger recorded source " +"for all 1,107 identified game functions." +msgstr "" +"匯入的歷史截至 8 月 10 日的公開檢查點。我的獨立續作從 8 月 13 日開始。到 8 月 19 日,進度臺賬中已識別的 1,107 " +"個遊戲函式都有了原始碼。" + +#: website/public/blog/touhou-reconstruction/index.html:420 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A playable Linux reconstruction port was committed on 24 August, roughly " +"eleven days after the continuation began. A Web edition followed. The native" +" Linux 64-bit release arrived on 30 August." +msgstr "" +"8 月 24 日,我們提交了可玩的 Linux 重建移植版,距離開始續作約十一天。隨後做出了 Web 版。8 月 30 日,原生 Linux 64 " +"位版釋出。" + +#: website/public/blog/touhou-reconstruction/index.html:425 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"What struck me was that the work had reached a program people could run. " +"Getting there required following problems beyond an individual function. " +"Even when two functions looked correct in isolation, they could accidentally" +" use separate copies of state that should have been shared." +msgstr "" +"最打動我的是,這些工作最終變成了大家能執行的程式。為此必須解決單個函式以外的問題。即使兩個函式分別看起來都對,也可能各自使用一份本應共享的狀態。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:432 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This made reference checks central to the work. I call them " +"{ph0}oracles{ph1}. A code comparison can tell us whether a reconstructed " +"function reproduces the original instructions. A runtime check can tell us " +"whether an exercised route reaches the expected state. The agent proposes an" +" explanation and tests it; a mismatch gives it something specific to " +"investigate." +msgstr "" +"這讓對照檢查成為工作的核心。我把這些基準稱為{ph0}驗證基準(oracle){ph1}。程式碼對比可以檢查重建函式是否復現原始指令;執行時檢查可以確認已走過的路徑是否到達預期狀態。助手提出解釋,再驗證它。發現不匹配,就有了具體的調查方向。" + +#: website/public/blog/touhou-reconstruction/index.html:440 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "An exact match with the wrong constant" +msgstr "常量錯了,卻仍然“精確匹配”" + +#: website/public/blog/touhou-reconstruction/index.html:441 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"An oracle is software someone wrote. TH08 gave me a clear reminder of how " +"much can depend on that software." +msgstr "校驗工具也是人寫的軟體。TH08 讓我清楚地看到,多少結論都依賴著它。" + +#. {ph0}: 0.0 +#. {ph1}: 128.0 +#: website/public/blog/touhou-reconstruction/index.html:445 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In September, a bug reported by a downstream Switch port led back to item " +"auto-collection. The reconstructed source checked player power against " +"{ph0}. The original used {ph1}, the maximum-power threshold." +msgstr "" +"9 月,下游 Switch 移植版報告了一個 bug,最後追溯到道具自動收集。重建原始碼把玩家火力與 {ph0} 比較,而原版用的是 " +"{ph1},即滿火力的閾值。" + +#: website/public/blog/touhou-reconstruction/index.html:451 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Normal power is non-negative, so the reconstructed power check was " +"effectively always satisfied. Above the collection line, the game could " +"attract items without requiring maximum power. The other exceptions in the " +"condition were correct. This one constant changed the behavior." +msgstr "" +"正常火力不會小於零,所以重建版的火力條件幾乎總是滿足。玩家到了收集線上方,不用滿火力也會吸取道具。條件裡的其他例外沒有問題,但這一個常量就改變了行為。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:458 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}" +msgstr "{ph0}可這個函式之前已經透過了精確對比。{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:464 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A rebuild can put a constant at a different address. The comparison tool " +"accounted for that by adjusting addresses in the compiled instructions " +"before comparing them with the original. But it never checked the floating-" +"point value stored at the referenced address." +msgstr "" +"重新編譯後,常量可能出現在不同地址。比較工具會先調整編譯後指令中的地址,再和原版比較,以處理這種差異。問題是,它從未檢查被引用地址中實際存放的浮點值。" + +#. {ph0}: 128.0 +#. {ph1}: 0.0 +#: website/public/blog/touhou-reconstruction/index.html:471 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That left a hole in the check. It could point the reconstructed instruction " +"at the original's {ph0} while the source still said {ph1}. The instruction " +"bytes matched. The source meant something different." +msgstr "漏洞就在這裡:工具可以把重建指令的引用地址調整為原版的 {ph0},而原始碼裡寫的仍然是 {ph1}。指令位元組匹配了,原始碼含義卻不同。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:477 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}2 September fix{ph1} corrected the source and made the comparison " +"check the referenced constant's actual bytes. A {ph2}wider audit{ph3} then " +"examined 1,548 floating-literal references. It found another twelve " +"incorrect references across five accepted functions." +msgstr "" +"{ph0}9 月 2 日的修復{ph1}糾正了原始碼,並讓比較工具檢查被引用常量的實際位元組。隨後進行的{ph2}全面審計{ph3}檢查了 1,548 " +"處浮點常量引用,又在五個已透過驗收的函式中發現十二處錯誤引用。" + +#: website/public/blog/touhou-reconstruction/index.html:488 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The comparison now checks every such floating literal. Its tests include " +"deliberately wrong values to make sure they are rejected. We also had to " +"revisit results that had passed the weaker check." +msgstr "現在工具會檢查每一處這樣的浮點常量。測試還會故意使用錯誤值,確保工具能夠拒絕它們。我們也重新檢查了曾經透過舊版檢查的結果。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:493 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of " +"repairing the game." +msgstr "{ph0}驗證基準本身也需要重建。{ph1}修復它,就是修復遊戲的一部分。" + +#: website/public/blog/touhou-reconstruction/index.html:497 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That matters when the team is mostly one person working with agents. I " +"cannot personally inspect every line they produce, so much of my confidence " +"rests on their checks. A shared oracle's blind spot can affect many " +"investigations before I notice it. I have to understand what the checker " +"actually verifies and test it against cases that ought to fail." +msgstr "" +"當團隊幾乎就是一個人加一群程式設計助手時,這一點尤其重要。我無法逐行檢查它們寫出的所有程式碼,很多信心都來自檢查結果。共享驗證基準中的盲點,可能在我發現之前就影響許多調查。我必須弄清工具到底驗證了什麼,再用應當失敗的案例測試它。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:505 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"As the work continued, those checks became part of the repository. So did " +"the reasons for source changes and notes that let a later session pick up " +"where an earlier one stopped. {ph0}The repository was becoming the project's" +" working memory.{ph1}" +msgstr "" +"隨著專案推進,檢查程式進入了程式碼儲存庫。原始碼修改的理由也儲存在裡面,還有讓下一次會話能夠接著做的記錄。{ph0}程式碼儲存庫正在成為專案的工作記憶。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:514 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}A successful batch gave us both recovered code and a better environment" +" for the next batch.{ph1}" +msgstr "{ph0}每完成一批工作,我們既得到了還原的程式碼,也改善了下一批工作的環境。{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:522 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Two different ideas of reconstruction" +msgstr "兩種不同的重建理念" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:523 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind" +" of work explicit. The notice announces that further development will happen" +" privately until completion. One passage reads:" +msgstr "" +"GensokyoClub 的{ph0}公開 " +"README{ph1}明確表達了對這種工作的異議。公告說,專案完成前,後續開發將在私下進行。其中有這樣一段話:" + +#: website/public/blog/touhou-reconstruction/index.html:534 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The rise of grifters (AI decompilations and ports) in this space taking from" +" our work paints a bad image for future decompilation efforts…" +msgstr "“這個領域裡出現了利用我們成果的投機者(AI 反編譯和移植專案),給未來的反編譯工作留下了不好的印象……”" + +#: website/public/blog/touhou-reconstruction/index.html:540 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The notice also describes the psychological toll on the maintainers. Their " +"contribution policy excludes pull requests produced primarily with AI. They " +"have put their free time into difficult work, and that work helped make my " +"continuation possible. I respect the effort behind it. The disagreement I " +"want to discuss is about how reconstruction should proceed and how a " +"contribution should be judged." +msgstr "" +"公告也提到了維護者承受的心理壓力。他們的貢獻政策不接受主要由 AI 生成的 " +"PR。他們用業餘時間投入了艱難的工作,這些成果讓我的續作成為可能。我尊重他們付出的努力。我想討論的分歧,是重建應當如何推進,以及貢獻應當如何評價。" + +#: website/public/blog/touhou-reconstruction/index.html:549 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In the manual workflow I knew, developing an understanding of a function and" +" reconstructing it usually fell to the same person. A project relied heavily" +" on that person's expertise. Trust in the contributor mattered because so " +"much of the reasoning happened while they worked." +msgstr "" +"在我熟悉的手工流程中,理解一個函式和重建它,通常由同一個人完成。專案非常依賴這個人的專業能力。很多推理發生在工作過程中,所以對貢獻者本人的信任很重要。" + +#: website/public/blog/touhou-reconstruction/index.html:556 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Existing projects already preserve knowledge in their source and build " +"tools. What changed for me was that an agent could use that knowledge to " +"pursue the next investigation on its own." +msgstr "已有專案本就會在原始碼和構建工具中儲存知識。對我而言,變化在於:程式設計助手能利用這些知識,自主推進下一次調查。" + +#: website/public/blog/touhou-reconstruction/index.html:561 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"In my continuation, I decide the objective and the standard for accepting a " +"result. The agent has broad freedom to investigate. Its proposed " +"reconstruction then has to survive the relevant checks. I want another " +"person to be able to examine why we chose an implementation, even if an " +"agent did most of the work." +msgstr "" +"在我的續作中,我來確定目標和驗收標準,助手有充分的調查自由。它提出的重建方案必須透過相應檢查。我希望其他人能夠看懂我們為什麼選擇這個實現,即使大部分工作由助手完成。" + +#: website/public/blog/touhou-reconstruction/index.html:568 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This can be a difficult transition. Years of careful work may become the " +"foundation for a continuation that moves much faster. That raises real " +"questions about credit. It also changes what maintainers need to know before" +" accepting a contribution." +msgstr "" +"這可能是一個艱難的轉變。多年的細緻工作,可能成為一個推進得更快的續作的基礎。這會帶來真實的歸屬與署名問題,也改變維護者在接受貢獻前需要了解的事情。" + +#: website/public/blog/touhou-reconstruction/index.html:574 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy helps me think about this. In a craft, much of the " +"process depends on the skill of the person carrying it out. Machinery " +"changes where that skill is needed. Someone still has to design the process " +"and recognize when its output is wrong. Different communities can choose how" +" much of that change they want to take on." +msgstr "" +"工業化的比喻有助於理解這一點。手工作業的過程往往依賴操作者的技藝。機器改變了這些技藝發揮作用的位置,但仍然需要人設計流程、識別錯誤產出。不同社群可以選擇接受多少這樣的變化。" + +#: website/public/blog/touhou-reconstruction/index.html:582 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"My choice is to continue openly, with the inherited work credited and its " +"history preserved. I want the new work to be reviewable. That gives us a way" +" to ask how far this approach can go and to learn from what goes wrong along" +" the way." +msgstr "我的選擇是公開繼續,註明繼承的工作並保留其歷史。我希望新工作可以被審查。這樣,我們才能探索這種方法能走多遠,也從沿途的問題中學習。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:588 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, " +"and its {ph2}contribution policy{ph3}. The quotation is a shortened excerpt." +" TH08's {ph4}credits and provenance{ph5} record the continuation boundary." +msgstr "" +"來源:GensokyoClub 的{ph0}README 公告{ph1}(於 2026 年 10 月 10 " +"日核對)及其{ph2}貢獻政策{ph3}。上面的引文為節選譯文。TH08 的{ph4}貢獻署名與來源記錄{ph5}說明了獨立續作的起點。" + +#: website/public/blog/touhou-reconstruction/index.html:606 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH095: experience starts compounding" +msgstr "TH095:經驗開始產生複利" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:607 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much " +"easier to see. Its repository began on 29 August with zero confirmed game " +"functions in the ledger. We still had to learn the game. But we already knew" +" much more about how to begin a reconstruction and how to keep it moving." +msgstr "" +"{ph0}TH095{ph1},也就是《東方文花帖》,讓這些經驗的價值更容易看清。儲存庫於 8 月 29 " +"日建立,當時臺賬中確認的遊戲函式數量為零。我們仍需研究遊戲本身,但已經更清楚如何開始重建,以及怎樣持續推進。" + +#: website/public/blog/touhou-reconstruction/index.html:615 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"By 7 September, all 697 identified game functions had source. By 8 " +"September, 696 had been accepted as exact comparisons. The whole program " +"linked on 9 September. The Windows i386 reconstruction was marked playable " +"on 10 September, about twelve days after initialization." +msgstr "" +"到 9 月 7 日,全部 697 個已識別遊戲函式都有了原始碼。9 月 8 日,其中 696 個透過了精確對比。9 月 9 日,整個程式完成連結。9 月" +" 10 日,Windows i386 重建版被記錄為可玩,距離初始化約十二天。" + +#: website/public/blog/touhou-reconstruction/index.html:622 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I found this more exciting than the first project's speed. A fresh target " +"could benefit from work done on another game. The experience was already " +"present in the tools and in the way the project was organized." +msgstr "這比第一個專案的速度更讓我興奮。新目標能受益於另一個遊戲的工作。經驗已經進入工具,也進入了專案的組織方式。" + +#: website/public/blog/touhou-reconstruction/index.html:628 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For example, TH08 had taught us to pay attention to the assembled program " +"early. If several recovered functions depend on the same state, their " +"isolated comparisons leave an important question open. We need to see them " +"working together. That lesson helped shape how we approached TH095's whole-" +"program build." +msgstr "" +"例如,TH08 教會我們儘早關注整個程式。如果幾個還原函式依賴同一份狀態,分別對比它們仍然會留下一個關鍵問題:它們能否一起正常工作?這條經驗影響了 " +"TH095 的整程式構建方式。" + +#: website/public/blog/touhou-reconstruction/index.html:635 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A lesson that stays in my head is useful while I am there. Once it becomes a" +" check that another session can run, it can keep helping after I have moved " +"on. The next agent can use the result without repeating the investigation " +"that led to it." +msgstr "" +"經驗只記在我腦子裡,我在場時它才有用。變成其他會話能執行的檢查後,即使我離開,它仍能幫助專案。下一個助手可以利用檢查結果,不用重複當初得出這條經驗的調查。" + +#: website/public/blog/touhou-reconstruction/index.html:641 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The floating-literal bug belongs in that memory too. It explains why " +"checking a reference also requires checking the data behind it. Keeping that" +" correction with the code helps later projects avoid inheriting the old " +"check's blind spot." +msgstr "" +"浮點常量的 bug 也屬於這份記憶。它說明,檢查引用時,還要檢查引用背後的資料。把修正儲存在程式碼旁邊,可以幫助後續專案避免繼承舊工具的盲點。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:647 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}The method becomes part of the starting material for the next " +"game.{ph1} We can spend more of the next project's effort on what is " +"actually new about its target." +msgstr "{ph0}方法本身成了下一個遊戲的起始材料。{ph1}我們可以把更多精力放在新目標真正不同的地方。" + +#: website/public/blog/touhou-reconstruction/index.html:655 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The same benefit is available to people joining later. They can inspect a " +"decision and rerun its check before continuing the work. They do not have to" +" reconstruct the entire project's history to find out why the source looks " +"the way it does." +msgstr "後來加入的人也能受益。他們可以檢視某個決定,重新執行檢查,再繼續工作。不用先重走整個專案的歷史,才能理解原始碼為何這樣寫。" + +#: website/public/blog/touhou-reconstruction/index.html:663 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "TH04: the workflow survives a different architecture" +msgstr "TH04:換了架構,工作方式仍然適用" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:664 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The" +" target was now a 16-bit environment with four cooperating programs. " +"Understanding its hardware behavior required different evidence from the " +"Windows games. Existing {ph2}ReC98 work{ph3} gave us valuable knowledge and " +"source material here too." +msgstr "" +"{ph0}TH04{ph1},也就是《東方幻想鄉》,把這套工作帶到了 PC-98 DOS 時代。這次是一個由四個程式協作的 16 " +"位環境。理解硬體行為,需要和 Windows 遊戲不同的證據。已有的{ph2}ReC98 工作{ph3}同樣提供了寶貴的知識與原始碼材料。" + +#: website/public/blog/touhou-reconstruction/index.html:673 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The DOS reconstruction is now working. In my manual testing, I played " +"complete Normal routes through their endings and checked saves. The current " +"work is a native 64-bit port. Establishing a working DOS version first gives" +" that port a reference." +msgstr "" +"DOS 重建版現在已經能執行。我手工打完了完整的 Normal 路線,看到結局,並檢查了存檔。目前正在做原生 64 位移植。先得到一個正常工作的 DOS" +" 版,就為移植提供了參照。" + +#: website/public/blog/touhou-reconstruction/index.html:679 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The architecture changed what we needed to investigate. It also changed the " +"compiler and runtime against which we checked our work. But the agent could " +"still follow a question through to a result and let that result guide the " +"next experiment." +msgstr "架構改變了要調查的問題,也改變了用來驗證的編譯器和執行時。但助手依然能沿著問題找到結果,再用結果指導下一次實驗。" + +#: website/public/blog/touhou-reconstruction/index.html:685 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Consider the transition from gameplay to an ending. We need to know what " +"state carries across that boundary and which program is responsible for it. " +"That is something we can investigate against the DOS product. Once the " +"evidence and checks are available, an agent can work through the question " +"much as it did on a Windows title." +msgstr "" +"比如從遊戲過程切換到結局:哪些狀態需要跨越這個邊界?哪個程式負責它們?我們可以對照 DOS 原版調查。只要證據和檢查可用,助手就能像研究 Windows" +" 遊戲一樣推進這個問題。" + +#: website/public/blog/touhou-reconstruction/index.html:693 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This is why TH04 matters to the argument. A substantial platform change did " +"not force us to start over with a new way of working. The architecture " +"defined the problem; the workflow still gave us a way to solve it." +msgstr "這就是 TH04 對這篇文章的意義。大幅的平臺變化,並沒有迫使我們重新發明一套工作方式。架構決定了問題,工作流程仍然提供瞭解決問題的方法。" + +#: website/public/blog/touhou-reconstruction/index.html:699 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"For the 64-bit port, we can now examine the new implementation against " +"behavior already recovered on DOS. The knowledge from reconstruction gives " +"the port something to build on." +msgstr "做 64 位移植時,我們可以把新實現與 DOS 上已經還原的行為對照。重建得到的知識為移植提供了基礎。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:704 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual " +"testing{ph1} · {ph2}64-bit port{ph3}. The port remains in development." +msgstr "截至 2026 年 10 月 10 日:{ph0}DOS 重建與手工測試{ph1} · {ph2}64 位移植{ph3}。移植仍在開發中。" + +#: website/public/blog/touhou-reconstruction/index.html:717 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "From exact code to readable code" +msgstr "從精確還原到可讀原始碼" + +#: website/public/blog/touhou-reconstruction/index.html:718 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Once a reconstruction works, I want someone else to be able to understand " +"it." +msgstr "重建版能執行之後,我還希望別人能讀懂它。" + +#: website/public/blog/touhou-reconstruction/index.html:722 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"To me, assembly and raw offsets can feel like old friends. I realise this is" +" a slightly unusual definition of “readable.” Most people would prefer to " +"follow the game's logic without keeping the executable's memory layout in " +"their head." +msgstr "" +"對我而言,彙編和原始偏移就像老朋友。我知道,這種“可讀”的定義有點特別。多數人更希望直接看懂遊戲邏輯,而不用在腦中記住可執行檔案的記憶體佈局。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:728 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field " +"may still be known mainly by its offset. We follow how the game uses it " +"until we can explain its role. Then we can give it a meaningful name and a " +"type that fits the evidence. We keep the reasoning with the source so the " +"next person can see where that interpretation came from." +msgstr "" +"這就需要{ph0}語義重建{ph1}。一個還原欄位可能仍然只有偏移作為標識。我們追蹤遊戲如何使用它,直到能解釋其作用,再依據證據賦予合適的名稱和型別。推理過程和原始碼一起儲存,後來的人就能知道這個解釋從何而來。" + +#: website/public/blog/touhou-reconstruction/index.html:736 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"This becomes especially important for a port. An absolute address tells me " +"where something lived in the old executable. It gives a 64-bit " +"implementation little help in deciding which object should own that state. " +"To move the behavior safely, we need to recover the relationship behind the " +"old memory access." +msgstr "" +"移植時,語義尤其重要。絕對地址能告訴我資料在舊程式中的位置,卻很難幫助 64 " +"位實現決定哪個物件應當持有這份狀態。要正確遷移行為,就得還原舊記憶體訪問背後的關係。" + +#: website/public/blog/touhou-reconstruction/index.html:743 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The order I now use is:" +msgstr "我現在採用這樣的順序:" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:745 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with " +"the historical compiler. Compare the relevant code and data with the " +"original executable. Record unresolved differences so the next phase has a " +"clear starting point." +msgstr "" +"{ph0}先建立精確還原的基線。{ph1}用當年的編譯器編譯重建程式碼,與原始可執行檔案對比相關程式碼和資料。記錄尚未解決的差異,讓下一階段有明確的起點。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:752 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Build and play it on the original platform.{ph1} Link those pieces into" +" the real program using the original architecture and compiler. Exercise " +"important gameplay paths. This is where we can find problems with shared " +"state or initialization that an isolated function comparison missed." +msgstr "" +"{ph0}在原平臺上構建,並實際遊玩。{ph1}用原架構和編譯器把各部分連結為真正的程式,走過重要的遊戲路徑。這能發現單函式對比漏掉的共享狀態或初始化問題。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:759 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Reconstruct the semantics against both references.{ph1} Take one " +"coherent part of the game at a time and establish what its recovered source " +"means. Improve its representation while preserving the exact comparisons and" +" the playable historical build." +msgstr "" +"{ph0}對照兩套基準做語義重建。{ph1}每次處理遊戲中一個完整、連貫的部分,明確還原原始碼的含義。改善程式碼表達,同時保留精確對比和可玩的原平臺構建。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:768 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Make the modern port.{ph1} Move the established behavior into the new " +"environment, such as a native 64-bit build. The reconstructed original-" +"platform game remains a reference for comparing how the port behaves." +msgstr "{ph0}再做現代平臺移植。{ph1}把已經確定的行為帶入新環境,例如原生 64 位構建。原平臺重建版繼續作為比較移植行為的參照。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:775 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The playable build from the second stage becomes a {ph0}second oracle{ph1} " +"during the third. The first oracle checks whether our changed source still " +"reproduces the relevant original code and data. The second checks that the " +"reconstructed program still builds and behaves correctly along the paths we " +"exercise." +msgstr "" +"第二階段的可玩構建,在第三階段成為{ph0}第二套驗證基準{ph1}。第一套檢查修改後的原始碼是否仍然復現原版相關程式碼和資料;第二套檢查重建程式是否能構建,並在實際測試的路徑上保持正確行為。" + +#: website/public/blog/touhou-reconstruction/index.html:783 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"They catch different mistakes. A type change can alter the generated " +"instructions. An ownership change can leave two parts of the game using " +"different copies of state. Keeping both checks available gives the agent a " +"concrete failure to investigate before carrying a refactor further." +msgstr "" +"它們能發現不同型別的錯誤。型別修改可能改變生成的指令。狀態歸屬的修改,可能讓遊戲的兩部分各自使用一份狀態。保留兩套檢查,助手就能在繼續重構之前,針對具體的失敗展開調查。" + +#: website/public/blog/touhou-reconstruction/index.html:790 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"A name needs evidence of its own. An exact comparison cannot tell us whether" +" a field really means “invulnerability time.” We have to establish that from" +" how the game writes and uses it. If the meaning remains uncertain, a " +"neutral name is more helpful to the next reader than a confident guess." +msgstr "" +"命名也需要自己的證據。精確對比不能證明某欄位一定是“無敵時間”。我們必須從遊戲如何寫入和使用它來確認。如果含義仍不明確,中性名稱比自信的猜測更有利於下一位讀者。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:797 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"We learned this order through the projects. TH08 already had playable ports " +"before some of its later historical-platform audits. That made certain " +"defects harder to see. The {ph0}Factory's current workflow{ph1} puts the " +"original-platform build first, so semantic work can use it as a reference " +"before porting begins." +msgstr "" +"這個順序來自專案中的教訓。TH08 在後來的一些原平臺審計之前,就已經有了可玩的移植版,一些缺陷因此更難察覺。{ph0}Factory " +"目前的工作流程{ph1}把原平臺構建放在前面,讓語義重建先有參照,再開始移植。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:808 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction " +"makes the recovered knowledge usable.{ph1} A port can then build on both." +msgstr "{ph0}精確重建提供基準,語義重建讓還原的知識可用。{ph1}移植隨後建立在兩者之上。" + +#: website/public/blog/touhou-reconstruction/index.html:817 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "What makes this an industrial shift" +msgstr "為什麼這是工業化的轉變" + +#: website/public/blog/touhou-reconstruction/index.html:818 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"These projects changed where I spent my attention. Once agents could carry " +"much of an investigation forward, improving their working environment became" +" one of the most useful things I could do. A better tool could help with " +"every later function that needed it." +msgstr "" +"這些專案改變了我投入注意力的地方。助手能自主推進大部分調查之後,改善它們的工作環境,就成了我最值得做的事情之一。一項工具的改進,可以幫助之後所有需要它的函式。" + +#: website/public/blog/touhou-reconstruction/index.html:825 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Autonomy matters here. The useful next step often becomes clear only after a" +" failed experiment. An agent needs enough freedom to follow that result " +"somewhere unexpected. If it has to wait for me to prescribe each step, much " +"of the work remains tied to my attention." +msgstr "" +"自主性在這裡很重要。下一步該怎麼做,常常在實驗失敗後才清楚。助手需要足夠的自由,沿著結果探索意料之外的方向。如果每一步都要等我指定,大部分工作仍然綁在我的注意力上。" + +#: website/public/blog/touhou-reconstruction/index.html:832 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I expect the agent to make wrong hypotheses. What matters is whether we can " +"test them and learn from the result. A failed check should help it " +"understand the mistake well enough to try again. I still have to decide " +"whether the accumulated evidence supports a project milestone." +msgstr "" +"我預期助手會提出錯誤假設。關鍵是我們能否驗證它們,並從結果中學習。失敗的檢查應該幫助它理解錯誤,再次嘗試。我仍要判斷:累積的證據是否足以支援某個專案里程碑。" + +#: website/public/blog/touhou-reconstruction/index.html:839 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"REA gives the agent access to analysis tools. A question about a function's " +"caller can lead straight into inspecting that caller. The reconstruction " +"project supplies the compiler and its own reference checks. The agent can " +"use those to test the source it proposes and see where its explanation holds" +" up." +msgstr "" +"REA " +"讓助手能夠使用分析工具。調查某函式的呼叫方時,它可以直接繼續檢查那個呼叫方。重建專案提供編譯器和自己的對照檢查。助手用它們驗證提出的原始碼,看看解釋在哪些地方成立。" + +#: website/public/blog/touhou-reconstruction/index.html:846 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The TH08 bug shows why those checks deserve engineering attention of their " +"own. When the same comparison is used across hundreds of functions, a gap in" +" it can spread much further than a mistake in one implementation. Testing " +"the checker improves the feedback available to all that later work." +msgstr "" +"TH08 的 bug " +"說明,檢查工具本身也值得認真工程化。相同的比較用於數百個函式時,一個漏洞的影響可能遠大於某個實現中的錯誤。測試檢查器,能改善所有後續工作得到的反饋。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:853 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The industrial analogy has a useful historical example here. Boulton and " +"Watt introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust " +"engine valves. A recording version traced pressure through the piston " +"stroke. It made the engine's internal behavior available for inspection. Our" +" comparison tools serve a similar purpose: they let us examine what the " +"machinery is doing while we improve it." +msgstr "" +"工業史中有一個合適的例子:博爾頓和瓦特在{ph0}1796 " +"年引入蒸汽機示功器{ph1},幫助調節閥門。記錄式示功器能繪出活塞行程中的壓力變化,讓人看到機器內部的執行情況。我們的比較工具也有類似作用:改進機器時,能看清它究竟做了什麼。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:866 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the " +"infrastructure is still immature. Agents can move faster than our checks " +"were designed to support, so the process has to develop alongside them. When" +" we find a defect in a shared tool, we have to repair it and revisit the " +"results it affected. The next project can then inherit a stronger tool." +msgstr "" +"{ph0}我們正處於這場工業化轉變的早期。{ph1}許多基礎設施還不成熟。助手推進工作的速度,可能超過原有檢查的承受能力,所以流程也要一起發展。共享工具出現缺陷時,要修好它,並重查受影響的結果。下一個專案才能繼承更可靠的工具。" + +#: website/public/blog/touhou-reconstruction/index.html:876 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"There is also a practical limit to any one conversation. It will end before " +"a large reconstruction is finished. The repository has to make it possible " +"for another session to continue without losing the reason for the last " +"decision." +msgstr "任何一段對話都有實際的長度限制。大型重建完成之前,對話就會結束。程式碼儲存庫必須讓下一次會話能繼續工作,而不丟失上一次決定背後的理由。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:882 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives " +"projects a shared way to carry their checks and lessons forward. Work on one" +" game can improve the starting conditions for another." +msgstr "" +"{ph0}Touhou Reconstruction " +"Factory{ph1}正是為此而建立。它提供一種共用方式,讓專案把檢查和經驗傳遞下去。一個遊戲的工作,可以改善另一個遊戲的起點。" + +#: website/public/blog/touhou-reconstruction/index.html:892 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That is what makes the industrial analogy meaningful to me. Experience " +"starts becoming part of tools that others can use. Improving those tools " +"changes how much the next person—or the next agent—can get done." +msgstr "這就是工業化比喻對我的意義:經驗開始進入別人也能使用的工具。改善工具,就能改變下一個人或下一個助手能完成多少工作。" + +#: website/public/blog/touhou-reconstruction/index.html:900 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "The projects we can now consider" +msgstr "現在值得嘗試的專案" + +#: website/public/blog/touhou-reconstruction/index.html:901 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The pace matters because it changes the decision to begin. A game could be " +"fascinating to reverse engineer and still demand more of my own attention " +"than I could realistically give it. Many projects would stay ideas." +msgstr "速度的意義在於,它改變了是否開始一個專案的決定。某個遊戲也許很值得逆向,卻需要我投入遠超現實所能承受的精力。很多專案因此一直停留在想法裡。" + +#: website/public/blog/touhou-reconstruction/index.html:907 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"Now I can see a way to keep such a project moving through repeated " +"investigations. Getting a working reconstruction makes a port more " +"practical. Recovering readable semantics makes it easier for someone else to" +" explore a mod. The effort put into understanding the game can keep paying " +"off after the first version runs." +msgstr "" +"現在,我看到了透過一次次調查持續推進它們的可能。得到能執行的重建版,讓移植更可行;還原可讀的語義,讓別人更容易探索 " +"mod。理解遊戲的投入,可以在第一版執行之後繼續帶來回報。" + +#. {ph0}: +#. {ph1}: +#: website/public/blog/touhou-reconstruction/index.html:914 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"I now look at an unfamiliar program and ask: {ph0}what access, feedback and " +"accumulated knowledge would let an agent work on this reliably?{ph1}" +msgstr "現在看到一個陌生程式,我會問:{ph0}怎樣的工具訪問、反饋和知識積累,能讓助手可靠地推進這個專案?{ph1}" + +#: website/public/blog/touhou-reconstruction/index.html:921 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"That question makes me consider projects I would previously have left alone." +" Each one can improve the way we approach the next. I want to keep exploring" +" how far that can take us." +msgstr "這個問題讓我考慮以前會放棄的專案。每個專案都能改善下一個專案的工作方式。我想繼續探索,這能帶我們走多遠。" + +#: website/public/blog/touhou-reconstruction/index.html:929 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Project milestones and sources" +msgstr "專案里程碑與來源" + +#: website/public/blog/touhou-reconstruction/index.html:930 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"The dates describe recorded project checkpoints, checked against public " +"GitHub history on 10 October 2026. Elapsed time is calendar time between " +"commits. Source presence, exact comparisons, a build and a runtime result " +"each name a different milestone." +msgstr "" +"這些日期是已記錄的專案檢查點,於 2026 年 10 月 10 日對照公開 GitHub " +"歷史核實。耗時是提交之間經過的日曆時間。“有原始碼”“透過精確對比”“完成構建”和“得到執行結果”是不同的里程碑。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:938 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source " +"ledger{ph5}, {ph6}24 August Linux port{ph7}, {ph8}26 August Web " +"edition{ph9}, and {ph10}30 August 64-bit Linux release{ph11}." +msgstr "" +"{ph0}TH08:{ph1}{ph2}8 月 13 日開始續作{ph3}、{ph4}8 月 19 日原始碼臺賬{ph5}、{ph6}8 月 24 日 " +"Linux 移植{ph7}、{ph8}8 月 26 日 Web 版{ph9}、{ph10}8 月 30 日 64 位 Linux 釋出{ph11}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#. {ph8}: +#. {ph9}: +#. {ph10}: +#. {ph11}: +#: website/public/blog/touhou-reconstruction/index.html:961 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source" +" ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September " +"linkage{ph9}, and {ph10}10 September playable-build record{ph11}." +msgstr "" +"{ph0}TH095:{ph1}{ph2}8 月 29 日初始臺賬{ph3}、{ph4}9 月 7 日原始碼臺賬{ph5}、{ph6}9 月 8 " +"日對比結果{ph7}、{ph8}9 月 9 日連結{ph9}、{ph10}9 月 10 日可玩構建記錄{ph11}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:984 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS " +"reconstruction, the maintainer's complete Normal-route testing and the " +"current 64-bit phase." +msgstr "" +"{ph0}TH04:{ph1}{ph2}10 月 10 日交接記錄{ph3}包含可執行的 DOS 重建版、維護者完成的 Normal " +"路線測試,以及當前的 64 位移植階段。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/blog/touhou-reconstruction/index.html:993 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection " +"bug{ph3}, {ph4}the source and comparison fix{ph5}, and {ph6}the full " +"floating-literal audit{ph7}." +msgstr "" +"{ph0}TH08 驗證基準修正:{ph1}{ph2}道具自動收集 bug " +"報告{ph3}、{ph4}原始碼與比較工具修復{ph5}、{ph6}全部浮點常量審計{ph7}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1007 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and" +" {ph4}the Factory's phase order and two validation paths{ph5}." +msgstr "{ph0}語義重建:{ph1}{ph2}TH08 可讀性指南{ph3}和{ph4}Factory 的階段順序及兩條驗證路徑{ph5}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1019 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine " +"indicator record{ph3} describes the 1796 introduction and the pressure-" +"recording mechanism." +msgstr "{ph0}工業史:{ph1}{ph2}英國科學博物館集團的蒸汽機示功器記錄{ph3}介紹了 1796 年的引入及壓力記錄機制。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/blog/touhou-reconstruction/index.html:1028 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game" +" knowledge{ph5} documents retain the working principles and lessons." +msgstr "{ph0}方法:{ph1}Factory 的{ph2}助手自主性{ph3}與{ph4}跨遊戲知識{ph5}文件儲存了工作原則和經驗。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/blog/touhou-reconstruction/index.html:1043 +#, python-brace-format +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}" +msgstr "{ph0}更多文章{ph1} · {ph2}檢視 TH04 逆向案例{ph3}" + +#: website/public/blog/touhou-reconstruction/index.html:6 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Reverse Engineering’s Industrial Revolution — REA" +msgstr "逆向工程的工業革命-REA" + +#: website/public/blog/touhou-reconstruction/index.html:7 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "" +"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with " +"AI agents, and how knowledge compounds across TH08, TH095 and PC-98 TH04." +msgstr "" +"N0zoM1z0 回顧從手工逆向到程式設計助手參與的東方遊戲重建,以及經驗如何在 TH08、TH095 和 PC-98 TH04 之間積累。" + +#: website/public/blog/touhou-reconstruction/index.html:337 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Experience carried between projects" +msgstr "在專案之間傳遞經驗" + +#: website/public/blog/touhou-reconstruction/index.html:351 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/blog/touhou-reconstruction/index.html:366 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Touhou reconstruction essay" +msgstr "東方遊戲重建隨筆" + +#: website/public/blog/touhou-reconstruction/index.html:1067 +msgctxt "page:blog/touhou-reconstruction/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/examples/dino-lab/index.html:100 +msgctxt "page:examples/dino-lab/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:182 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab" +msgstr "{ph0}首頁{ph1}{ph2}/{ph3}恐龍速度實驗室" + +#: website/public/examples/dino-lab/index.html:185 +msgctxt "page:examples/dino-lab/index.html" +msgid "Inspect → rebuild → change" +msgstr "檢查→重建→更改" + +#: website/public/examples/dino-lab/index.html:186 +msgctxt "page:examples/dino-lab/index.html" +msgid "Rebuild the dinosaur’s speed rule." +msgstr "重建恐龍的速度規則。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:187 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"To recreate the game’s acceleration, first find the rule that controls its " +"speed. {ph0}REA returned the running script;{ph1} we used its rule to build " +"this mini-game with {ph2}adjustable speed.{ph3}" +msgstr "" +"要重新建立遊戲的加速,首先找到控制其速度的規則。 {ph0} REA返回執行指令碼;{ph1} 我們用它的規則來構建這個迷你遊戲。 " +"{ph2}速度可調。{ph3}" + +#: website/public/examples/dino-lab/index.html:196 +#: website/public/examples/dino-lab/index.html:195 +msgctxt "page:examples/dino-lab/index.html" +msgid "On this page" +msgstr "在本頁" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:198 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Play and change the speed{ph1}" +msgstr "{ph0}播放和改變速度{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:199 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Read the recovered rule{ph1}" +msgstr "{ph0}讀取恢復的規則{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:200 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}檢查重建{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:201 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Try the analysis{ph1}" +msgstr "{ph0}試試分析{ph1}" + +#: website/public/examples/dino-lab/index.html:206 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play and change the speed" +msgstr "播放和改變速度" + +#: website/public/examples/dino-lab/index.html:207 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Press Play, then jump over the cactus. Move the speed slider to try a slower" +" or faster game; it switches to a fixed speed. Select the recovered rule to " +"start at 6 and gradually accelerate again." +msgstr "按播放,然後跳過仙人掌。 移動速度滑塊嘗試更慢或更快的遊戲;它切換到固定的速度。 選擇恢復的規則從6開始,然後再次逐漸加速。" + +#: website/public/examples/dino-lab/index.html:213 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play the reconstruction" +msgstr "試玩重建版" + +#: website/public/examples/dino-lab/index.html:245 +msgctxt "page:examples/dino-lab/index.html" +msgid "Play" +msgstr "開始" + +#: website/public/examples/dino-lab/index.html:248 +msgctxt "page:examples/dino-lab/index.html" +msgid "Jump ↑" +msgstr "跳躍 ↑" + +#: website/public/examples/dino-lab/index.html:249 +msgctxt "page:examples/dino-lab/index.html" +msgid "Restart" +msgstr "重新開始" + +#: website/public/examples/dino-lab/index.html:252 +msgctxt "page:examples/dino-lab/index.html" +msgid "Speed" +msgstr "速度" + +#: website/public/examples/dino-lab/index.html:262 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the recovered acceleration rule" +msgstr "使用恢復的加速規則" + +#: website/public/examples/dino-lab/index.html:266 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "原始規則:從6開始,然後向13增加。" + +#: website/public/examples/dino-lab/index.html:269 +msgctxt "page:examples/dino-lab/index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "移動滑塊來設定自己的速度。 空間或跳躍清除仙人掌。" + +#: website/public/examples/dino-lab/index.html:274 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "啟用JavaScript播放重建。 上面的程式碼和解釋仍然是可讀的。" + +#: website/public/examples/dino-lab/index.html:282 +msgctxt "page:examples/dino-lab/index.html" +msgid "Read the script REA returned" +msgstr "讀取指令碼REA返回" + +#. {ph0}: +#. {ph1}: +#. {ph2}: index.js +#: website/public/examples/dino-lab/index.html:283 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It" +" returned the loaded {ph2}, including this branch in the game’s update " +"function:" +msgstr "" +"我們檢查過 {ph0}wayou的Chromium派生瀏覽器版{ph1} 與REA。 它返回載入 {ph2},將此分支包含在遊戲的更新功能中:" + +#. {ph0}: SPEED: 6 +#. {ph1}: ACCELERATION: 0.001 +#. {ph2}: MAX_SPEED: 13 +#: website/public/examples/dino-lab/index.html:299 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an " +"update without a collision." +msgstr "設定是 {ph0}, {ph1} 和 {ph2}. 遊戲在沒有碰撞的更新上執行此分支。" + +#: website/public/examples/dino-lab/index.html:304 +msgctxt "page:examples/dino-lab/index.html" +msgid "Use the same rule in the new game" +msgstr "在新遊戲中使用相同的規則" + +#: website/public/examples/dino-lab/index.html:310 +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy" +msgstr "複製" + +#: website/public/examples/dino-lab/index.html:323 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"The mini-game uses this function for automatic acceleration. Moving the " +"slider supplies a fixed speed instead. Drawing, jump physics and rectangle " +"collision checks are new code for this teaching game; its simulation " +"advances at 60 updates per second." +msgstr "" +"迷你遊戲使用此功能進行自動加速。 移動滑塊提供了一個固定的速度代替. " +"繪圖,跳躍物理和矩形碰撞檢查是這個教學遊戲的新程式碼;它的模擬以每秒60次更新的速度前進。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:329 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}" +msgstr "{ph0}下載速度規則{ph1} · {ph2}閱讀遊戲程式碼{ph3}" + +#: website/public/examples/dino-lab/index.html:337 +msgctxt "page:examples/dino-lab/index.html" +msgid "Check the reconstruction" +msgstr "檢查重建" + +#: website/public/examples/dino-lab/index.html:338 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"We called the original game’s update function with obstacles and automatic " +"scheduling disabled. Compare those recorded speeds with a replay of the " +"recovered rule." +msgstr "我們稱原來的遊戲的更新功能與障礙和自動排程禁用。 將這些記錄的速度與恢復規則的重播進行比較。" + +#: website/public/examples/dino-lab/index.html:347 +msgctxt "page:examples/dino-lab/index.html" +msgid "Updates" +msgstr "更新資料" + +#: website/public/examples/dino-lab/index.html:348 +msgctxt "page:examples/dino-lab/index.html" +msgid "Original game" +msgstr "原創遊戲" + +#: website/public/examples/dino-lab/index.html:349 +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstructed rule" +msgstr "重建規則" + +#: website/public/examples/dino-lab/index.html:376 +msgctxt "page:examples/dino-lab/index.html" +msgid "Run the speed check" +msgstr "執行速度檢查" + +#: website/public/examples/dino-lab/index.html:379 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Values rounded to three decimals. The branch checks before adding, so the " +"final increment can take speed just above 13." +msgstr "四捨五入為三位小數的值。 分支在新增之前進行檢查,因此最終增量可以採用略高於13的速度。" + +#: website/public/examples/dino-lab/index.html:385 +msgctxt "page:examples/dino-lab/index.html" +msgid "Try the analysis yourself" +msgstr "自己試試分析" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:387 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}Set up REA{ph1} with your coding agent." +msgstr "{ph0}設立 REA{ph1} 用你的程式設計助手。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: https://wayou.github.io/t-rex-runner/ +#: website/public/examples/dino-lab/index.html:391 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL." +msgstr "跟隨 {ph0}瀏覽器連線步驟{ph1},使用 {ph2} 作為頁面URL。" + +#: website/public/examples/dino-lab/index.html:398 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Give your agent the page URL and local debugging endpoint, then copy this " +"prompt." +msgstr "為你的程式設計助手提供頁面URL和本地除錯端點,然後複製此提示。" + +#. {ph0}: +#: website/public/examples/dino-lab/index.html:405 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/examples/dino-lab/index.html:418 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA檢查這個恐龍游戲。 為什麼它變得更快? " +"顯示速度規則,然後構建一個可調節速度的小版本。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/examples/dino-lab/index.html:427 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height " +"control to the new version.”{ph1}" +msgstr "要求跟進: {ph0}\"跳躍高度在哪裡計算? 在新版本中新增跳高控制元件。”{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/examples/dino-lab/index.html:434 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and" +" BSD license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome " +"150." +msgstr "" +"資料來源: {ph0}檢查速度程式碼{ph1},Chromium作者。 {ph2}版權及BSD許可證{ph3}. " +"REA4.1.0檢查了Chrome150中執行的HTTP版本。" + +#: website/public/examples/dino-lab/index.html:6 +msgctxt "page:examples/dino-lab/index.html" +msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA" +msgstr "Chrome恐龍游戲:重建其速度規則-REA" + +#: website/public/examples/dino-lab/index.html:7 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Read the dinosaur game’s speed rule with REA, rebuild it, then change the " +"speed and play." +msgstr "閱讀恐龍游戲的速度規則與REA,重建它,然後改變速度和發揮。" + +#: website/public/examples/dino-lab/index.html:204 +msgctxt "page:examples/dino-lab/index.html" +msgid "Dinosaur speed reconstruction" +msgstr "恐龍速度重建" + +#: website/public/examples/dino-lab/index.html:235 +msgctxt "page:examples/dino-lab/index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "恐龍迷你遊戲。 使用跳躍按鈕或按空格鍵,而遊戲是重點。" + +#: website/public/examples/dino-lab/index.html:310 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy reconstructed speed rule" +msgstr "複製重建速度規則" + +#: website/public/examples/dino-lab/index.html:409 +msgctxt "page:examples/dino-lab/index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "複製恐龍分析提示" + +#: website/public/examples/dino-lab/index.html:462 +msgctxt "page:examples/dino-lab/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/faq/index.html:99 +msgctxt "page:faq/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:181 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Home{ph1} / FAQ" +msgstr "{ph0}首頁{ph1} / FAQ" + +#: website/public/faq/index.html:182 +msgctxt "page:faq/index.html" +msgid "REA FAQ." +msgstr "REA 常見問題。" + +#: website/public/faq/index.html:183 +msgctxt "page:faq/index.html" +msgid "Setup, updates, analysis and troubleshooting." +msgstr "安裝、更新、分析和故障排查。" + +#: website/public/faq/index.html:187 +msgctxt "page:faq/index.html" +msgid "Topics" +msgstr "主題" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:189 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Setup and updates{ph1}" +msgstr "{ph0}安裝與更新{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:190 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Analysis{ph1}" +msgstr "{ph0}分析{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:191 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Troubleshooting{ph1}" +msgstr "{ph0}故障排除{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:192 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Data and sharing{ph1}" +msgstr "{ph0}資料與分享{ph1}" + +#: website/public/faq/index.html:201 +msgctxt "page:faq/index.html" +msgid "Setup and updates" +msgstr "安裝與更新" + +#: website/public/faq/index.html:204 +msgctxt "page:faq/index.html" +msgid "How do I install REA?" +msgstr "如何安裝 REA?" + +#: website/public/faq/index.html:212 +msgctxt "page:faq/index.html" +msgid "Terminal · agent setup" +msgstr "終端 · 配置程式設計助手" + +#: website/public/faq/index.html:213 website/public/faq/index.html:254 +#: website/public/faq/index.html:272 website/public/faq/index.html:356 +#: website/public/faq/index.html:403 website/public/faq/index.html:443 +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy" +msgstr "複製" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:224 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Setup registers REA's MCP connection and installs the matching investigation" +" skill. Restart your agent when it finishes, then give it a target path and " +"a question. {ph0}Follow the setup guide{ph1} for prerequisites and your " +"first analysis." +msgstr "" +"setup 會註冊 REA 的 MCP " +"連線,並安裝配套的調查技能。完成後重啟助手,再提供目標路徑和問題。{ph0}檢視安裝指南{ph1},瞭解前置條件和第一次分析的步驟。" + +#: website/public/faq/index.html:233 +msgctxt "page:faq/index.html" +msgid "Which coding agents can use REA?" +msgstr "哪些程式設計助手能使用 REA?" + +#: website/public/faq/index.html:234 +msgctxt "page:faq/index.html" +msgid "" +"Any agent that supports local MCP servers. Setup includes Claude Code, " +"Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, " +"Antigravity, GitHub Copilot CLI, Command Code, Grok Build, OMP, and VS Code." +" Grok Bot's connector is added from its chat." +msgstr "" +"支援本地 MCP 伺服器的助手都可以。setup 提供 Claude Code、Claude Desktop、Codex、Cursor、Gemini " +"CLI、Windsurf、Devin、OpenCode、Antigravity、GitHub Copilot CLI、Command Code、Grok" +" Build、OMP 和 VS Code 的配置。Grok Bot 的聯結器從聊天中新增。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:241 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Connect your coding agent{ph1}." +msgstr "{ph0}連線程式設計助手{ph1}。" + +#: website/public/faq/index.html:246 +msgctxt "page:faq/index.html" +msgid "How do I update REA?" +msgstr "如何更新 REA?" + +#: website/public/faq/index.html:247 +msgctxt "page:faq/index.html" +msgid "" +"REA releases frequently, including bug fixes. If you installed the CLI with " +"npm:" +msgstr "REA 更新很頻繁,也會持續修復 bug。如果你透過 npm 安裝了 CLI:" + +#: website/public/faq/index.html:253 +msgctxt "page:faq/index.html" +msgid "Terminal · installed CLI" +msgstr "終端 · 已安裝的 CLI" + +#. {ph0}: npx +#: website/public/faq/index.html:265 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Follow the setup refresh command printed by the update. If you set up your " +"agent through {ph0}, run:" +msgstr "更新後,按照輸出中的命令重新整理配置。如果之前透過 {ph0} 配置助手,執行:" + +#: website/public/faq/index.html:271 +msgctxt "page:faq/index.html" +msgid "Terminal · refresh agent setup" +msgstr "終端 · 重新整理助手配置" + +# Reviewed for readable setup and analysis terminology. +#. {ph0}: npx -y rea-agents@latest +#: website/public/faq/index.html:283 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review the changes and restart your agent. Its REA connection pins a package" +" version, so refreshing setup makes it use the new release. For one-off CLI " +"commands, use {ph0} followed by the command." +msgstr "" +"檢查變更後,重啟程式設計助手。REA 的連線配置指定了包版本,重新執行 setup 才會讓助手使用新版本。臨時執行 CLI 命令時,在 {ph0} " +"後面接具體命令即可。" + +#: website/public/faq/index.html:291 +msgctxt "page:faq/index.html" +msgid "Is installing the skill from skills.sh enough?" +msgstr "只從 skills.sh 安裝技能就夠了嗎?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:294 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"The skill gives your agent investigation instructions. Run {ph0}REA " +"setup{ph1} to connect the MCP server and install the matching skill, then " +"restart your agent so it can call the tools." +msgstr "" +"技能告訴助手如何開展調查。還需要執行 {ph0}REA setup{ph1},連線 MCP 伺服器並安裝配套技能。隨後重啟助手,它才能呼叫工具。" + +#: website/public/faq/index.html:305 +msgctxt "page:faq/index.html" +msgid "Analysis" +msgstr "分析" + +#: website/public/faq/index.html:308 +msgctxt "page:faq/index.html" +msgid "What can I analyze with REA?" +msgstr "REA 可以分析什麼?" + +#: website/public/faq/index.html:309 +msgctxt "page:faq/index.html" +msgid "Start with the kind of software you have:" +msgstr "根據手裡的軟體型別選擇:" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:311 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode " +"and references." +msgstr "{ph0}原生可執行檔案和庫{ph1}:函式、彙編、虛擬碼和引用。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:316 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source " +"locations." +msgstr "{ph0}JavaScript 和 Electron 應用{ph1}:模組、匯入、IPC 和原始碼位置。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:321 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations." +msgstr "{ph0}瀏覽器頁面{ph1}:指令碼、請求和執行時觀察。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:326 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA also has workflows for managed assemblies, Android APKs, firmware and " +"packaged resources. {ph0}See the case studies{ph1} for worked " +"investigations." +msgstr "REA 也提供託管程式集、Android APK、韌體和打包資源的分析流程。{ph0}檢視案例{ph1},瞭解完整的調查過程。" + +#: website/public/faq/index.html:334 +msgctxt "page:faq/index.html" +msgid "Do I need Hopper, Ghidra or IDA?" +msgstr "需要 Hopper、Ghidra 或 IDA 嗎?" + +#: website/public/faq/index.html:335 +msgctxt "page:faq/index.html" +msgid "" +"Deep native analysis uses one of them. Static JavaScript and .NET inspection" +" work with the supplied files and do not need a native analysis engine." +msgstr "深度原生分析需要其中一個工具。靜態 JavaScript 和 .NET 檢查直接使用提供的檔案,不需要原生分析引擎。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:340 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Connect your existing Ghidra or IDA installation, or let setup detect Hopper" +" and propose an installation. Your host and target determine which provider " +"can be used. {ph0}Set up native analysis{ph1}." +msgstr "" +"連線已有的 Ghidra 或 IDA 安裝,或讓 setup 檢測 Hopper " +"並提出安裝計劃。可用的分析後端取決於你的系統和分析目標。{ph0}配置原生分析{ph1}。" + +#: website/public/faq/index.html:348 +msgctxt "page:faq/index.html" +msgid "Can I use REA without a coding agent?" +msgstr "不用程式設計助手,也能用 REA 嗎?" + +#: website/public/faq/index.html:349 +msgctxt "page:faq/index.html" +msgid "" +"Yes. The CLI uses the same analysis workflows. For a local JavaScript or " +"Electron app:" +msgstr "可以。CLI 使用同一套分析流程。對於本地 JavaScript 或 Electron 應用:" + +#: website/public/faq/index.html:355 +msgctxt "page:faq/index.html" +msgid "Terminal · static application analysis" +msgstr "終端 · 靜態應用分析" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:368 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with an extracted application folder or ASAR file. {ph0}Use" +" the CLI{ph1} for installation options." +msgstr "把路徑換成解包後的應用目錄或 ASAR 檔案。{ph0}檢視 CLI 的安裝方式{ph1}。" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:375 +msgctxt "page:faq/index.html" +msgid "What code does REA return?" +msgstr "REA 會返回什麼程式碼?" + +# Reviewed for readable setup and analysis terminology. +#: website/public/faq/index.html:376 +msgctxt "page:faq/index.html" +msgid "" +"Native analysis returns assembly and pseudocode, with calls, references and " +"relevant constants. JavaScript analysis returns modules, their relationships" +" and source locations." +msgstr "原生程式分析返回彙編、虛擬碼、函式呼叫、引用和相關常量。JavaScript 分析返回模組、模組之間的關係,以及原始碼位置。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:381 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Your agent uses these findings to explain the behavior or write and test an " +"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag " +"checker{ph3} show how that process works." +msgstr "" +"助手根據這些結果解釋行為,或編寫實現並測試。{ph0}DX-Ball 計算規則{ph1}和{ph2}CTF flag 檢查器{ph3}展示了這個過程。" + +#: website/public/faq/index.html:392 +msgctxt "page:faq/index.html" +msgid "What should I ask my agent?" +msgstr "應該向助手提什麼問題?" + +#: website/public/faq/index.html:393 +msgctxt "page:faq/index.html" +msgid "" +"Give it a local target and one behavior to investigate. For a JavaScript or " +"Electron app:" +msgstr "提供一個本地目標,以及一個想調查的行為。比如 JavaScript 或 Electron 應用:" + +#. {ph0}: +#: website/public/faq/index.html:399 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:422 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace the path with your target. The {ph0}guides{ph1} provide prompts for " +"native, Electron and browser examples." +msgstr "把路徑換成自己的目標。{ph0}指南{ph1}提供了原生、Electron 和瀏覽器示例的 prompt。" + +#: website/public/faq/index.html:432 +msgctxt "page:faq/index.html" +msgid "Troubleshooting" +msgstr "故障排除" + +#: website/public/faq/index.html:435 +msgctxt "page:faq/index.html" +msgid "Why can't my agent see the REA tools?" +msgstr "為什麼助手看不到 REA 工具?" + +#. {ph0}: doctor +#: website/public/faq/index.html:436 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Restart or reconnect your agent after setup. Check its REA registration with" +" {ph0}; for Codex:" +msgstr "安裝後重啟或重新連線助手。用 {ph0} 檢查 REA 註冊情況。以 Codex 為例:" + +#: website/public/faq/index.html:442 +msgctxt "page:faq/index.html" +msgid "Terminal · check one client" +msgstr "終端 · 檢查一個客戶端" + +#. {ph0}: codex +#. {ph1}: claude_code +#. {ph2}: cursor +#: website/public/faq/index.html:454 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report " +"shows a missing or stale registration, run setup for that client:" +msgstr "把 {ph0} 換成客戶端 ID,例如 {ph1} 或 {ph2}。如果報告顯示註冊缺失或過期,為這個客戶端執行 setup:" + +#: website/public/faq/index.html:462 +msgctxt "page:faq/index.html" +msgid "Terminal · repair one client's setup" +msgstr "終端 · 修復一個客戶端的配置" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:474 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Review its plan and restart the client. If registration is healthy but tools" +" remain absent, check the client's MCP connection error. {ph0}More setup " +"diagnostics{ph1}." +msgstr "確認計劃後重啟客戶端。如果註冊正常但工具仍未出現,檢查客戶端的 MCP 連線錯誤。{ph0}檢視更多配置診斷{ph1}。" + +#: website/public/faq/index.html:482 +msgctxt "page:faq/index.html" +msgid "Do I need to start Hopper first?" +msgstr "需要先啟動 Hopper 嗎?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:483 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"REA starts Hopper when an operation needs it. On macOS, complete the first-" +"run choice of demo mode or license activation before unattended analysis. " +"{ph0}See native provider setup{ph1}." +msgstr "" +"REA 會在操作需要時啟動 Hopper。在 macOS " +"上,首次使用時先完成演示模式或許可證啟用的選擇,再進行無人值守分析。{ph0}檢視原生分析配置{ph1}。" + +#: website/public/faq/index.html:492 +msgctxt "page:faq/index.html" +msgid "What should I do if I hit a bug?" +msgstr "遇到 bug 怎麼辦?" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:493 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent " +"release may already fix the problem." +msgstr "先{ph0}更新 REA{ph1},重啟助手,再試一次相同任務。新版本可能已經修復這個問題。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:497 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"If it persists, {ph0}open an issue{ph1} with your REA version, operating " +"system, target type, steps to reproduce and error output. Include the " +"provider name when the problem involves native analysis." +msgstr "" +"如果問題仍然存在,{ph0}提交 issue{ph1},附上 REA 版本、作業系統、目標型別、復現步驟和錯誤輸出。涉及原生分析時,也寫明分析後端。" + +#: website/public/faq/index.html:511 +msgctxt "page:faq/index.html" +msgid "Data and sharing" +msgstr "資料與分享" + +#: website/public/faq/index.html:514 +msgctxt "page:faq/index.html" +msgid "Does REA upload my app?" +msgstr "REA 會上傳我的應用嗎?" + +#: website/public/faq/index.html:515 +msgctxt "page:faq/index.html" +msgid "" +"REA analyzes targets on your machine. Your agent receives the results, and " +"its model provider's data policy applies to those results." +msgstr "REA 在你的機器上分析目標。助手會收到分析結果,這些結果受其模型服務商的資料政策約束。" + +#: website/public/faq/index.html:522 +msgctxt "page:faq/index.html" +msgid "How can I share an example or contribute?" +msgstr "如何分享案例或參與貢獻?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/faq/index.html:523 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Have a useful REA example? We'd love to see it. Share the target, your " +"question, the findings and how you checked them in an {ph0}issue{ph1} or " +"{ph2}pull request{ph3}. Short code excerpts and figures help others follow " +"the investigation." +msgstr "" +"做出了有用的 REA 案例?我們很想看看!透過 {ph0}issue{ph1} 或 {ph2}PR{ph3} " +"分享目標、問題、結果,以及如何驗證。簡短的程式碼片段和圖示,能幫助大家理解調查過程。" + +#. {ph0}: +#. {ph1}: +#: website/public/faq/index.html:535 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"Bug reports, feature requests, documentation and code improvements are " +"welcome too. You can also discuss an example in the {ph0}community{ph1}." +msgstr "也歡迎反饋 bug、提出需求、改進文件和程式碼。你還可以在{ph0}社群{ph1}裡討論自己的案例。" + +#: website/public/faq/index.html:6 +msgctxt "page:faq/index.html" +msgid "REA FAQ: Setup, Updates and Troubleshooting" +msgstr "REA FAQ:安裝、更新與故障排查" + +#: website/public/faq/index.html:7 +msgctxt "page:faq/index.html" +msgid "" +"Answers to common REA questions: installation, updates, analysis tools, " +"coding agents, troubleshooting and sharing examples." +msgstr "解答 REA 的常見問題:安裝、更新、分析工具、程式設計助手、故障排查和分享案例。" + +#: website/public/faq/index.html:186 +msgctxt "page:faq/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/faq/index.html:195 +msgctxt "page:faq/index.html" +msgid "Frequently asked questions about REA" +msgstr "REA 常見問題" + +#: website/public/faq/index.html:213 +msgctxt "page:faq/index.html" +msgid "Copy REA setup command" +msgstr "複製REA設定命令" + +#: website/public/faq/index.html:254 +msgctxt "page:faq/index.html" +msgid "Copy REA update command" +msgstr "複製REA更新命令" + +#: website/public/faq/index.html:272 +msgctxt "page:faq/index.html" +msgid "Copy agent setup refresh command" +msgstr "複製程式設計助手設定重新整理命令" + +#: website/public/faq/index.html:356 +msgctxt "page:faq/index.html" +msgid "Copy REA CLI analysis command" +msgstr "複製REA CLI分析命令" + +#: website/public/faq/index.html:403 +msgctxt "page:faq/index.html" +msgid "Copy example analysis prompt" +msgstr "複製示例分析提示" + +#: website/public/faq/index.html:443 +msgctxt "page:faq/index.html" +msgid "Copy client diagnosis command" +msgstr "複製客戶端診斷命令" + +#: website/public/faq/index.html:463 +msgctxt "page:faq/index.html" +msgid "Copy scoped setup command" +msgstr "複製作用域設定命令" + +#: website/public/faq/index.html:560 +msgctxt "page:faq/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/first-investigation/index.html:99 +msgctxt "page:first-investigation/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:181 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Home{ph1} / Your first investigation" +msgstr "{ph0}首頁{ph1} / 第一次調查" + +#. {ph0}:
+#: website/public/first-investigation/index.html:184 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Find out where{ph0}exported notes go." +msgstr "弄清楚{ph0}匯出的筆記寫到哪裡。" + +#: website/public/first-investigation/index.html:185 +msgctxt "page:first-investigation/index.html" +msgid "" +"Use REA to inspect a small app, follow its Export notes button and check one" +" detail yourself." +msgstr "用 REA 檢查一個小應用,追蹤 Export notes 按鈕,再親自驗證一個細節。" + +#: website/public/first-investigation/index.html:196 +msgctxt "page:first-investigation/index.html" +msgid "In this exercise" +msgstr "在這個練習中" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:198 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}1. Set up{ph1}" +msgstr "{ph0}1. 配置{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:199 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}2. Ask about export{ph1}" +msgstr "{ph0}2. 詢問匯出過程{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:200 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}3. Follow the answer{ph1}" +msgstr "{ph0}3. 追蹤回答{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:201 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}4. Check a prediction{ph1}" +msgstr "{ph0}4. 檢查預測{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:202 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}5. Ask another question{ph1}" +msgstr "{ph0}5. 再問一個問題{ph1}" + +#: website/public/first-investigation/index.html:207 +msgctxt "page:first-investigation/index.html" +msgid "1. Connect your agent to REA" +msgstr "1. 把助手連線到 REA" + +#. {ph0}: +#: website/public/first-investigation/index.html:216 +#: website/public/first-investigation/index.html:266 +#: website/public/first-investigation/index.html:388 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/first-investigation/index.html:221 +#: website/public/first-investigation/index.html:243 +#: website/public/first-investigation/index.html:271 +#: website/public/first-investigation/index.html:393 +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy" +msgstr "複製" + +#: website/public/first-investigation/index.html:240 +msgctxt "page:first-investigation/index.html" +msgid "Or run this command in your terminal:" +msgstr "或者在終端中執行此命令:" + +#: website/public/first-investigation/index.html:252 +msgctxt "page:first-investigation/index.html" +msgid "" +"Review the plan, approve the setup, then restart your agent. Already " +"connected? Continue below." +msgstr "檢視計劃,確認配置後重啟助手。如果已經連線,直接繼續。" + +#: website/public/first-investigation/index.html:258 +msgctxt "page:first-investigation/index.html" +msgid "2. Ask where the CSV is written" +msgstr "2. 問清 CSV 寫到哪裡" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:259 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The example is a six-file Electron app with an {ph0}Export notes{ph1} " +"button. Your agent can inspect its code without installing or launching " +"Electron." +msgstr "" +"示例是一個包含六個檔案的 Electron 應用,帶有{ph0}Export notes(匯出筆記){ph1}按鈕。助手無需安裝或啟動 Electron" +" 就能檢查程式碼。" + +#: website/public/first-investigation/index.html:294 +msgctxt "page:first-investigation/index.html" +msgid "" +"Your agent downloads the files and gives the unpacked folder to REA for " +"inspection." +msgstr "助手會下載並解壓檔案,再把目錄交給 REA 檢查。" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:298 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}下載示例ZIP{ph1}" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:306 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"If your agent can’t download files, unzip this archive yourself. Give it the" +" path to the {ph0} folder and the same export question." +msgstr "如果助手不能下載檔案,你也可以手動解壓。把 {ph0} 資料夾的路徑交給它,再問同一個匯出問題。" + +#: website/public/first-investigation/index.html:313 +msgctxt "page:first-investigation/index.html" +msgid "3. Follow the answer back to the code" +msgstr "3. 從回答追蹤到程式碼" + +#: website/public/first-investigation/index.html:314 +msgctxt "page:first-investigation/index.html" +msgid "Look for a short explanation with file and line references:" +msgstr "尋找帶檔案和行號的簡短解釋:" + +#. {ph0}: notes:export +#. {ph1}: notes.csv +#. {ph2}: id +#. {ph3}: title +#: website/public/first-investigation/index.html:316 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The button sends a {ph0} message. The main process formats the notes as CSV " +"and writes {ph1} in the user’s Downloads folder. The columns are {ph2} and " +"{ph3}." +msgstr "按鈕傳送 {ph0} 訊息。主程序把筆記轉換為 CSV,並將 {ph1} 寫到使用者的下載資料夾。列名為 {ph2} 和 {ph3}。" + +#: website/public/first-investigation/index.html:324 +msgctxt "page:first-investigation/index.html" +msgid "From the button to the file writer" +msgstr "從按鈕到檔案寫入" + +#: website/public/first-investigation/index.html:353 +msgctxt "page:first-investigation/index.html" +msgid "" +"REA’s static analysis pairs the message with its handler. The destination is" +" read from code." +msgstr "REA 的靜態分析把訊息和處理函式關聯起來。匯出位置是從程式碼中讀到的。" + +#: website/public/first-investigation/index.html:369 +msgctxt "page:first-investigation/index.html" +msgid "" +"The file path, formatter and write call are together in this handler. Ask " +"your agent to show these lines if its answer leaves them out." +msgstr "檔案路徑、格式化函式和寫入呼叫都在這個處理函式中。如果回答沒有展示這些行,可以讓助手補上。" + +#. {ph0}: +#. {ph1}: +#: website/public/first-investigation/index.html:374 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}See the full code trace and recorded REA result{ph1}." +msgstr "{ph0}檢視完整的程式碼追蹤和記錄的 REA 結果{ph1}。" + +#: website/public/first-investigation/index.html:381 +msgctxt "page:first-investigation/index.html" +msgid "4. Check a prediction" +msgstr "4. 檢查預測" + +#: website/public/first-investigation/index.html:382 +msgctxt "page:first-investigation/index.html" +msgid "" +"A comma separates CSV columns. What happens when a note title itself " +"contains a comma or quotation marks?" +msgstr "CSV 用逗號分隔各列。如果筆記標題本身包含逗號或引號,會發生什麼?" + +#: website/public/first-investigation/index.html:426 +msgctxt "page:first-investigation/index.html" +msgid "Run the check yourself" +msgstr "自己檢查一下" + +#. {ph0}: notes-example +#: website/public/first-investigation/index.html:427 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "Open a terminal in the unpacked {ph0} folder:" +msgstr "在解壓後的 {ph0} 資料夾裡開啟終端:" + +#: website/public/first-investigation/index.html:449 +msgctxt "page:first-investigation/index.html" +msgid "" +"This command uses a shell with here-document support, such as Bash or Zsh. " +"Your agent can run the same JavaScript in your platform’s shell." +msgstr "" +"這條命令需要 Bash、Zsh 等支援 here-document 的 shell。助手也可以在你的系統 shell 中執行同樣的 " +"JavaScript。" + +#: website/public/first-investigation/index.html:457 +msgctxt "page:first-investigation/index.html" +msgid "5. Ask another question" +msgstr "5. 再問一個問題" + +#: website/public/first-investigation/index.html:458 +msgctxt "page:first-investigation/index.html" +msgid "Try a follow-up in the same conversation:" +msgstr "在同一段對話中繼續提問:" + +#: website/public/first-investigation/index.html:460 +msgctxt "page:first-investigation/index.html" +msgid "" +"What happens if the file can’t be written? Follow the error back to the " +"page." +msgstr "如果檔案無法寫入,會發生什麼?沿著錯誤處理追蹤回頁面。" + +#: website/public/first-investigation/index.html:465 +msgctxt "page:first-investigation/index.html" +msgid "" +"Or give your agent an app of your own and ask about one button, file or " +"behavior." +msgstr "也可以提供自己的應用,詢問其中一個按鈕、檔案或行為。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:470 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in " +"a packaged Electron app.{ph3}" +msgstr "{ph0}Notion 如何複製文字和 HTML{ph1}{ph2}追蹤打包 Electron 應用中的剪貼簿功能。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:476 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original " +"instructions and the reconstruction’s checks.{ph3}" +msgstr "{ph0}DX-Ball 如何計算聲音左右位置{ph1}{ph2}檢視原始指令,以及重建結果的驗證。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/first-investigation/index.html:484 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the " +"connection if you get stuck.{ph3}" +msgstr "{ph0}安裝或分析遇到問題{ph1}{ph2}先更新 REA,再檢查連線。{ph3}" + +#: website/public/first-investigation/index.html:6 +msgctxt "page:first-investigation/index.html" +msgid "Your First Reverse Engineering Investigation — REA" +msgstr "你的第一次逆向工程調查-REA" + +#: website/public/first-investigation/index.html:7 +msgctxt "page:first-investigation/index.html" +msgid "" +"Try REA on a small Notes app. Set up your agent, ask where exported notes " +"go, and check the CSV formatter with a sample title." +msgstr "用小型 Notes 應用嘗試 REA。配置助手,詢問匯出的筆記寫到哪裡,再用一個示例標題驗證 CSV 格式化函式。" + +#: website/public/first-investigation/index.html:195 +msgctxt "page:first-investigation/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/first-investigation/index.html:205 +msgctxt "page:first-investigation/index.html" +msgid "Your first REA investigation" +msgstr "你的第一次REA調查" + +#: website/public/first-investigation/index.html:221 +msgctxt "page:first-investigation/index.html" +msgid "Copy REA installation prompt" +msgstr "複製REA安裝提示" + +#: website/public/first-investigation/index.html:243 +msgctxt "page:first-investigation/index.html" +msgid "Copy setup command" +msgstr "複製安裝命令" + +#: website/public/first-investigation/index.html:271 +msgctxt "page:first-investigation/index.html" +msgid "Copy Notes investigation prompt" +msgstr "複製筆記調查提示" + +#: website/public/first-investigation/index.html:393 +msgctxt "page:first-investigation/index.html" +msgid "Copy CSV check prompt" +msgstr "複製CSV檢查提示" + +#: website/public/first-investigation/index.html:435 +msgctxt "page:first-investigation/index.html" +msgid "Copy formatter check command" +msgstr "複製格式化程式檢查命令" + +#: website/public/first-investigation/index.html:510 +msgctxt "page:first-investigation/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/get-started/index.html:99 +msgctxt "page:get-started/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:181 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Home{ph1} / Get started" +msgstr "{ph0}首頁{ph1} / 開始使用" + +#: website/public/get-started/index.html:182 +msgctxt "page:get-started/index.html" +msgid "Set up REA." +msgstr "安裝與配置 REA。" + +#: website/public/get-started/index.html:183 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent, or inspect a local app from your terminal." +msgstr "把 REA 連線到程式設計助手,或從終端檢查本地應用。" + +#: website/public/get-started/index.html:195 +msgctxt "page:get-started/index.html" +msgid "Open a terminal and check:" +msgstr "開啟終端,檢查版本:" + +#: website/public/get-started/index.html:198 +#: website/public/get-started/index.html:455 +msgctxt "page:get-started/index.html" +msgid "Terminal" +msgstr "終端機" + +#: website/public/get-started/index.html:199 +#: website/public/get-started/index.html:220 +#: website/public/get-started/index.html:243 +#: website/public/get-started/index.html:259 +#: website/public/get-started/index.html:274 +#: website/public/get-started/index.html:289 +#: website/public/get-started/index.html:305 +#: website/public/get-started/index.html:324 +#: website/public/get-started/index.html:410 +#: website/public/get-started/index.html:456 +#: website/public/get-started/index.html:532 +#: website/public/get-started/index.html:591 +#: website/public/get-started/index.html:632 +#: website/public/get-started/index.html:664 +#: website/public/get-started/index.html:721 +#: website/public/get-started/index.html:762 +#: website/public/get-started/index.html:802 +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy" +msgstr "複製" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:216 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows (PowerShell){ph1}" +msgstr "{ph0}Windows(PowerShell){ph1}" + +#: website/public/get-started/index.html:219 +#: website/public/get-started/index.html:242 +msgctxt "page:get-started/index.html" +msgid "Windows PowerShell" +msgstr "WindowsQ" + +#. {ph0}: node -v +#: website/public/get-started/index.html:231 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Type Y if asked to accept the terms. Close PowerShell, open it again, then " +"run {ph0}." +msgstr "如果提示接受條款,輸入 Y。關閉 PowerShell,再次開啟,然後執行 {ph0}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: npx +#: website/public/get-started/index.html:235 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If PowerShell later says {ph0}\"running scripts is disabled on this " +"system\"{ph1} when you run {ph2}, run this once and try again:" +msgstr "" +"如果之後執行 {ph2} 時,PowerShell 提示{ph0}“running scripts is disabled on this " +"system”{ph1}(系統禁止執行指令碼),執行下面的命令一次,再重試:" + +#: website/public/get-started/index.html:255 +msgctxt "page:get-started/index.html" +msgid "If you use Homebrew:" +msgstr "如果你使用 Homebrew:" + +#: website/public/get-started/index.html:258 +msgctxt "page:get-started/index.html" +msgid "macOS · Homebrew" +msgstr "macOS*Homebrew" + +#: website/public/get-started/index.html:270 +msgctxt "page:get-started/index.html" +msgid "Otherwise:" +msgstr "其他情況:" + +#: website/public/get-started/index.html:285 +msgctxt "page:get-started/index.html" +msgid "Close Terminal, open it again, then:" +msgstr "關閉終端,重新開啟,然後執行:" + +#. {ph0}: curl +#. {ph1}: unzip +#. {ph2}: sudo apt install curl unzip +#: website/public/get-started/index.html:316 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the " +"terminal, open it again, then:" +msgstr "安裝程式需要 {ph0} 和 {ph1}(Debian/Ubuntu 上用 {ph2} 安裝)。關閉終端,重新開啟,然後執行:" + +#. {ph0}: nodejs +#. {ph1}: node -v +#: website/public/get-started/index.html:336 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Your distribution's own {ph0} package is often older than 22.19, so check " +"{ph1} if you use it instead." +msgstr "發行版自帶的 {ph0} 包經常早於 22.19。如果使用它,請用 {ph1} 確認版本。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:340 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Prefer a regular installer? Download the LTS version from " +"{ph0}nodejs.org{ph1}." +msgstr "更喜歡普通安裝包?從 {ph0}nodejs.org{ph1} 下載 LTS 版。" + +#: website/public/get-started/index.html:348 +msgctxt "page:get-started/index.html" +msgid "Setup options" +msgstr "配置方式" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:350 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Connect your coding agent{ph1}" +msgstr "{ph0}連線程式設計助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:351 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Use the CLI{ph1}" +msgstr "{ph0}使用CLI {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:352 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Set up native analysis{ph1}" +msgstr "{ph0}配置原生分析{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:353 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Getting help{ph1}" +msgstr "{ph0}尋求幫助{ph1}" + +#: website/public/get-started/index.html:358 +msgctxt "page:get-started/index.html" +msgid "Connect your coding agent" +msgstr "連線程式設計助手" + +#: website/public/get-started/index.html:359 +msgctxt "page:get-started/index.html" +msgid "" +"Run setup to connect REA to your coding agent. Client choices include Claude" +" Code, Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported " +"MCP clients. Grok Bot's connector is added from its chat." +msgstr "" +"執行 setup,把 REA 連線到程式設計助手。可選擇 Claude Code、Codex、Cursor、Gemini " +"CLI、Windsurf、Grok Build 和其他受支援的 MCP 客戶端。Grok Bot 的聯結器從聊天中新增。" + +#: website/public/get-started/index.html:366 +msgctxt "page:get-started/index.html" +msgid "New to coding agents?" +msgstr "第一次使用程式設計助手?" + +#: website/public/get-started/index.html:367 +msgctxt "page:get-started/index.html" +msgid "" +"A coding agent is an AI assistant that works on your computer instead of in " +"a browser tab. It can read files and run commands, and it asks before making" +" changes. REA gives it reverse-engineering tools." +msgstr "" +"程式設計助手是一種在你的電腦上工作、而不只待在瀏覽器頁面裡的 AI 助手。它能讀取檔案、執行命令,並在修改前徵求確認。REA 為它提供逆向工程工具。" + +#: website/public/get-started/index.html:373 +msgctxt "page:get-started/index.html" +msgid "" +"If you don't have one yet, pick one, follow its install page and sign in:" +msgstr "如果還沒有助手,選擇一個,按照其安裝頁面操作並登入:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:378 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan." +msgstr "{ph0}{ph1}Claude Code{ph2}{ph3},由 Anthropic 開發,需要付費 Claude 套餐。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:386 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account." +msgstr "{ph0}{ph1}Codex{ph2}{ph3},由 OpenAI 開發,用 ChatGPT 賬號登入。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:392 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of " +"your choice." +msgstr "{ph0}{ph1}OpenCode{ph2}{ph3},開源,可以連線你選擇的模型服務商。" + +#: website/public/get-started/index.html:398 +msgctxt "page:get-started/index.html" +msgid "" +"Then open it and copy the prompt below into it. The agent runs REA's setup " +"and shows you the plan before changing anything." +msgstr "開啟助手,把下面的 prompt 複製進去。助手會執行 REA setup,並在執行更改前展示計劃。" + +#. {ph0}: +#: website/public/get-started/index.html:405 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/get-started/index.html:430 +msgctxt "page:get-started/index.html" +msgid "Or run setup yourself" +msgstr "也可以自己執行 setup" + +#: website/public/get-started/index.html:432 +msgctxt "page:get-started/index.html" +msgid "How do I open a terminal?" +msgstr "怎麼開啟終端?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:434 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press " +"Enter." +msgstr "{ph0}Windows:{ph1}開啟開始選單,輸入 {ph2}PowerShell{ph3},按 Enter。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Space +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:438 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter." +msgstr "{ph0}macOS:{ph1}按 {ph2} {ph3},輸入 {ph4}Terminal{ph5},按 Enter。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: Ctrl +#. {ph3}: Alt +#. {ph4}: T +#: website/public/get-started/index.html:442 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops." +msgstr "{ph0}Linux:{ph1}多數桌面環境可以按 {ph2} {ph3} {ph4}。" + +#. {ph0}: Ctrl +#. {ph1}: V +#. {ph2}: ⌘ +#. {ph3}: V +#. {ph4}: Ctrl +#. {ph5}: Shift +#. {ph6}: V +#: website/public/get-started/index.html:447 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4}" +" {ph5} {ph6}), then press Enter." +msgstr "" +"用 {ph0} {ph1} 貼上命令(macOS:{ph2} {ph3};Linux 終端:{ph4} {ph5} {ph6}),再按 Enter。" + +#: website/public/get-started/index.html:468 +msgctxt "page:get-started/index.html" +msgid "" +"Choose your client and review the setup plan. REA adds its MCP connection " +"and the matching investigation skill, keeping a backup of existing " +"configuration. It asks before applying the changes." +msgstr "選擇客戶端,並檢視配置計劃。REA 會新增 MCP 連線和配套調查技能,同時備份已有配置。確認後才會應用更改。" + +#: website/public/get-started/index.html:473 +msgctxt "page:get-started/index.html" +msgid "Restart your client when setup finishes." +msgstr "配置完成後重啟客戶端。" + +#: website/public/get-started/index.html:475 +msgctxt "page:get-started/index.html" +msgid "How do I restart my client?" +msgstr "如何重啟客戶端?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ⌘ +#. {ph3}: Q +#: website/public/get-started/index.html:476 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the" +" app completely, then open it again. Closing the window isn't enough. On " +"macOS press {ph2} {ph3}; on Windows, also quit from the tray icon if there " +"is one." +msgstr "" +"{ph0}桌面應用{ph1}(Claude Desktop、Cursor、Windsurf、VS Code):完全退出後再開啟,只關視窗不夠。macOS" +" 上按 {ph2} {ph3};Windows 上,如果有托盤圖示,也要從那裡退出。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:483 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session" +" and start it again." +msgstr "{ph0}終端助手{ph1}(Claude Code、Codex、Gemini CLI):退出當前會話,再啟動一次。" + +#: website/public/get-started/index.html:488 +msgctxt "page:get-started/index.html" +msgid "" +"Give your agent a target path and a specific question. For a JavaScript or " +"Electron app, you might start with:" +msgstr "給助手目標路徑和一個具體問題。比如 JavaScript 或 Electron 應用,可以這樣開始:" + +#. {ph0}: /absolute/path/to/app +#: website/public/get-started/index.html:493 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Look at {ph0} and find how it exports data. Show the entry points, calls and" +" dependencies involved, with the source locations for your findings." +msgstr "檢查 {ph0},找出它如何匯出資料。展示涉及的入口點、函式呼叫和依賴,並給出分析結果對應的原始碼位置。" + +#: website/public/get-started/index.html:499 +msgctxt "page:get-started/index.html" +msgid "Replace the path with your local target." +msgstr "把路徑換成自己的本地目標。" + +#: website/public/get-started/index.html:501 +msgctxt "page:get-started/index.html" +msgid "How do I get a folder's full path?" +msgstr "怎麼取得資料夾的完整路徑?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:503 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0}Windows:{ph1}在檔案資源管理器中右鍵資料夾,選擇{ph2}“複製檔案地址”{ph3}。Windows 10 上,按住 Shift " +"再右鍵。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:508 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "{ph0}macOS:{ph1}在 Finder 中右鍵資料夾,按住 Option,選擇{ph2}“將…複製為路徑名稱”{ph3}。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:512 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the folder into a terminal window and its path " +"appears." +msgstr "{ph0}所有系統:{ph1}把資料夾拖進終端視窗,也能顯示路徑。" + +#: website/public/get-started/index.html:517 +msgctxt "page:get-started/index.html" +msgid "In a terminal, put quotes around a path that contains spaces." +msgstr "在終端裡,包含空格的路徑需要加引號。" + +#: website/public/get-started/index.html:524 +msgctxt "page:get-started/index.html" +msgid "Use the CLI" +msgstr "使用CLI" + +#: website/public/get-started/index.html:525 +msgctxt "page:get-started/index.html" +msgid "" +"Analyze a JavaScript or Electron application folder or ASAR archive without " +"running the app:" +msgstr "靜態分析 JavaScript 或 Electron 應用目錄、ASAR 檔案,無需啟動應用:" + +#: website/public/get-started/index.html:531 +msgctxt "page:get-started/index.html" +msgid "Static application analysis" +msgstr "靜態應用分析" + +#. {ph0}: .asar +#. {ph1}: "D:/apps/example" +#: website/public/get-started/index.html:544 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Replace the path with your extracted app directory or {ph0} file. On " +"Windows, a path such as {ph1} works here." +msgstr "把路徑換成解包後的應用目錄或 {ph0} 檔案。Windows 上也可以使用 {ph1} 這樣的路徑。" + +#: website/public/get-started/index.html:550 +msgctxt "page:get-started/index.html" +msgid "Where do I find an app's .asar file?" +msgstr "在哪裡找到應用的 .asar 檔案?" + +#. {ph0}: resources +#: website/public/get-started/index.html:551 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Electron apps usually keep it in a {ph0} folder:" +msgstr "Electron 應用通常把它放在 {ph0} 資料夾中:" + +#. {ph0}: +#. {ph1}: +#. {ph2}: C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar +#: website/public/get-started/index.html:556 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Windows:{ph1} {ph2}" +msgstr "{ph0} Windows :{ph1} {ph2}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /Applications/<App>.app/Contents/Resources/app.asar +#. {ph3}: +#. {ph4}: +#: website/public/get-started/index.html:562 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package " +"Contents{ph4})" +msgstr "{ph0}macOS:{ph1}{ph2}(右鍵應用,選擇{ph3}“顯示包內容”{ph4})" + +#. {ph0}: +#. {ph1}: +#. {ph2}: /opt/<App>/resources/app.asar +#: website/public/get-started/index.html:570 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Linux:{ph1} often {ph2}" +msgstr "{ph0}Linux:{ph1}通常位於 {ph2}" + +#. {ph0}: app.asar +#: website/public/get-started/index.html:575 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Some apps install elsewhere. Search the app's folder for {ph0}." +msgstr "有些應用安裝在其他位置。在應用目錄裡搜尋 {ph0}。" + +#: website/public/get-started/index.html:580 +msgctxt "page:get-started/index.html" +msgid "" +"The result identifies the app, shows connections between modules and gives " +"their source locations. Connections REA cannot resolve are marked in the " +"result." +msgstr "結果會識別應用,展示模組之間的關係,並給出原始碼位置。REA 無法解析的關係會在結果中註明。" + +#. {ph0}: rea +#: website/public/get-started/index.html:585 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "If you'd like a permanent {ph0} command in your shell:" +msgstr "如果希望在 shell 中直接使用 {ph0} 命令:" + +#: website/public/get-started/index.html:590 +msgctxt "page:get-started/index.html" +msgid "Install the CLI" +msgstr "安裝CLI" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:602 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "{ph0}Continue with the JavaScript application guide{ph1}" +msgstr "{ph0}繼續看 JavaScript 應用指南{ph1}" + +#: website/public/get-started/index.html:610 +msgctxt "page:get-started/index.html" +msgid "Set up native analysis" +msgstr "配置原生分析" + +#: website/public/get-started/index.html:611 +msgctxt "page:get-started/index.html" +msgid "" +"Native binaries need a local analysis tool. Choose and configure one below, " +"then give REA your executable or library." +msgstr "原生二進位制需要本地分析工具。在下面選擇並配置一個工具,再提供可執行檔案或庫。" + +#: website/public/get-started/index.html:616 +msgctxt "page:get-started/index.html" +msgid "Choose a tool: Ghidra, Hopper or IDA" +msgstr "選擇工具:Ghidra、Hopper 或 IDA" + +#: website/public/get-started/index.html:621 +msgctxt "page:get-started/index.html" +msgid "" +"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on " +"Linux or macOS, on x64 or arm64. Your Ghidra installation needs a native " +"decompiler for your host architecture. Set the paths before running setup:" +msgstr "" +"在 Linux 或 macOS 的 x64、arm64 上,使用已有的 Ghidra 12.1.x 和 64 位 JDK 21 或更新版本。Ghidra" +" 需要對應主機架構的原生反編譯器。執行 setup 前先設定路徑:" + +#: website/public/get-started/index.html:628 +msgctxt "page:get-started/index.html" +msgid "Connect your Ghidra installation" +msgstr "連線已有的 Ghidra" + +#: website/public/get-started/index.html:631 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · macOS / Linux" +msgstr "Ghidra 連線 · macOS / Linux" + +#: website/public/get-started/index.html:646 +msgctxt "page:get-started/index.html" +msgid "" +"Replace both paths with your existing installations. Setup checks them and " +"records valid settings for your selected client. On Linux arm64, you may " +"need to build Ghidra's native decompiler separately." +msgstr "" +"把兩個路徑換成自己的安裝位置。setup 會檢查路徑,併為選定客戶端儲存有效配置。Linux arm64 上可能需要另行構建 Ghidra " +"原生反編譯器。" + +#: website/public/get-started/index.html:654 +msgctxt "page:get-started/index.html" +msgid "Connect Ghidra on Windows" +msgstr "在 Windows 上連線 Ghidra" + +#: website/public/get-started/index.html:655 +msgctxt "page:get-started/index.html" +msgid "" +"Windows x64 has experimental, read-only support for native x86 and x64 PE " +"applications and DLLs on fixed local NTFS drives. Use an existing Ghidra " +"12.1.x installation and a 64-bit JDK 21 or newer:" +msgstr "" +"Windows x64 提供實驗性的只讀支援:分析固定本地 NTFS 驅動器上的原生 x86、x64 PE 應用和 DLL。使用已有的 Ghidra " +"12.1.x 和 64 位 JDK 21 或更新版本:" + +#: website/public/get-started/index.html:663 +msgctxt "page:get-started/index.html" +msgid "Ghidra connection · Windows PowerShell" +msgstr "Ghidra 連線 · Windows PowerShell" + +#: website/public/get-started/index.html:678 +msgctxt "page:get-started/index.html" +msgid "" +"Replace the two paths with your installations, then review setup's plan." +msgstr "把兩個路徑換成安裝位置,再檢視 setup 計劃。" + +#: website/public/get-started/index.html:688 +msgctxt "page:get-started/index.html" +msgid "" +"Connect Hopper on macOS or Linux. Run the setup command above; it detects an" +" existing installation or offers an installation plan for your approval." +msgstr "在 macOS 或 Linux 上連線 Hopper。執行上面的 setup 命令,它會檢測已有安裝,或提出安裝計劃供你確認。" + +#: website/public/get-started/index.html:693 +msgctxt "page:get-started/index.html" +msgid "" +"On macOS, complete Hopper's first-run choice of demo mode or license " +"activation before an unattended analysis." +msgstr "在 macOS 上,首次使用 Hopper 時先完成演示模式或許可證啟用的選擇,再做無人值守分析。" + +#: website/public/get-started/index.html:702 +msgctxt "page:get-started/index.html" +msgid "" +"The verified IDA setups use Windows, with an existing MCP registration for " +"an attached GUI or a headless database. Linux and macOS headless analysis " +"remains unverified." +msgstr "" +"已驗證的 IDA 配置使用 Windows,連線已有的 MCP 註冊,可附加到 GUI,也可使用無介面資料庫。Linux 和 macOS " +"的無介面分析仍未驗證。" + +#: website/public/get-started/index.html:708 +msgctxt "page:get-started/index.html" +msgid "Connect an existing IDA MCP registration" +msgstr "連線已有的 IDA MCP 註冊" + +#. {ph0}: command +#. {ph1}: args +#. {ph2}: env +#. {ph3}: mcpServers +#. {ph4}: ida-pro-mcp +#: website/public/get-started/index.html:711 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON" +" file. An existing {ph3} object with an {ph4} entry is also accepted. Point " +"REA at that file before setup:" +msgstr "" +"把上游伺服器可用的 {ph0}、{ph1} 和可選的 {ph2} 儲存在 JSON 檔案中。已有的 {ph3} 物件中包含 {ph4} 條目也可以。執行" +" setup 前讓 REA 指向這個檔案:" + +#: website/public/get-started/index.html:720 +msgctxt "page:get-started/index.html" +msgid "IDA connection · Windows PowerShell" +msgstr "IDA 連線 · Windows PowerShell" + +#. {ph0}: "mode": "headless" +#: website/public/get-started/index.html:735 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"The attached profile uses upstream legacy 1.4.0 tools with the original " +"binary already open in IDA. The headless profile uses the upstream database-" +"supervisor API and a registration with {ph0}; real verification covers an " +"IDA 9.3 Windows x64 supervisor. Doctor checks the registration without " +"starting IDA." +msgstr "" +"附加配置使用上游 legacy 1.4.0 工具,原始二進位制應已在 IDA 中開啟。無介面配置使用上游 database-supervisor " +"API,以及包含 {ph0} 的註冊;實際驗證覆蓋 IDA 9.3 Windows x64 supervisor。doctor 只檢查註冊,不會啟動 " +"IDA。" + +#. {ph0}: --provider ida +#. {ph1}: REA_IDA_MCP_CONFIG +#: website/public/get-started/index.html:744 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Give REA the original executable path, with {ph0} in a CLI query. For an " +"agent, include {ph1} in the REA registration's environment and select IDA " +"when opening the binary." +msgstr "" +"給 REA 原始可執行檔案的路徑,在 CLI 查詢中加入 {ph0}。使用程式設計助手時,把 {ph1} 加入 REA " +"註冊的環境配置,並在開啟二進位制時選擇 IDA。" + +#: website/public/get-started/index.html:756 +msgctxt "page:get-started/index.html" +msgid "For an existing Ghidra setup, inspect a function with:" +msgstr "已配置 Ghidra 時,可以這樣檢查函式:" + +#: website/public/get-started/index.html:761 +msgctxt "page:get-started/index.html" +msgid "Function analysis" +msgstr "函式分析" + +#. {ph0}: main +#: website/public/get-started/index.html:774 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Replace {ph0} with the function name or address you want to inspect." +msgstr "把 {ph0} 換成要檢查的函式名或地址。" + +#: website/public/get-started/index.html:779 +msgctxt "page:get-started/index.html" +msgid "How native analysis sessions work" +msgstr "原生分析會話如何工作" + +#: website/public/get-started/index.html:780 +msgctxt "page:get-started/index.html" +msgid "" +"Each CLI command imports and analyzes the binary, then closes its session. " +"Your agent's MCP queries reuse the imported binary while that session is " +"open." +msgstr "每條 CLI 命令匯入並分析二進位制檔案,完成後關閉會話。助手的 MCP 查詢會在會話保持開啟時複用已匯入的二進位制檔案。" + +#. {ph0}: +#. {ph1}: +#: website/public/get-started/index.html:786 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Follow a native analysis example{ph1} to see how the function result " +"leads to a recovered calculation." +msgstr "{ph0}跟著原生分析示例{ph1},看看函式結果如何幫助還原計算規則。" + +#: website/public/get-started/index.html:793 +msgctxt "page:get-started/index.html" +msgid "Getting help" +msgstr "尋求幫助" + +#: website/public/get-started/index.html:794 +msgctxt "page:get-started/index.html" +msgid "If your agent doesn't see REA" +msgstr "助手看不到 REA 工具時" + +#. {ph0}: doctor +#: website/public/get-started/index.html:795 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"Restart or reconnect the client after setup. Check its REA connection with " +"{ph0}; for Codex:" +msgstr "配置後重啟或重新連線客戶端。用 {ph0} 檢查 REA 連線。以 Codex 為例:" + +#: website/public/get-started/index.html:801 +msgctxt "page:get-started/index.html" +msgid "Check one client" +msgstr "檢查一個客戶端" + +#: website/public/get-started/index.html:813 +msgctxt "page:get-started/index.html" +msgid "If a provider needs attention" +msgstr "分析後端出現問題時" + +#: website/public/get-started/index.html:814 +msgctxt "page:get-started/index.html" +msgid "Check the provider you're using. For Ghidra:" +msgstr "檢查正在使用的分析後端。以 Ghidra 為例:" + +#: website/public/get-started/index.html:817 +msgctxt "page:get-started/index.html" +msgid "Check one provider" +msgstr "檢查一個分析後端" + +#: website/public/get-started/index.html:829 +msgctxt "page:get-started/index.html" +msgid "The report gives the failed check and a suggested next step." +msgstr "報告會列出失敗的檢查和建議的下一步。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:831 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}" +msgstr "{ph0}REA FAQ{ph1}{ph2}關於更新、助手和分析的常見解答。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:835 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an" +" Electron app and a browser.{ph3}" +msgstr "{ph0}選擇調查指南{ph1}{ph2}二進位制、Electron 應用和瀏覽器的完整示例。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:842 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and " +"diagnostics.{ph3}" +msgstr "{ph0}GitHub issues{ph1}{ph2}附上命令與診斷結果,反饋問題。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/get-started/index.html:846 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}REA community{ph1}{ph2}Questions, investigations and work in " +"progress.{ph3}" +msgstr "{ph0}REA 社群{ph1}{ph2}交流問題、調查和正在進行的工作。{ph3}" + +#: website/public/get-started/index.html:6 +msgctxt "page:get-started/index.html" +msgid "Install REA and Set Up Your Coding Agent" +msgstr "安裝 REA 並配置程式設計助手" + +#: website/public/get-started/index.html:7 +msgctxt "page:get-started/index.html" +msgid "" +"Connect REA to your coding agent or inspect a local JavaScript or Electron " +"app from the terminal. Setup, first questions and native provider guides." +msgstr "把 REA 連線到程式設計助手,或用終端檢查本地 JavaScript、Electron 應用。包含配置、首次提問和原生分析後端指南。" + +#: website/public/get-started/index.html:199 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js version check" +msgstr "複製Node.js版本檢查" + +#: website/public/get-started/index.html:220 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js installation command for Windows" +msgstr "複製Node.js的Windows安裝命令" + +#: website/public/get-started/index.html:243 +msgctxt "page:get-started/index.html" +msgid "Copy PowerShell execution policy command" +msgstr "複製PowerShell執行策略命令" + +#: website/public/get-started/index.html:259 +msgctxt "page:get-started/index.html" +msgid "Copy Homebrew Node.js installation command" +msgstr "複製 Homebrew Node.js 安裝命令" + +#: website/public/get-started/index.html:274 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for macOS" +msgstr "複製macOS的fnm安裝命令" + +#: website/public/get-started/index.html:289 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for macOS" +msgstr "複製 Node.js 24命令 macOS" + +#: website/public/get-started/index.html:305 +msgctxt "page:get-started/index.html" +msgid "Copy fnm installation command for Linux" +msgstr "複製Linux的fnm安裝命令" + +#: website/public/get-started/index.html:324 +msgctxt "page:get-started/index.html" +msgid "Copy Node.js 24 commands for Linux" +msgstr "複製 Node.js 24命令 Linux" + +#: website/public/get-started/index.html:347 +msgctxt "page:get-started/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/get-started/index.html:356 +msgctxt "page:get-started/index.html" +msgid "REA getting started guide" +msgstr "REA入門指南" + +#: website/public/get-started/index.html:410 +msgctxt "page:get-started/index.html" +msgid "Copy REA installation prompt" +msgstr "複製REA安裝提示" + +#: website/public/get-started/index.html:456 +msgctxt "page:get-started/index.html" +msgid "Copy agent setup command" +msgstr "複製程式設計助手設定命令" + +#: website/public/get-started/index.html:532 +msgctxt "page:get-started/index.html" +msgid "Copy JavaScript analysis command" +msgstr "複製JavaScript分析命令" + +#: website/public/get-started/index.html:591 +msgctxt "page:get-started/index.html" +msgid "Copy CLI installation command" +msgstr "複製CLI安裝命令" + +#: website/public/get-started/index.html:632 +msgctxt "page:get-started/index.html" +msgid "Copy ghidra connection · macos / linux" +msgstr "複製ghidra連線 · macos/linux" + +#: website/public/get-started/index.html:664 +msgctxt "page:get-started/index.html" +msgid "Copy Ghidra connection for Windows PowerShell" +msgstr "複製 Ghidra 連線 Windows PowerShell的" + +#: website/public/get-started/index.html:721 +msgctxt "page:get-started/index.html" +msgid "Copy IDA connection for Windows PowerShell" +msgstr "複製 IDA 連線 Windows PowerShell的" + +#: website/public/get-started/index.html:762 +msgctxt "page:get-started/index.html" +msgid "Copy native function analysis command" +msgstr "複製原生函式分析命令" + +#: website/public/get-started/index.html:802 +msgctxt "page:get-started/index.html" +msgid "Copy client diagnosis command" +msgstr "複製客戶端診斷命令" + +#: website/public/get-started/index.html:818 +msgctxt "page:get-started/index.html" +msgid "Copy provider diagnosis command" +msgstr "複製提供者診斷命令" + +#: website/public/get-started/index.html:869 +msgctxt "page:get-started/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/guides/browser/index.html:99 +msgctxt "page:guides/browser/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/browser/index.html:181 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation" +msgstr "{ph0}首頁{ph1} / {ph2}指南{ph3} /瀏覽器觀察" + +#. {ph0}:
+#: website/public/guides/browser/index.html:185 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "See what happens{ph0}when you click." +msgstr "看看會發生什麼{ph0}當你點選。" + +#: website/public/guides/browser/index.html:186 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use a small browser app to connect an action, its network request and the " +"JavaScript that builds a download." +msgstr "使用小型瀏覽器應用程式連線操作,其網路請求和構建下載的JavaScript。" + +#: website/public/guides/browser/index.html:193 +msgctxt "page:guides/browser/index.html" +msgid "In this guide" +msgstr "在本指南中" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:195 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}例子{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:196 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Open the browser{ph1}" +msgstr "{ph0}開啟瀏覽器{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:197 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}問問你的程式設計助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:198 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Capture from CLI{ph1}" +msgstr "{ph0}從CLI捕獲 {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:199 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}Read the request and script{ph1}" +msgstr "{ph0}閱讀請求和指令碼{ph1}" + +#: website/public/guides/browser/index.html:204 +msgctxt "page:guides/browser/index.html" +msgid "What happens when you click Export?" +msgstr "單擊匯出時會發生什麼?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.json +#: website/public/guides/browser/index.html:205 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. " +"Clicking it loads {ph4}, formats the two notes as CSV, and starts a " +"download." +msgstr "" +"{ph0}Notes 瀏覽器示例{ph1}有一個{ph2}Export notes(匯出筆記){ph3}按鈕。點選後載入 {ph4},把兩條筆記格式化為" +" CSV,再開始下載。" + +#: website/public/guides/browser/index.html:213 +msgctxt "page:guides/browser/index.html" +msgid "From the click to the CSV download" +msgstr "從點選到CSV下載" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:215 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in " +"your browser while the capture is running.{ph5}" +msgstr "{ph0}01 · 你{ph1}{ph2}點選 Export notes{ph3}{ph4}在捕獲進行時,用瀏覽器執行操作。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/browser/index.html:223 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, " +"response status and JSON structure from the selected page.{ph5}" +msgstr "{ph0}02*REA {ph1}{ph2}記錄請求{ph3}{ph4}從所選頁面捕獲請求URL,響應狀態和JSON結構。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: fetch("./notes.json") +#. {ph6}: export.js +#. {ph7}: +#: website/public/guides/browser/index.html:231 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the " +"observed request to {ph5} in {ph6}.{ph7}" +msgstr "" +"{ph0}03 · 程式設計助手{ph1}{ph2}讀取匯出程式碼{ph3}{ph4}把觀察到的請求與 {ph6} 中的 {ph5} " +"關聯起來。{ph7}" + +#: website/public/guides/browser/index.html:244 +msgctxt "page:guides/browser/index.html" +msgid "Start the capture before clicking Export notes." +msgstr "在單擊匯出註釋之前開始捕獲。" + +#: website/public/guides/browser/index.html:250 +msgctxt "page:guides/browser/index.html" +msgid "Open Chrome with remote debugging" +msgstr "使用遠端除錯開啟Chrome" + +#: website/public/guides/browser/index.html:251 +msgctxt "page:guides/browser/index.html" +msgid "" +"Open the hosted Notes example with a separate browser profile and a local " +"debugging port. On Linux:" +msgstr "用獨立的瀏覽器配置和本地除錯埠開啟線上 Notes 示例。Linux 上:" + +#: website/public/guides/browser/index.html:257 +msgctxt "page:guides/browser/index.html" +msgid "Start the example browser" +msgstr "啟動示例瀏覽器" + +#: website/public/guides/browser/index.html:258 +#: website/public/guides/browser/index.html:290 +#: website/public/guides/browser/index.html:324 +#: website/public/guides/browser/index.html:343 +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy" +msgstr "複製" + +#: website/public/guides/browser/index.html:272 +msgctxt "page:guides/browser/index.html" +msgid "" +"Use your installed browser's executable path on macOS or Windows. You can " +"replace the page URL with another page you want to inspect." +msgstr "在macOS或Windows上使用已安裝的瀏覽器的可執行路徑。 你可以將頁面URL替換為要檢查的其他頁面。" + +#: website/public/guides/browser/index.html:277 +msgctxt "page:guides/browser/index.html" +msgid "" +"REA connects to this existing browser. You keep control of the page, perform" +" the action, and close the browser when finished." +msgstr "REA連線到這個現有的瀏覽器。 你可以控制頁面,執行操作,並在完成後關閉瀏覽器。" + +#: website/public/guides/browser/index.html:283 +msgctxt "page:guides/browser/index.html" +msgid "Ask your agent to watch one action" +msgstr "讓你的程式設計助手看一個動作" + +#. {ph0}: +#: website/public/guides/browser/index.html:286 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/browser/index.html:299 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. " +"What request does it make, and how is the CSV built?{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 檢查這個頁面。我點選 Export notes 時,它發起什麼請求?CSV " +"是怎樣生成的?{ph3}{ph4}{ph5}" + +#. {ph0}: http://127.0.0.1:9222 +#: website/public/guides/browser/index.html:307 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page " +"URL. Let it start the capture before you click." +msgstr "示例 prompt。把除錯地址 {ph0} 和頁面網址交給助手。等它開始捕獲,再點選按鈕。" + +#: website/public/guides/browser/index.html:312 +msgctxt "page:guides/browser/index.html" +msgid "" +"Your agent discovers the page target, starts an observation window, and " +"reads the resulting evidence. It can then inspect the script behind the " +"export." +msgstr "你的程式設計助手發現頁面目標,啟動觀察視窗,並讀取生成的證據。 然後,它可以檢查匯出後面的指令碼。" + +#: website/public/guides/browser/index.html:319 +msgctxt "page:guides/browser/index.html" +msgid "Or capture from the terminal" +msgstr "或從終端捕獲" + +#: website/public/guides/browser/index.html:320 +msgctxt "page:guides/browser/index.html" +msgid "Find the page's target ID:" +msgstr "查詢頁面的目標ID:" + +#: website/public/guides/browser/index.html:323 +msgctxt "page:guides/browser/index.html" +msgid "Find the page" +msgstr "查詢頁面" + +#. {ph0}: TARGET_ID +#: website/public/guides/browser/index.html:336 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Choose the target with the Notes example URL. Replace {ph0} below with its " +"ID, then run:" +msgstr "選擇網址為 Notes 示例的目標,把下面的 {ph0} 換成目標 ID,再執行:" + +#: website/public/guides/browser/index.html:342 +msgctxt "page:guides/browser/index.html" +msgid "Capture the next ten seconds" +msgstr "捕捉接下來的十秒" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:358 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Let the command connect for a few seconds, then click {ph0}Export notes{ph1}" +" in that browser. The result arrives after the observation window ends." +msgstr "讓命令連線幾秒鐘,再在瀏覽器中點選{ph0}Export notes{ph1}。觀察時間視窗結束後會返回結果。" + +#: website/public/guides/browser/index.html:363 +msgctxt "page:guides/browser/index.html" +msgid "" +"The captured result includes the selected page, network activity during that" +" window, and the shape of the JSON response. Earlier requests are outside " +"this capture." +msgstr "捕獲的結果包括所選頁面、該視窗期間的網路活動以及JSON響應的形狀。 較早的請求在此捕獲之外。" + +#: website/public/guides/browser/index.html:370 +msgctxt "page:guides/browser/index.html" +msgid "Read the request and export script" +msgstr "讀取請求和匯出指令碼" + +#: website/public/guides/browser/index.html:373 +msgctxt "page:guides/browser/index.html" +msgid "Recorded with REA 4.1.0 on the local Notes example" +msgstr "在本地筆記示例中用REA4.1.0記錄" + +#: website/public/guides/browser/index.html:378 +msgctxt "page:guides/browser/index.html" +msgid "Captured fact" +msgstr "捕獲的事實" + +#: website/public/guides/browser/index.html:379 +msgctxt "page:guides/browser/index.html" +msgid "Value" +msgstr "數值" + +#: website/public/guides/browser/index.html:384 +msgctxt "page:guides/browser/index.html" +msgid "Request" +msgstr "請求" + +#: website/public/guides/browser/index.html:388 +msgctxt "page:guides/browser/index.html" +msgid "Response" +msgstr "回應" + +#: website/public/guides/browser/index.html:392 +msgctxt "page:guides/browser/index.html" +msgid "Request initiator" +msgstr "請求發起者" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:393 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · script" +msgstr "{ph0} · 指令碼" + +#: website/public/guides/browser/index.html:396 +msgctxt "page:guides/browser/index.html" +msgid "Response structure" +msgstr "響應結構" + +#. {ph0}: notes[] +#. {ph1}: id +#. {ph2}: title +#: website/public/guides/browser/index.html:397 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} with {ph1} and {ph2} fields" +msgstr "{ph0} 與 {ph1} 和 {ph2} 欄位" + +#: website/public/guides/browser/index.html:407 +msgctxt "page:guides/browser/index.html" +msgid "Read the loaded scripts" +msgstr "閱讀載入的指令碼" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:421 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The request identifies the data source, and REA records {ph0} as its " +"initiator. Read the captured script source to see how the data is used:" +msgstr "請求指出了資料來源,REA 記錄的請求發起方是 {ph0}。讀取捕獲的指令碼原始碼,看看它如何使用資料:" + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:441 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"The download is constructed in the page using the JSON response. The CSV " +"formatting step comes from the script; the network capture establishes that " +"this click requested {ph0}." +msgstr "下載是使用JSON響應在頁面中構建的。 CSV格式化步驟來自指令碼;網路捕獲建立此單擊請求 {ph0}." + +#. {ph0}: notes.json +#: website/public/guides/browser/index.html:457 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"Find the script that requests {ph0}. How does it escape titles containing " +"commas or quotation marks?" +msgstr "查詢請求的指令碼 {ph0}. 它如何轉義包含逗號或引號的標題?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/browser/index.html:462 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"For an installed JavaScript or Electron app, continue with the " +"{ph0}application workflow{ph1} to follow files and process boundaries." +msgstr "對於已安裝的JavaScript或Electron應用程式,請繼續 {ph0}應用程式工作流程{ph1} 要遵循檔案和程序邊界。" + +#: website/public/guides/browser/index.html:6 +msgctxt "page:guides/browser/index.html" +msgid "Browser and Network Analysis — REA" +msgstr "瀏覽器和網路分析-REA" + +#: website/public/guides/browser/index.html:7 +msgctxt "page:guides/browser/index.html" +msgid "" +"Observe a Notes export with REA: select a browser page, capture a click, " +"inspect the request and follow the export script." +msgstr "觀察一個筆記匯出與 REA:選擇瀏覽器頁面,捕獲單擊,檢查請求並遵循匯出指令碼。" + +#: website/public/guides/browser/index.html:192 +msgctxt "page:guides/browser/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/guides/browser/index.html:202 +msgctxt "page:guides/browser/index.html" +msgid "Browser observation" +msgstr "瀏覽器觀察" + +#: website/public/guides/browser/index.html:258 +msgctxt "page:guides/browser/index.html" +msgid "Copy start the example browser" +msgstr "複製啟動示例瀏覽器" + +#: website/public/guides/browser/index.html:290 +msgctxt "page:guides/browser/index.html" +msgid "Copy example prompt" +msgstr "複製示例提示" + +#: website/public/guides/browser/index.html:324 +msgctxt "page:guides/browser/index.html" +msgid "Copy find the page" +msgstr "複製查詢頁面" + +#: website/public/guides/browser/index.html:343 +msgctxt "page:guides/browser/index.html" +msgid "Copy capture the next ten seconds" +msgstr "複製捕獲接下來的十秒鐘" + +#: website/public/guides/browser/index.html:408 +msgctxt "page:guides/browser/index.html" +msgid "Copy read the loaded scripts" +msgstr "複製讀取載入的指令碼" + +#: website/public/guides/browser/index.html:485 +msgctxt "page:guides/browser/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/guides/index.html:99 +msgctxt "page:guides/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:181 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "{ph0}Home{ph1} / Guides" +msgstr "{ph0}首頁{ph1} /指南" + +#: website/public/guides/index.html:182 +msgctxt "page:guides/index.html" +msgid "REA guides." +msgstr "REA 分析指南。" + +#: website/public/guides/index.html:183 +msgctxt "page:guides/index.html" +msgid "" +"Analyze a native function, an Electron export or a browser request. Each " +"guide includes a prompt, code and results." +msgstr "分析本機函式、Electron匯出或瀏覽器請求。 每個指南包括提示,程式碼和結果。" + +#: website/public/guides/index.html:190 +msgctxt "page:guides/index.html" +msgid "First investigation" +msgstr "第一次調查" + +#: website/public/guides/index.html:192 +msgctxt "page:guides/index.html" +msgid "Set up REA" +msgstr "設定REA" + +#: website/public/guides/index.html:193 +msgctxt "page:guides/index.html" +msgid "Connect your coding agent or use REA from the terminal." +msgstr "連線你的程式設計助手或使用 REA 從終端。" + +#: website/public/guides/index.html:194 +msgctxt "page:guides/index.html" +msgid "Get started with REA" +msgstr "開始使用 REA" + +#: website/public/guides/index.html:198 +msgctxt "page:guides/index.html" +msgid "Native binaries" +msgstr "原生二進位制" + +#: website/public/guides/index.html:200 +msgctxt "page:guides/index.html" +msgid "Recover a sound-pan calculation" +msgstr "恢復左/右聲音位置的計算" + +#: website/public/guides/index.html:201 +msgctxt "page:guides/index.html" +msgid "" +"Start with a Windows game executable. Inspect instructions, follow a caller," +" read numeric constants and check the recovered C." +msgstr "從Windows遊戲可執行檔案開始。 檢查指令,跟隨呼叫者,讀取數字常量並檢查恢復的C。" + +#: website/public/guides/index.html:211 +msgctxt "page:guides/index.html" +msgid "Native analysis guide" +msgstr "原生分析指南" + +#: website/public/guides/index.html:215 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/guides/index.html:217 +msgctxt "page:guides/index.html" +msgid "Follow a CSV export" +msgstr "追蹤 CSV 匯出" + +#: website/public/guides/index.html:218 +msgctxt "page:guides/index.html" +msgid "" +"A small Notes app spreads one feature across the renderer, preload and main " +"process. Use REA to connect the API, IPC channel and file writer." +msgstr "一個小Notes應用程式在渲染器,預載入和主程序中傳播一個功能。 使用REA連線API,IPC通道和檔案編寫器。" + +#: website/public/guides/index.html:228 +msgctxt "page:guides/index.html" +msgid "JavaScript & Electron guide" +msgstr "JavaScript&Electron指南" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/index.html:231 +#, python-brace-format +msgctxt "page:guides/index.html" +msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}." +msgstr "對於更大的打包應用程式,請遵循 {ph0} Notion的剪貼簿橋{ph1}." + +#: website/public/guides/index.html:238 +msgctxt "page:guides/index.html" +msgid "Browser behavior" +msgstr "瀏覽器行為" + +#: website/public/guides/index.html:240 +msgctxt "page:guides/index.html" +msgid "Observe a click" +msgstr "觀察點選" + +#: website/public/guides/index.html:241 +msgctxt "page:guides/index.html" +msgid "" +"Open a working Notes example, capture an export request and find the code " +"that turns its response into a download." +msgstr "開啟工作筆記示例,捕獲匯出請求並找到將其響應轉換為下載的程式碼。" + +#: website/public/guides/index.html:250 +msgctxt "page:guides/index.html" +msgid "Browser observation guide" +msgstr "瀏覽器觀察指南" + +#: website/public/guides/index.html:6 +msgctxt "page:guides/index.html" +msgid "Reverse Engineering Guides — REA" +msgstr "逆向工程指南-REA" + +#: website/public/guides/index.html:7 +msgctxt "page:guides/index.html" +msgid "" +"Learn REA through short worked examples: a native calculation, an Electron " +"CSV export and a browser request." +msgstr "透過簡短的示例學習REA:本機計算,Electron CSV匯出和瀏覽器請求。" + +#: website/public/guides/index.html:269 +msgctxt "page:guides/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/guides/javascript/index.html:99 +msgctxt "page:guides/javascript/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:181 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron" +msgstr "{ph0}首頁{ph1} / {ph2}指南{ph3} / JavaScript & Electron" + +#. {ph0}:
+#: website/public/guides/javascript/index.html:185 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "Trace an Electron{ph0}CSV export." +msgstr "追蹤安 Electron{ph0}CSV 匯出。" + +#: website/public/guides/javascript/index.html:186 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow a button click from the page API, through Electron IPC, to the CSV " +"file writer." +msgstr "按照一個按鈕點選從頁面API,透過Electron IPC,到CSV檔案編寫器。" + +#: website/public/guides/javascript/index.html:193 +msgctxt "page:guides/javascript/index.html" +msgid "In this guide" +msgstr "在本指南中" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:195 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}例子{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:196 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}問問你的程式設計助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:197 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Trace the export code{ph1}" +msgstr "{ph0}跟蹤匯出程式碼{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:198 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Try the example{ph1}" +msgstr "{ph0}試試這個例子{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:199 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Inspect the CSV writer{ph1}" +msgstr "{ph0}檢查CSV寫入器{ph1}" + +#: website/public/guides/javascript/index.html:204 +msgctxt "page:guides/javascript/index.html" +msgid "Where does “Export notes” go?" +msgstr "\"Export notes(匯出筆記)\"去哪兒了?" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:205 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls " +"an API in the page, crosses into the main process, and writes a CSV. The " +"behavior is spread across several files." +msgstr "" +"本指南使用一個小型 Electron 應用。點選{ph0}Export notes(匯出筆記){ph1}後,頁面呼叫 " +"API,透過程序邊界進入主程序,最後寫出 CSV。這個行為分散在幾個檔案中。" + +#: website/public/guides/javascript/index.html:212 +msgctxt "page:guides/javascript/index.html" +msgid "The CSV export across Electron processes" +msgstr "該 CSV 跨匯出 Electron 過程" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes.exportCsv() +#. {ph4}: +#. {ph5}: +#. {ph6}: renderer.js +#. {ph7}: preload.js +#. {ph8}: +#: website/public/guides/javascript/index.html:216 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed " +"by {ph7}.{ph8}" +msgstr "{ph0}渲染器→預載入{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} 呼叫由 {ph7}.{ph8}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: notes:export +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/guides/javascript/index.html:224 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC " +"channel: a named message to the main process.{ph6}" +msgstr "{ph0}程序之間{ph1}{ph2}{ph3}{ph4}{ph5}預載入呼叫IPC通道:主程序的命名訊息。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: main.js +#. {ph6}: +#: website/public/guides/javascript/index.html:232 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that " +"channel and calls the CSV writer.{ph6}" +msgstr "{ph0}主程序{ph1}{ph2}匯出處理函式{ph3}{ph4}{ph5}處理這個通道,再呼叫 CSV 寫入函式。{ph6}" + +#. {ph0}: csv.js +#. {ph1}: main.js +#. {ph2}: downloads/notes.csv +#: website/public/guides/javascript/index.html:241 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} formats the notes → {ph1} writes {ph2}." +msgstr "{ph0} 格式化註釋→ {ph1} 寫道 {ph2}." + +#: website/public/guides/javascript/index.html:245 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA matches the literal IPC call to its handler and identifies the exposed " +"API. The path is inferred from code; a runtime capture can check what " +"executes." +msgstr "REA將字面IPC呼叫與其處理程式相匹配,並標識公開的API。 路徑是從程式碼中推斷出來的;執行時捕獲可以檢查執行的內容。" + +#: website/public/guides/javascript/index.html:253 +msgctxt "page:guides/javascript/index.html" +msgid "Ask about the CSV export" +msgstr "詢問有關 CSV 匯出" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:254 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR " +"file:" +msgstr "{ph0}將你的程式設計助手連線到 REA{ph1} 並給它的應用程式目錄或 ASAR 檔案:" + +#. {ph0}: +#: website/public/guides/javascript/index.html:260 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/guides/javascript/index.html:264 +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy" +msgstr "複製" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/javascript/index.html:273 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this " +"app. Where is the CSV created?{ph3}{ph4}{ph5}" +msgstr "{ph0}›{ph1}{ph2}用 REA 找出這個應用匯出筆記時發生了什麼。CSV 檔案在哪裡建立?{ph3}{ph4}{ph5}" + +#. {ph0}: app.asar +#: website/public/guides/javascript/index.html:281 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Example prompt. Include the absolute path to the application folder or " +"{ph0}." +msgstr "示例提示。 包括應用程式資料夾的絕對路徑或 {ph0}." + +#: website/public/guides/javascript/index.html:285 +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA reads the application files and builds a map of entrypoints, modules and" +" process boundaries. Your agent uses that map to narrow the investigation to" +" the export feature." +msgstr "REA讀取應用程式檔案並構建入口點,模組和流程邊界的對映。 你的程式設計助手使用該對映將調查範圍縮小到匯出功能。" + +#: website/public/guides/javascript/index.html:292 +msgctxt "page:guides/javascript/index.html" +msgid "Trace the export code" +msgstr "跟蹤匯出程式碼" + +#: website/public/guides/javascript/index.html:293 +msgctxt "page:guides/javascript/index.html" +msgid "The page calls a small API" +msgstr "頁面呼叫一個小API" + +#: website/public/guides/javascript/index.html:306 +msgctxt "page:guides/javascript/index.html" +msgid "" +"The page knows the method name. The implementation lives in the preload, " +"which exposes it to the renderer." +msgstr "頁面知道方法名稱。 實現存在於預載入中,預載入將其暴露給渲染器。" + +#. {ph0}: notes.exportCsv +#. {ph1}: notes:export +#: website/public/guides/javascript/index.html:320 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"REA records {ph0} and the literal channel {ph1}. It pairs that invocation " +"with the single matching handler in the main process." +msgstr "REA 記錄 {ph0} 和直接寫在程式碼中的通道名 {ph1},並將呼叫關聯到主程序裡唯一匹配的處理函式。" + +#. {ph0}: csv.js +#. {ph1}: notes.csv +#: website/public/guides/javascript/index.html:337 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Reading the handler answers the original question: {ph0} formats the notes, " +"and the main process writes {ph1} into the user's Downloads folder." +msgstr "讀取處理函式就能回答最初的問題:{ph0} 格式化筆記,主程序將 {ph1} 寫入使用者的下載資料夾。" + +#: website/public/guides/javascript/index.html:354 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Recorded by REA 4.1.0 on the downloadable example below. Source locations " +"accompany the API, channel and handler findings." +msgstr "使用 REA 4.1.0 分析下面可下載的示例。API、通道和處理函式的結果均附有原始碼位置。" + +#: website/public/guides/javascript/index.html:360 +msgctxt "page:guides/javascript/index.html" +msgid "Analyze the example yourself" +msgstr "自己分析例子" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/javascript/index.html:367 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0}Download example ZIP{ph1}" +msgstr "{ph0}下載示例ZIP{ph1}" + +#: website/public/guides/javascript/index.html:376 +msgctxt "page:guides/javascript/index.html" +msgid "Browse the six source files" +msgstr "瀏覽六個原始檔" + +#: website/public/guides/javascript/index.html:412 +msgctxt "page:guides/javascript/index.html" +msgid "Static application analysis" +msgstr "靜態應用分析" + +#. {ph0}: normalized_result.summary.ipc +#. {ph1}: normalized_result.graph +#: website/public/guides/javascript/index.html:425 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Replace the path with the folder you unzipped. You should find one IPC " +"channel and one matching handler in {ph0}. Source locations are in {ph1}." +msgstr "將路徑替換為你解壓縮的資料夾。 你應該在以下位置找到一個IPC通道和一個匹配的處理程式 {ph0}. 源位置在 {ph1}." + +#: website/public/guides/javascript/index.html:431 +msgctxt "page:guides/javascript/index.html" +msgid "" +"For your own app, use the same command with its directory or ASAR path. An " +"agent can follow a literal string, API name or IPC channel with REA's " +"feature tracing tools." +msgstr "" +"對於你自己的應用程式,請對其目錄或ASARpath使用相同的命令。 程式設計助手可以使用REA的功能跟蹤工具跟隨文字字串,API名稱或IPC通道。" + +#: website/public/guides/javascript/index.html:438 +msgctxt "page:guides/javascript/index.html" +msgid "Inspect the CSV writer" +msgstr "檢查CSV寫入器" + +#. {ph0}: notes:export +#: website/public/guides/javascript/index.html:440 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what " +"happens if writing the file fails?" +msgstr "追蹤 {ph0} 到處理函式。哪些輸入傳給 CSV 寫入函式?如果寫入失敗,會怎樣?" + +#: website/public/guides/javascript/index.html:446 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Use the source locations to inspect those details. Computed channel names " +"and ambiguous handlers can remain unresolved; runtime observations give you " +"another way to investigate them." +msgstr "使用源位置檢查這些詳細資訊。 計算的通道名稱和不明確的處理程式可以保持未解析;執行時觀察為你提供了另一種調查它們的方法。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:452 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a" +" packaged Electron app.{ph3}" +msgstr "{ph0}追蹤 Notion 剪貼簿橋接程式碼{ph1}{ph2}把同樣的方法用於打包的 Electron 應用。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:458 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which " +"request it makes.{ph3}" +msgstr "{ph0}觀察瀏覽器匯出{ph1}{ph2}捕獲一個真正的點選,看看它提出了哪個請求。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/javascript/index.html:464 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature" +" depends on native code.{ph3}" +msgstr "{ph0}遵循原生函式{ph1}{ph2}當特性依賴於原生程式碼時,繼續進入二進位制檔案.{ph3}" + +#: website/public/guides/javascript/index.html:6 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript and Electron Analysis — REA" +msgstr "JavaScript和Electron分析-REA" + +#: website/public/guides/javascript/index.html:7 +msgctxt "page:guides/javascript/index.html" +msgid "" +"Trace a Notes CSV export through a renderer API, preload and IPC handler " +"with REA. Includes downloadable example files and a verified analysis " +"result." +msgstr "透過具有REA的渲染器API,預載入和IPC處理程式跟蹤Notes CSV匯出。 包括可下載的示例檔案和經過驗證的分析結果。" + +#: website/public/guides/javascript/index.html:192 +msgctxt "page:guides/javascript/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/guides/javascript/index.html:202 +msgctxt "page:guides/javascript/index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/guides/javascript/index.html:264 +msgctxt "page:guides/javascript/index.html" +msgid "Copy example prompt" +msgstr "複製示例提示" + +#: website/public/guides/javascript/index.html:413 +msgctxt "page:guides/javascript/index.html" +msgid "Copy static application analysis" +msgstr "複製靜態應用程式分析" + +#: website/public/guides/javascript/index.html:490 +msgctxt "page:guides/javascript/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/guides/native/index.html:99 +msgctxt "page:guides/native/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:181 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis" +msgstr "{ph0}首頁{ph1} / {ph2}指南{ph3} /原生分析" + +#. {ph0}:
+#: website/public/guides/native/index.html:184 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "Recover DX-Ball's{ph0}sound-pan calculation." +msgstr "恢復DX-Ball的{ph0}左/右聲音位置的計算。" + +#: website/public/guides/native/index.html:185 +msgctxt "page:guides/native/index.html" +msgid "" +"Inspect the original instructions, identify the input and constants, then " +"check the recovered C." +msgstr "檢查原始指令,識別輸入和常量,然後檢查恢復的C。" + +#: website/public/guides/native/index.html:192 +msgctxt "page:guides/native/index.html" +msgid "In this guide" +msgstr "在本指南中" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:194 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}The example{ph1}" +msgstr "{ph0}例子{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:195 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}問問你的程式設計助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:196 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Read the REA results{ph1}" +msgstr "{ph0}閱讀REA結果{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:197 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Recover and check{ph1}" +msgstr "{ph0}恢復和檢查{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:198 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}Use your own binary{ph1}" +msgstr "{ph0}使用你自己的二進位制檔案{ph1}" + +#: website/public/guides/native/index.html:203 +msgctxt "page:guides/native/index.html" +msgid "Calculate left/right sound panning" +msgstr "計算左/右立體聲聲音定位" + +#: website/public/guides/native/index.html:204 +msgctxt "page:guides/native/index.html" +msgid "" +"In DX-Ball, a brick hit supplies a horizontal screen position. The sound " +"code turns it into a left/right panning value." +msgstr "在DX-Ball中,磚擊提供水平螢幕位置。 聲音程式碼將其轉換為左/右平移值。" + +#. {ph0}: 0x00406400 +#. {ph1}: __ftol() +#: website/public/guides/native/index.html:208 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"The starting function, {ph0}, has a short decompiler result: a call to " +"{ph1}. REA also returns its instructions and callers, which give the agent a" +" way to investigate the missing arithmetic." +msgstr "" +"啟動函式, {ph0},有一個簡短的反編譯器結果:呼叫 {ph1}. REA 還返回其指令和呼叫者,這給程式設計助手一種方法來調查丟失的算術。" + +#: website/public/guides/native/index.html:215 +msgctxt "page:guides/native/index.html" +msgid "New to these terms?" +msgstr "新的這些條款?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: MOV +#. {ph3}: ADD +#: website/public/guides/native/index.html:217 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form" +" such as {ph2} or {ph3}." +msgstr "{ph0}指令:{ph1}處理器執行的步驟,以 {ph2}、{ph3} 這樣的可讀形式顯示。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:222 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn" +" instructions back into C-like code. It can miss parts, as in this example." +msgstr "{ph0}反編譯器結果/虛擬碼:{ph1} 分析工具試圖將指令轉換回類似C的程式碼。 它可能會錯過部分,如本例所示。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:227 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Caller:{ph1} a function that calls this one. It shows which values are " +"passed in." +msgstr "{ph0}呼叫方:{ph1}呼叫當前函式的函式,可以看出傳入的數值。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x00406400 +#: website/public/guides/native/index.html:231 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such " +"as {ph2}." +msgstr "{ph0}地址:{ph1} 程式中的一個位置,用十六進位制編寫,如 {ph2}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:235 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes " +"and decoded." +msgstr "{ph0}常量:{ph1} 固定數字儲存在程式中,讀取為原始位元組和解碼。" + +#: website/public/guides/native/index.html:242 +msgctxt "page:guides/native/index.html" +msgid "Three pieces of evidence, one calculation" +msgstr "三件證據,一個計算" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/guides/native/index.html:246 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read " +"supplies the value used by the floating-point instructions.{ph5}" +msgstr "{ph0}01 · 指令{ph1}{ph2}整數輸入{ph3}{ph4}從棧讀取一個值,供浮點指令使用。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 20 + 30 × tile_x +#. {ph6}: +#: website/public/guides/native/index.html:254 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller " +"passes {ph5}.{ph6}" +msgstr "{ph0}02 · 呼叫方{ph1}{ph2}螢幕座標{ph3}{ph4}磚塊碰撞處理函式傳入 {ph5}。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 1.5625 +#. {ph6}: 500.0 +#. {ph7}: +#: website/public/guides/native/index.html:262 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced " +"bytes decode to {ph5}, {ph6} and a scale value.{ph7}" +msgstr "" +"{ph0}03 · 資料位元組{ph1}{ph2}數值常量{ph3}{ph4}引用的位元組解碼為 {ph5}、{ph6} 和一個縮放係數。{ph7}" + +#: website/public/guides/native/index.html:274 +msgctxt "page:guides/native/index.html" +msgid "" +"REA supplies the instructions, call relationship and bytes. The agent " +"interprets them together." +msgstr "REA提供指令,呼叫關係和位元組。 程式設計助手一起解釋它們。" + +#: website/public/guides/native/index.html:281 +msgctxt "page:guides/native/index.html" +msgid "Ask about the behavior" +msgstr "詢問行為" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:282 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native " +"analysis tool{ph3}, provide the local executable and a question:" +msgstr "{ph0}將 REA 連線到助手{ph1}並{ph2}配置原生分析工具{ph3}後,提供本地可執行檔案和一個問題:" + +#: website/public/guides/native/index.html:293 +msgctxt "page:guides/native/index.html" +msgid "Which analysis tool should I use?" +msgstr "我應該使用哪種分析工具?" + +#: website/public/guides/native/index.html:294 +msgctxt "page:guides/native/index.html" +msgid "REA needs one of these to read native programs:" +msgstr "REA需要其中一個來閱讀原生程式:" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:296 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to " +"install it. On macOS, open Hopper once and choose demo mode or activate a " +"license before your first analysis." +msgstr "" +"{ph0} Hopper {ph1} (macOS或Linux):REA的安裝程式檢測到它或提供安裝它。 " +"在macOS上,開啟一次Hopper,然後選擇演示模式或在第一次分析之前啟用許可證。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:302 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs " +"an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer." +msgstr "" +"{ph0} Ghidra {ph1} " +"(macOS或Linux;在Windows上進行實驗):免費,但需要現有的Ghidra12.1。x安裝和64位JDK21或更高版本。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:307 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration." +msgstr "{ph0} IDA {ph1} (Windows):用於具有MCP註冊的現有IDA設定。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:312 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "See {ph0}Set up native analysis{ph1} for the steps." +msgstr "見 {ph0}設定原生分析{ph1} 為步驟。" + +#. {ph0}: +#: website/public/guides/native/index.html:320 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/guides/native/index.html:324 +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy" +msgstr "複製" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/guides/native/index.html:333 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 找出 DX-Ball 如何計算聲音的左右位置。解釋計算過程,並展示程式碼。{ph3}{ph4}{ph5}" + +#: website/public/guides/native/index.html:341 +msgctxt "page:guides/native/index.html" +msgid "" +"Example prompt. Give your agent the path to your local DX-Ball 1.07 " +"executable. REA doesn't include DX-Ball, so use your own copy, or ask the " +"same kind of question about another small Windows program you have." +msgstr "" +"示例 prompt。把本地 DX-Ball 1.07 可執行檔案的路徑交給助手。REA 不附帶遊戲,需要用自己的副本,也可以換成手裡的其他小型 " +"Windows 程式,問同類問題。" + +#: website/public/guides/native/index.html:348 +msgctxt "page:guides/native/index.html" +msgid "How do I get a file's full path?" +msgstr "如何獲取檔案的完整路徑?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:350 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose " +"{ph2}Copy as path{ph3}. On Windows 10, hold Shift while right-clicking." +msgstr "" +"{ph0} Windows :{ph1} 在檔案資源管理器中,右鍵單擊該檔案並選擇 {ph2}複製為路徑{ph3}. " +"在Windows10上,在右鍵單擊時按住Shift。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/guides/native/index.html:355 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose " +"{ph2}Copy \"…\" as Pathname{ph3}." +msgstr "{ph0} macOS :{ph1} 在Finder中,右鍵單擊檔案,按住選項並選擇 {ph2}複製\"...\"作為路徑名{ph3}." + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:359 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Any system:{ph1} drag the file into a terminal window and its path " +"appears." +msgstr "{ph0}任何系統:{ph1} 將檔案拖到終端視窗中並顯示其路徑。" + +#: website/public/guides/native/index.html:367 +msgctxt "page:guides/native/index.html" +msgid "Read the REA results" +msgstr "閱讀REA結果" + +#: website/public/guides/native/index.html:368 +msgctxt "page:guides/native/index.html" +msgid "Read the input" +msgstr "閱讀輸入" + +#: website/public/guides/native/index.html:377 +msgctxt "page:guides/native/index.html" +msgid "" +"The instructions load an integer argument and convert it for floating-point " +"arithmetic. This is the input absent from the first pseudocode view." +msgstr "指令載入一個整數引數並將其轉換為浮點算術。 這是第一個虛擬碼檢視中沒有的輸入。" + +#: website/public/guides/native/index.html:382 +msgctxt "page:guides/native/index.html" +msgid "Follow the caller" +msgstr "跟隨呼叫方" + +#. {ph0}: 0x14 +#: website/public/guides/native/index.html:391 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"REA identifies the brick-hit caller. Its earlier instructions multiply the " +"tile coordinate by 30; adding {ph0} (20) gives the brick's screen position." +msgstr "REA 找到磚塊碰撞處理函式。它先把磚塊橫座標乘以 30,再加上 {ph0}(20),得到磚塊的螢幕位置。" + +#: website/public/guides/native/index.html:396 +msgctxt "page:guides/native/index.html" +msgid "Read the referenced constants" +msgstr "讀取引用的常量" + +#: website/public/guides/native/index.html:407 +msgctxt "page:guides/native/index.html" +msgid "" +"The arithmetic references these addresses. Reading the bytes supplies the " +"actual values; the instruction order tells the agent how they are used." +msgstr "算術引用這些地址。 讀取位元組提供實際值;指令順序告訴程式設計助手如何使用它們。" + +#: website/public/guides/native/index.html:414 +msgctxt "page:guides/native/index.html" +msgid "Write and check the recovered function" +msgstr "寫入並檢查恢復的函式" + +#: website/public/guides/native/index.html:423 +msgctxt "page:guides/native/index.html" +msgid "" +"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 " +"before integer conversion. The calculation puts the center of the screen at " +"the center of the stereo field." +msgstr "比例為1.0時,螢幕位置0、320和640在整數轉換之前對映到-500、0和500。 計算將螢幕的中心置於立體場的中心。" + +#: website/public/guides/native/index.html:428 +msgctxt "page:guides/native/index.html" +msgid "" +"The agent used REA's findings to write the C. Separate checks compared 3,205" +" inputs against the original x86 function and reproduced all 63 compiled " +"bytes of the complete function." +msgstr "程式設計助手使用REA的發現來編寫C.單獨的檢查將3,205個輸入與原始x86函式進行了比較,並再現了完整函式的所有63個編譯位元組。" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:433 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}" +msgstr "{ph0}檢視完整的調查和組裝到C的比較{ph1}" + +#: website/public/guides/native/index.html:440 +msgctxt "page:guides/native/index.html" +msgid "Try it with your own binary" +msgstr "用你自己的二進位制檔案試試" + +#. {ph0}: +#. {ph1}: +#: website/public/guides/native/index.html:441 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"{ph0}Connect a native analysis provider{ph1}, then give your agent a local " +"executable or library and a feature to investigate. Useful starting " +"questions include “How is this file parsed?” or “Which function handles this" +" menu action?”" +msgstr "" +"{ph0}連線原生分析提供程式{ph1},然後給你的程式設計助手一個本地可執行檔案或庫和一個要調查的函式。 " +"有用的起始問題包括\"如何解析此檔案?\"或\"哪個函式處理此選單操作?”" + +#: website/public/guides/native/index.html:448 +msgctxt "page:guides/native/index.html" +msgid "" +"If you already know a function name or address, you can query it from the " +"terminal. For a configured Ghidra installation:" +msgstr "如果你已經知道函式名稱或地址,則可以從終端查詢它。 對於已配置的Ghidra安裝:" + +#: website/public/guides/native/index.html:454 +msgctxt "page:guides/native/index.html" +msgid "Function analysis" +msgstr "函式分析" + +#. {ph0}: main +#: website/public/guides/native/index.html:467 +#, python-brace-format +msgctxt "page:guides/native/index.html" +msgid "" +"Replace the target path and {ph0} with your own function name or address. " +"Each CLI invocation imports and analyzes the binary, then closes its " +"session. Your agent's MCP queries reuse the imported binary while that " +"session is open." +msgstr "" +"替換目標路徑和 {ph0} 使用你自己的函式名稱或地址。 每個 CLI 呼叫匯入並分析二進位制檔案,然後關閉其會話。 你的程式設計助手 MCP " +"查詢在該會話開啟時重用匯入的二進位制檔案。" + +#: website/public/guides/native/index.html:473 +msgctxt "page:guides/native/index.html" +msgid "" +"Read the pseudocode alongside instructions and references. When a result " +"leaves a call or value unresolved, use that location as the next question." +msgstr "把虛擬碼與指令、引用一起閱讀。結果中尚未解析的呼叫或數值,可以成為下一個調查問題。" + +#: website/public/guides/native/index.html:6 +msgctxt "page:guides/native/index.html" +msgid "Native Binary Analysis — REA" +msgstr "原生二元分析-REA" + +#: website/public/guides/native/index.html:7 +msgctxt "page:guides/native/index.html" +msgid "" +"Recover a native calculation with REA: inspect instructions, follow a " +"caller, read constants and check reconstructed C." +msgstr "使用REA恢復本機計算:檢查指令,遵循呼叫者,讀取常量並檢查重構的C。" + +#: website/public/guides/native/index.html:191 +msgctxt "page:guides/native/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/guides/native/index.html:201 +msgctxt "page:guides/native/index.html" +msgid "Native analysis" +msgstr "機器程式碼程式分析" + +#: website/public/guides/native/index.html:324 +msgctxt "page:guides/native/index.html" +msgid "Copy example prompt" +msgstr "複製示例提示" + +#: website/public/guides/native/index.html:455 +msgctxt "page:guides/native/index.html" +msgid "Copy function analysis" +msgstr "複製函式分析" + +#: website/public/guides/native/index.html:496 +msgctxt "page:guides/native/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/index.html:101 +msgctxt "page:index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#: website/public/index.html:183 website/public/index.html:193 +#: website/public/index.html:191 +msgctxt "page:index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/index.html:184 website/public/index.html:233 +msgctxt "page:index.html" +msgid "Set up REA" +msgstr "安裝與配置 REA" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:195 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Set up REA{ph1}" +msgstr "{ph0}安裝與配置 REA{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:196 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}What is RE?{ph1}" +msgstr "{ph0}什麼是RE?{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:197 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}How REA helps{ph1}" +msgstr "{ph0}REA 如何幫忙{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:198 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Dinosaur game{ph1}" +msgstr "{ph0}恐龍游戲{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:199 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Calculator{ph1}" +msgstr "{ph0}計算器{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:200 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Try REA{ph1}" +msgstr "{ph0}試試REA {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:201 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Go deeper{ph1}" +msgstr "{ph0}更深入{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:202 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Help & feedback{ph1}" +msgstr "{ph0}幫助和反饋{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:203 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Community{ph1}" +msgstr "{ph0}社群{ph1}" + +#: website/public/index.html:212 +msgctxt "page:index.html" +msgid "Reverse engineering, with your coding agent" +msgstr "和程式設計助手一起做逆向工程" + +#. {ph0}:
+#: website/public/index.html:213 +#, python-brace-format +msgctxt "page:index.html" +msgid "Find out how{ph0}software works." +msgstr "弄清楚{ph0}軟體如何工作。" + +#: website/public/index.html:214 +msgctxt "page:index.html" +msgid "" +"REA gives your agent the tools to inspect a program and explain what it " +"does." +msgstr "REA 為程式設計助手提供分析工具,讓它檢查程式並解釋程式的行為。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:223 +#, python-brace-format +msgctxt "page:index.html" +msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}" +msgstr "已經瞭解逆向工程?{ph0}直接看分析指南 →{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:227 +#, python-brace-format +msgctxt "page:index.html" +msgid "Want to go deeper? {ph0}Read the Blog →{ph1}" +msgstr "想深入瞭解?{ph0}閱讀部落格 →{ph1}" + +#: website/public/index.html:234 +msgctxt "page:index.html" +msgid "Copy this into your coding agent:" +msgstr "把這段話複製給程式設計助手:" + +#. {ph0}: +#: website/public/index.html:237 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/index.html:242 website/public/index.html:264 +#: website/public/index.html:479 website/public/index.html:647 +#: website/public/index.html:883 website/public/index.html:1045 +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy" +msgstr "複製" + +#: website/public/index.html:261 +msgctxt "page:index.html" +msgid "Or run this in your terminal:" +msgstr "也可以在終端執行:" + +#: website/public/index.html:273 +msgctxt "page:index.html" +msgid "Approve the setup plan, then restart your agent." +msgstr "確認安裝計劃後,重啟程式設計助手。" + +#: website/public/index.html:288 +msgctxt "page:index.html" +msgid "What is reverse engineering?" +msgstr "什麼是逆向工程?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:289 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Finding out how software works by {ph0}examining the program itself.{ph1}" +msgstr "透過{ph0}檢查程式本身{ph1},弄清軟體如何工作。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:294 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The goal: understand a feature well enough to {ph0}explain it{ph1}, " +"{ph2}change it{ph3} or {ph4}rebuild it.{ph5}" +msgstr "目標是理解一項功能,從而能{ph0}解釋它{ph1}、{ph2}修改它{ph3},或{ph4}重新實現它。{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:312 +#, python-brace-format +msgctxt "page:index.html" +msgid "Before REA · You investigate it {ph0}yourself{ph1}" +msgstr "使用 REA 之前 · 你要{ph0}親自調查{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:321 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}01{ph1} Decode branches" +msgstr "{ph0}01{ph1} 分析分支" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:329 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}02{ph1} Trace calls" +msgstr "{ph0}02{ph1} 追蹤函式呼叫" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:337 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}03{ph1} Recover the rule" +msgstr "{ph0}03{ph1} 還原計算規則" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#: website/public/index.html:352 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}" +msgstr "{ph0}原始 x64 指令節選{ph1} {ph2}{ph3}" + +#: website/public/index.html:391 +msgctxt "page:index.html" +msgid "01 · Which branch?" +msgstr "01 · 走哪個分支?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:392 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are " +"these?”" +msgstr "“{ph0}0x5b?0x5c?{ph1}兩個跳轉去了同一個位置。它們對應哪些運算子?”" + +#: website/public/index.html:396 +msgctxt "page:index.html" +msgid "Look up the command IDs, then label the branch." +msgstr "查詢命令 ID,再標明分支含義。" + +#: website/public/index.html:402 +msgctxt "page:index.html" +msgid "Divide ÷" +msgstr "除÷" + +#: website/public/index.html:406 +msgctxt "page:index.html" +msgid "Multiply ×" +msgstr "乘×" + +#: website/public/index.html:411 +msgctxt "page:index.html" +msgid "02 · What do the calls do?" +msgstr "02 · 這些函式呼叫做什麼?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:412 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which " +"value goes in?{ph1}”" +msgstr "“100 很明確,但函式呼叫只有地址。{ph0}哪個負責除法?傳進去的是哪個值?{ph1}”" + +#: website/public/index.html:417 +msgctxt "page:index.html" +msgid "Inspect the helpers and trace the stored values." +msgstr "檢查輔助函式,追蹤儲存的數值。" + +#: website/public/index.html:427 +msgctxt "page:index.html" +msgid "Divide" +msgstr "除法" + +#: website/public/index.html:432 +msgctxt "page:index.html" +msgid "03 · What is the rule?" +msgstr "03 · 規則是什麼?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:433 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} " +"after +.”" +msgstr "“這個分支乘上了另一個輸入。所以在 + 之後,{ph0}10% 表示 200 的 10%{ph1}。”" + +#: website/public/index.html:437 +msgctxt "page:index.html" +msgid "Name the operands and check both operator paths." +msgstr "確定運算元的含義,並檢查兩條運算路徑。" + +#: website/public/index.html:453 website/public/index.html:381 +msgctxt "page:index.html" +msgid "Illustrative expert reasoning" +msgstr "專家思考過程示意" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:456 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}You decode the instructions, follow the calls and reconstruct the " +"calculation.{ph1}" +msgstr "{ph0}你需要讀懂指令、追蹤呼叫,再還原計算過程。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:464 +#, python-brace-format +msgctxt "page:index.html" +msgid "With REA · You ask {ph0}your agent{ph1}" +msgstr "使用 REA · 你只需問{ph0}程式設計助手{ph1}" + +#: website/public/index.html:468 +msgctxt "page:index.html" +msgid "One prompt." +msgstr "一句話即可。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:469 +#, python-brace-format +msgctxt "page:index.html" +msgid "Ask your agent {ph0}in plain English.{ph1}" +msgstr "{ph0}用日常語言{ph1}告訴助手你的問題。" + +#. {ph0}: +#: website/public/index.html:474 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 計算器" + +#: website/public/index.html:496 +msgctxt "page:index.html" +msgid "Example answer · based on the findings" +msgstr "示例回答 · 根據分析結果" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:499 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"After +, the % button takes {ph0}a percentage of the first number.{ph1}" +msgstr "在 + 之後,% 按鈕計算的是{ph0}第一個數的百分比。{ph1}" + +#: website/public/index.html:511 +msgctxt "page:index.html" +msgid "REA supplies" +msgstr "REA 提供" + +#: website/public/index.html:512 +msgctxt "page:index.html" +msgid "The handler’s instructions, decompiled code and calls." +msgstr "處理函式的指令、反編譯程式碼和呼叫關係。" + +#: website/public/index.html:517 +msgctxt "page:index.html" +msgid "Your agent explains" +msgstr "程式設計助手解釋" + +#: website/public/index.html:518 +msgctxt "page:index.html" +msgid "Which branch applies, what it calculates and how to rebuild it." +msgstr "走哪個分支、怎樣計算,以及如何重新實現。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:525 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Selected assembly from the installed Calculator DLL. The thoughts and reply " +"illustrate the findings. {ph0}Continue with the Calculator example ↓{ph1}" +msgstr "彙編節選自已安裝的計算器 DLL。思考過程和回答用於解釋分析結果。{ph0}繼續看完整的計算器示例 ↓{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:536 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to " +"Calculator and rebuild its % button." +msgstr "{ph0}來試兩個例子。{ph1}先調整遊戲速度,再回到計算器,重新實現 % 按鈕。" + +#: website/public/index.html:542 +msgctxt "page:index.html" +msgid "Example 01 · Chrome’s dinosaur game" +msgstr "示例 01 · Chrome 小恐龍游戲" + +#: website/public/index.html:543 +msgctxt "page:index.html" +msgid "Why does the dinosaur get faster?" +msgstr "為什麼恐龍變得更快?" + +#: website/public/index.html:547 website/public/index.html:785 +msgctxt "page:index.html" +msgid "Goal" +msgstr "目標" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:548 +#, python-brace-format +msgctxt "page:index.html" +msgid "Rebuild the game with {ph0}adjustable speed.{ph1}" +msgstr "重建一個{ph0}速度可調{ph1}的遊戲。" + +#: website/public/index.html:554 website/public/index.html:792 +msgctxt "page:index.html" +msgid "Why reverse engineer it?" +msgstr "為什麼逆向工程?" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:555 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To reproduce its acceleration, we need {ph0}the rule in the running " +"game{ph1}: how fast it starts, how much it increases and when it stops." +msgstr "要復現加速過程,得先找到{ph0}實際執行的遊戲中的規則{ph1}:起始速度是多少、每次增加多少、何時停止加速。" + +#: website/public/index.html:564 +msgctxt "page:index.html" +msgid "Play the reconstruction" +msgstr "試玩重建版" + +#: website/public/index.html:596 +msgctxt "page:index.html" +msgid "Play" +msgstr "開始" + +#: website/public/index.html:599 +msgctxt "page:index.html" +msgid "Jump ↑" +msgstr "跳躍 ↑" + +#: website/public/index.html:600 +msgctxt "page:index.html" +msgid "Restart" +msgstr "重新開始" + +#: website/public/index.html:603 +msgctxt "page:index.html" +msgid "Speed" +msgstr "速度" + +#: website/public/index.html:613 +msgctxt "page:index.html" +msgid "Use the recovered acceleration rule" +msgstr "使用還原的加速規則" + +#: website/public/index.html:617 +msgctxt "page:index.html" +msgid "Original rule: start at 6, then increase toward 13." +msgstr "原版規則:速度從 6 開始,逐漸增加到 13。" + +#: website/public/index.html:620 +msgctxt "page:index.html" +msgid "Move the slider to set your own speed. Space or Jump clears a cactus." +msgstr "拖動滑塊,選擇自己的速度。按空格鍵或“跳躍”越過仙人掌。" + +#: website/public/index.html:625 +msgctxt "page:index.html" +msgid "" +"Enable JavaScript to play the reconstruction. The code and explanation above" +" remain readable." +msgstr "啟用 JavaScript 即可試玩。上面的程式碼和說明無需 JavaScript 也能閱讀。" + +#: website/public/index.html:633 website/public/index.html:863 +msgctxt "page:index.html" +msgid "REA returned" +msgstr "REA 返回" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:634 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}The script actually running in the page.{ph1} The agent reads its " +"update function and speed settings, then uses that rule in a new game." +msgstr "{ph0}頁面實際執行的指令碼。{ph1}助手讀取更新函式和速度設定,再把規則用到新的遊戲中。" + +#. {ph0}: +#: website/public/index.html:642 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 小恐龍游戲" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:656 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get " +"faster? Show the speed rule, then build a small version with an adjustable " +"speed.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA " +"檢查這個小恐龍游戲。它為什麼會越來越快?找出速度規則,再做一個速度可調的小版本。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:665 +#, python-brace-format +msgctxt "page:index.html" +msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}." +msgstr "分析目標:{ph0}wayou 基於 Chromium 製作的瀏覽器版本{ph1}。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:682 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, " +"while speed is below {ph4}13{ph5}." +msgstr "{ph0}起始速度為 6。{ph1}速度低於 {ph4}13{ph5} 時,每次沒有發生碰撞的更新增加 {ph2}0.001{ph3}。" + +#: website/public/index.html:687 +msgctxt "page:index.html" +msgid "Open the speed lab →" +msgstr "開啟速度實驗室 →" + +#: website/public/index.html:693 +msgctxt "page:index.html" +msgid "What each part does" +msgstr "各部分負責什麼" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:695 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its " +"actual code and settings to the agent.{ph5}" +msgstr "{ph0}01 · REA{ph1}{ph2}讀取正在執行的遊戲指令碼{ph3}{ph4}把實際程式碼和設定交給助手。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:702 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use " +"the recovered acceleration in a small game with a speed slider.{ph5}" +msgstr "" +"{ph0}02 · 程式設計助手{ph1}{ph2}重建規則,加入控制{ph3}{ph4}把還原的加速規則用於帶速度滑塊的小遊戲。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:710 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original " +"acceleration, then choose your own pace.{ph5}" +msgstr "{ph0}03 · 你{ph1}{ph2}調整速度,親自試玩{ph3}{ph4}先體驗原版加速,再選擇自己的節奏。{ph5}" + +#: website/public/index.html:721 +msgctxt "page:index.html" +msgid "See the script, checks and how to try the analysis" +msgstr "檢視指令碼、驗證過程和分析步驟" + +#. {ph0}: index.js +#: website/public/index.html:724 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"REA inspected the HTTP browser edition through a local debugging connection " +"and returned the loaded {ph0}, including its source and digest." +msgstr "REA 透過本地除錯連線檢查 HTTP 瀏覽器版本,返回了已載入的 {ph0},包含原始碼和摘要。" + +#: website/public/index.html:737 +msgctxt "page:index.html" +msgid "" +"We called the original game’s update function in a controlled browser check," +" with obstacles and automatic scheduling disabled. After 4,000 updates, " +"speed was 10.0; after 10,000, it was 13.0, rounded to one decimal." +msgstr "" +"我們在受控的瀏覽器檢查中呼叫原版更新函式,禁用了障礙物和自動排程。保留一位小數時,更新 4,000 次後的速度為 10.0,更新 10,000 次後為 " +"13.0。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:743 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The new mini-game keeps that speed rule. Its drawing, jumping and collision " +"code are a small teaching implementation. {ph0}Open the lab{ph1} to see the " +"new code and run the same speed check." +msgstr "新小遊戲保留了這條速度規則。繪圖、跳躍和碰撞程式碼是簡化的教學實現。{ph0}開啟實驗室{ph1},可以檢視新程式碼並執行同樣的速度檢查。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:749 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"To inspect the target yourself, follow the {ph0}browser connection " +"steps{ph1} using {ph2}the dinosaur page{ph3}. Give your agent that page URL " +"and your local debugging endpoint, then copy the prompt above." +msgstr "" +"想親自分析?用{ph2}小恐龍頁面{ph3}跟著{ph0}瀏覽器連線步驟{ph1}操作。把頁面網址和本地除錯地址交給助手,再複製上面的 prompt。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:758 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}" +msgstr "{ph0}分析的速度程式碼{ph1} · {ph2}Chromium Authors · BSD 許可證{ph3}" + +#: website/public/index.html:775 +msgctxt "page:index.html" +msgid "Example 02 · Windows Calculator" +msgstr "示例 02 · Windows 計算器" + +#: website/public/index.html:776 +msgctxt "page:index.html" +msgid "Rebuild Calculator’s % button." +msgstr "重新實現計算器的 % 按鈕。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:786 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Build a small calculator that handles {ph0}both + and × correctly.{ph1}" +msgstr "做一個小計算器,能{ph0}正確處理 + 和 × 兩種情況。{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:793 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the" +" installed app to find which number the percentage is applied to." +msgstr "同一個按鈕,在{ph0}+ 和 × 後採用不同規則。{ph1}我們檢查已安裝的應用,弄清百分比究竟作用於哪個數。" + +#: website/public/index.html:802 +msgctxt "page:index.html" +msgid "Try the calculation" +msgstr "試試計算" + +#: website/public/index.html:846 +msgctxt "page:index.html" +msgid "Reset" +msgstr "重置" + +#: website/public/index.html:854 +msgctxt "page:index.html" +msgid "10% of 200 = 20. Then 200 + 20 = 220." +msgstr "200的10%=20. 則200+20=220。" + +#: website/public/index.html:857 +msgctxt "page:index.html" +msgid "Interactive illustration of the inspected percentage rule." +msgstr "根據實際分析得到的百分比規則製作的互動示例。" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:864 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}One branch divides by 100. The other also multiplies by the first " +"number.{ph1} The agent uses both to recreate the % button." +msgstr "{ph0}一個分支除以 100;另一個還要乘上第一個數。{ph1}助手用這兩條規則重新實現 % 按鈕。" + +#. {ph0}: previous = 200 +#. {ph1}: current = 10 +#: website/public/index.html:872 +#, python-brace-format +msgctxt "page:index.html" +msgid "For this example, {ph0} and {ph1}." +msgstr "對於這個例子, {ph0} 和 {ph1}." + +#. {ph0}: +#: website/public/index.html:878 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % " +"button" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 重建 % 按鈕" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:892 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover " +"the rules after + and ×, then build a small calculator that uses " +"both.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 檢查 Windows 計算器的 % 按鈕。還原 + 和 × " +"後的規則,再做一個同時採用這兩條規則的小計算器。{ph3}{ph4}{ph5}" + +#: website/public/index.html:913 +msgctxt "page:index.html" +msgid "With +" +msgstr "在 + 之後" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 10% of 200 = 20 → 200 + 20 = 220 +#: website/public/index.html:914 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Take 10% of the first number.{ph1}{ph2}" +msgstr "{ph0}取第一個數字的10%。{ph1}{ph2}" + +#: website/public/index.html:920 +msgctxt "page:index.html" +msgid "With ×" +msgstr "在 × 之後" + +#. {ph0}: +#. {ph1}: +#. {ph2}: 200 × 0.1 = 20 +#: website/public/index.html:921 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}" +msgstr "{ph0}把10%變成0.1。{ph1}{ph2}" + +#: website/public/index.html:930 +msgctxt "page:index.html" +msgid "From the installed app to a working % button" +msgstr "從已安裝的應用,到能執行的 % 按鈕" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: 100 +#. {ph6}: +#: website/public/index.html:943 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s " +"code{ph3}{ph4}The function checks the operator and uses the constant " +"{ph5}.{ph6}" +msgstr "" +"{ph0}02 · REA 讀取庫{ph1}{ph2}返回 % 處理函式的程式碼{ph3}{ph4}函式檢查運算子,並使用常量 {ph5}。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:951 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the " +"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and" +" × above.{ph5}" +msgstr "" +"{ph0}03 · 程式設計助手解釋{ph1}{ph2}解釋並復現規則{ph3}{ph4}對照 Microsoft 的原始碼核實分支,再試試上面的 + " +"和 ×。{ph5}" + +#: website/public/index.html:962 +msgctxt "page:index.html" +msgid "See the real code and how the answer was checked" +msgstr "檢視實際程式碼和驗證方式" + +#: website/public/index.html:988 +msgctxt "page:index.html" +msgid "" +"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable " +"summary uses names from Microsoft’s public source to explain the recovered " +"branch." +msgstr "" +"使用 REA 4.1.0 檢查 Windows 計算器 11.2508.4.0(x64)。可讀摘要採用 Microsoft " +"公開原始碼中的名稱,解釋還原的分支。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:993 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · " +"{ph4}Native setup guide{ph5}" +msgstr "{ph0}百分比實現{ph1} · {ph2}Microsoft 測試用例{ph3} · {ph4}原生分析配置指南{ph5}" + +#: website/public/index.html:1012 +msgctxt "page:index.html" +msgid "Your first investigation" +msgstr "第一次調查" + +#: website/public/index.html:1013 +msgctxt "page:index.html" +msgid "Try REA on a small app." +msgstr "用一個小應用試試 REA。" + +#: website/public/index.html:1014 +msgctxt "page:index.html" +msgid "" +"Download our Notes example, trace its CSV export, and check one changed " +"input." +msgstr "下載 Notes 示例,追蹤 CSV 匯出,再修改一個輸入來驗證。" + +#: website/public/index.html:1019 +msgctxt "page:index.html" +msgid "Try the guided example" +msgstr "跟著示例開始" + +#: website/public/index.html:1028 +msgctxt "page:index.html" +msgid "Want to go deeper?" +msgstr "想更深入嗎?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/index.html:1029 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"Tell your agent what you want to understand or build. With REA, you can work" +" together on anything from {ph0}cloning this website{ph1} to " +"{ph2}reconstructing a game from its executable.{ph3}" +msgstr "" +"告訴助手你想弄清什麼,或者想做什麼。有了 REA,你們可以從{ph0}克隆這個網站{ph1},一直做到{ph2}從可執行檔案重建一款遊戲。{ph3}" + +#. {ph0}: +#: website/public/index.html:1040 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 網站" + +#: website/public/index.html:1063 +msgctxt "page:index.html" +msgid "Yes, this one." +msgstr "對,就是這個網站。" + +#. {ph0}: +#: website/public/index.html:1068 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}示例 prompt · 遊戲重建" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/index.html:1082 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. " +"Recover the gameplay logic in C and test it against the " +"original.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 從這個遊戲的可執行檔案重建遊戲。用 C 還原遊戲邏輯,並對照原版測試。{ph3}{ph4}{ph5}" + +#. {ph0}: +#. {ph1}: +#: website/public/index.html:1091 +#, python-brace-format +msgctxt "page:index.html" +msgid "{ph0}See the DX-Ball case study →{ph1}" +msgstr "{ph0}檢視 DX-Ball 案例 →{ph1}" + +#: website/public/index.html:1096 +msgctxt "page:index.html" +msgid "For setup and analysis steps, choose your target:" +msgstr "根據目標選擇配置和分析指南:" + +#: website/public/index.html:1101 +msgctxt "page:index.html" +msgid "Native binaries" +msgstr "原生二進位制" + +#: website/public/index.html:1102 +msgctxt "page:index.html" +msgid "" +"Inspect functions, strings, references and call relationships in executables" +" and libraries." +msgstr "檢查可執行檔案和庫中的函式、字串、引用和函式呼叫關係。" + +#: website/public/index.html:1106 +msgctxt "page:index.html" +msgid "Native analysis guide" +msgstr "原生分析指南" + +#: website/public/index.html:1109 +msgctxt "page:index.html" +msgid "JavaScript & Electron" +msgstr "JavaScript&Electron" + +#: website/public/index.html:1110 +msgctxt "page:index.html" +msgid "" +"Map modules, routes, IPC and native dependencies from an application folder " +"or ASAR archive." +msgstr "從應用目錄或 ASAR 檔案中分析模組、路由、IPC 和原生依賴。" + +#: website/public/index.html:1114 +msgctxt "page:index.html" +msgid "Application workflows" +msgstr "應用分析流程" + +#: website/public/index.html:1117 +msgctxt "page:index.html" +msgid "Browser & runtime activity" +msgstr "瀏覽器與執行時活動" + +#: website/public/index.html:1118 +msgctxt "page:index.html" +msgid "" +"Capture selected browser or process activity, then compare the results " +"across runs." +msgstr "記錄指定的瀏覽器或程序活動,再比較不同執行的結果。" + +#: website/public/index.html:1122 +msgctxt "page:index.html" +msgid "Browser observation guide" +msgstr "瀏覽器觀察指南" + +#: website/public/index.html:1129 +msgctxt "page:index.html" +msgid "Any questions?" +msgstr "有什麼問題嗎?" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1130 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a " +"GitHub issue{ph5} for bugs and feature requests." +msgstr "" +"{ph0}閱讀 FAQ{ph1}、{ph2}在 Discord 和我們聊聊{ph3},或{ph4}提交 GitHub issue{ph5}反饋 bug " +"和功能需求。" + +#: website/public/index.html:1143 website/public/index.html:1149 +msgctxt "page:index.html" +msgid "Join the community" +msgstr "加入社群" + +#: website/public/index.html:1144 +msgctxt "page:index.html" +msgid "" +"Share investigations and get help from other REA users on Discord. Follow " +"REA on X for project updates." +msgstr "在 Discord 分享調查,與其他 REA 使用者交流。關注 REA 的 X 賬號獲取專案更新。" + +#: website/public/index.html:6 +msgctxt "page:index.html" +msgid "REA — Reverse Engineering for Your Coding Agent" +msgstr "REA — 和程式設計助手一起做逆向工程" + +#: website/public/index.html:7 +msgctxt "page:index.html" +msgid "" +"Reverse engineer apps, binaries and browser behavior with your coding agent." +" Follow clear guides and try interactive examples with REA." +msgstr "和程式設計助手一起分析應用、二進位制檔案和瀏覽器行為。跟著清晰的指南,體驗 REA 的互動示例。" + +#: website/public/index.html:242 +msgctxt "page:index.html" +msgid "Copy REA installation prompt" +msgstr "複製REA安裝提示" + +#: website/public/index.html:264 +msgctxt "page:index.html" +msgid "Copy setup command" +msgstr "複製安裝命令" + +#: website/public/index.html:316 +msgctxt "page:index.html" +msgid "Follow the manual Calculator analysis" +msgstr "按照手動計算器分析" + +#: website/public/index.html:479 +msgctxt "page:index.html" +msgid "Copy Calculator percentage question" +msgstr "複製計算器百分比問題" + +#: website/public/index.html:586 +msgctxt "page:index.html" +msgid "" +"Dinosaur mini-game. Use the Jump button or press Space while the game is " +"focused." +msgstr "小恐龍游戲。點選“跳躍”,或在遊戲獲得焦點後按空格鍵。" + +#: website/public/index.html:647 +msgctxt "page:index.html" +msgid "Copy dinosaur analysis prompt" +msgstr "複製恐龍分析提示" + +#: website/public/index.html:803 +msgctxt "page:index.html" +msgid "Choose the calculation" +msgstr "選擇計算" + +#: website/public/index.html:883 +msgctxt "page:index.html" +msgid "Copy Calculator analysis prompt" +msgstr "複製計算器分析提示" + +#: website/public/index.html:1045 +msgctxt "page:index.html" +msgid "Copy website project prompt" +msgstr "複製網站專案提示" + +#: website/public/index.html:1073 +msgctxt "page:index.html" +msgid "Copy game reconstruction prompt" +msgstr "複製遊戲重建提示" + +#: website/public/index.html:1173 +msgctxt "page:index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/showcase/aegis/index.html:100 +msgctxt "page:showcase/aegis/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:182 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android" +msgstr "{ph0}首頁{ph1} / {ph2}案例展示{ph3} /安卓" + +#: website/public/showcase/aegis/index.html:185 +msgctxt "page:showcase/aegis/index.html" +msgid "Case study · Aegis Authenticator" +msgstr "案例研究 · Aegis驗證器" + +#. {ph0}:
+#: website/public/showcase/aegis/index.html:186 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "How does an authenticator{ph0}generate a login code?" +msgstr "身份驗證器如何{ph0}生成登入程式碼?" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/aegis/index.html:187 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A six-digit code changes every 30 seconds. Use REA to find the calculation " +"in an Android APK, then rebuild it with a clock you can control." +msgstr "六位驗證碼每 30 秒變化一次。用 REA 在 Android APK 中找出計算方法,再重建一個可調節時鐘的演示。" + +#: website/public/showcase/aegis/index.html:192 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB" +msgstr "Aegis 3.4.3 · Android · 正式釋出 APK ·6.9MB" + +#: website/public/showcase/aegis/index.html:195 +msgctxt "page:showcase/aegis/index.html" +msgid "View Aegis on GitHub" +msgstr "在GitHub上檢視Aegis" + +#: website/public/showcase/aegis/index.html:201 +msgctxt "page:showcase/aegis/index.html" +msgid "From an APK to a code you can reproduce" +msgstr "從 APK 還原可復現的驗證碼" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:203 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating " +"methods{ph3}{ph4}REA searches the package and traces the code used by the " +"display and copy actions.{ph5}" +msgstr "" +"{ph0}01 · 定位功能{ph1}{ph2}3,077 個類 → 生成方法{ph3}{ph4}REA " +"搜尋包,追蹤顯示和複製驗證碼時使用的程式碼。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:212 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six " +"digits{ph3}{ph4}REA returns the methods and defaults. The agent explains how" +" they fit together.{ph5}" +msgstr "" +"{ph0}02 · 閱讀計算{ph1}{ph2}時間 + 賬戶金鑰 → 六位數字{ph3}{ph4}REA " +"返回方法與預設值,助手解釋它們如何配合。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:220 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the " +"code.{ph3}{ph4}A new browser demo reproduces the rule and checks it against " +"public reference cases.{ph5}" +msgstr "" +"{ph0}03 · 重建並驗證{ph1}{ph2}調整時鐘,檢視驗證碼。{ph3}{ph4}新的瀏覽器演示覆現規則,再用公開對照用例檢查。{ph5}" + +#: website/public/showcase/aegis/index.html:233 +msgctxt "page:showcase/aegis/index.html" +msgid "In this case study" +msgstr "在本個案研究中" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:235 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Ask your agent{ph1}" +msgstr "{ph0}問問你的程式設計助手{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:236 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Try the code generator{ph1}" +msgstr "{ph0}試試程式碼生成器{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:237 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Find the code with REA{ph1}" +msgstr "{ph0}用REA查詢程式碼 {ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:238 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Read the calculation{ph1}" +msgstr "{ph0}閱讀計算{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:239 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Check the reconstruction{ph1}" +msgstr "{ph0}檢查重建{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:240 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Inspect the APK yourself{ph1}" +msgstr "{ph0}親自檢查APK{ph1}" + +#: website/public/showcase/aegis/index.html:245 +msgctxt "page:showcase/aegis/index.html" +msgid "Ask your agent" +msgstr "問問你的程式設計助手" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:246 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app shows a changing login code. We want to find {ph0}what makes it " +"change{ph1} and reproduce that behavior." +msgstr "該應用程式顯示更改的登入程式碼。 我們想找到 {ph0}是什麼讓它改變{ph1} 再現這種行為。" + +#. {ph0}: +#: website/public/showcase/aegis/index.html:252 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/showcase/aegis/index.html:256 +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy" +msgstr "複製" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:276 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"An example prompt for the downloaded APK, with REA's Android analysis " +"configured. {ph0}Get the APK and analysis setup ↓{ph1}" +msgstr "" +"這是用於下載的 APK 的示例 prompt,需要先配置 REA 的 Android 分析後端。{ph0}獲取 APK 和分析配置 ↓{ph1}" + +#: website/public/showcase/aegis/index.html:284 +msgctxt "page:showcase/aegis/index.html" +msgid "Try the code generator" +msgstr "試試程式碼生成器" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:285 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The app groups time into {ph0}30-second blocks.{ph1} It combines the block " +"number with the account key to generate a code. The same key and block " +"produce the same code." +msgstr "應用把時間劃分為{ph0}每塊 30 秒{ph1},再結合時間塊編號和賬戶金鑰生成驗證碼。同樣的金鑰和時間塊,會得到同樣的驗證碼。" + +#: website/public/showcase/aegis/index.html:292 +msgctxt "page:showcase/aegis/index.html" +msgid "Move the clock across 60 seconds" +msgstr "將時鐘移動60秒" + +#: website/public/showcase/aegis/index.html:295 +msgctxt "page:showcase/aegis/index.html" +msgid "Time" +msgstr "時間" + +#: website/public/showcase/aegis/index.html:297 +msgctxt "page:showcase/aegis/index.html" +msgid "seconds" +msgstr "秒數" + +#: website/public/showcase/aegis/index.html:298 +msgctxt "page:showcase/aegis/index.html" +msgid "Our adjustable example clock" +msgstr "我們的可調節示例時鐘" + +#: website/public/showcase/aegis/index.html:301 +msgctxt "page:showcase/aegis/index.html" +msgid "30-second block" +msgstr "30秒區塊" + +#: website/public/showcase/aegis/index.html:303 +#: website/public/showcase/aegis/index.html:630 +msgctxt "page:showcase/aegis/index.html" +msgid "Block" +msgstr "時間塊" + +#. {ph0}: floor(59 / 30) +#. {ph1}:
+#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:304 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}" +msgstr "{ph0}{ph1}{ph2}30-59秒{ph3}" + +#: website/public/showcase/aegis/index.html:312 +msgctxt "page:showcase/aegis/index.html" +msgid "Generated code" +msgstr "生成的驗證碼" + +#: website/public/showcase/aegis/index.html:320 +msgctxt "page:showcase/aegis/index.html" +msgid "Account key + block → six digits" +msgstr "帳戶金鑰+區塊→六位數字" + +#: website/public/showcase/aegis/index.html:326 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time, in seconds" +msgstr "示例時間,以秒為單位" + +#: website/public/showcase/aegis/index.html:341 +#: website/public/showcase/aegis/index.html:641 +msgctxt "page:showcase/aegis/index.html" +msgid "59 seconds" +msgstr "59秒" + +#: website/public/showcase/aegis/index.html:348 +#: website/public/showcase/aegis/index.html:646 +msgctxt "page:showcase/aegis/index.html" +msgid "60 seconds" +msgstr "60秒" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:357 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving " +"within one block leaves the code unchanged." +msgstr "在59秒: {ph0}287082.{ph1} 在60秒: {ph2}359152.{ph3} 在一個塊內移動會使程式碼保持不變。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:364 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements " +"the calculation recovered from the APK." +msgstr "金鑰是固定的,公開的 {ph0}RFC6238測試資料{ph1}. 該演示實現了從APK恢復的計算。" + +#: website/public/showcase/aegis/index.html:371 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The diagram shows the result at 59 seconds. Enable JavaScript to change the " +"clock." +msgstr "該圖顯示了59秒時的結果。 啟用JavaScript以更改時鐘。" + +#: website/public/showcase/aegis/index.html:380 +msgctxt "page:showcase/aegis/index.html" +msgid "Find the code with REA" +msgstr "用REA查詢程式碼" + +#: website/public/showcase/aegis/index.html:383 +msgctxt "page:showcase/aegis/index.html" +msgid "Narrow the APK to three classes" +msgstr "將APK縮小到三個類" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: TotpInfo +#: website/public/showcase/aegis/index.html:408 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0} is the calculation candidate; the other two concern the progress bar " +"and imported accounts. TOTP means a time-based one-time password." +msgstr "{ph0} 是計算邏輯的候選方法;另外兩個涉及進度條和匯入的賬戶。TOTP 指基於時間的一次性密碼。" + +#: website/public/showcase/aegis/index.html:415 +msgctxt "page:showcase/aegis/index.html" +msgid "Connect the generator to the app's display" +msgstr "將生成器連線到應用程式的顯示器" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: EntryHolder.getOtp +#. {ph1}: TotpInfo.getOtp(timestamp) +#: website/public/showcase/aegis/index.html:443 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA identifies the timestamp overload and finds the base method's callers. " +"Inspecting {ph0} then shows the display calling {ph1}." +msgstr "REA 找到接受時間戳的方法過載,並定位基礎方法的呼叫方。繼續檢查 {ph0},就能看到顯示邏輯呼叫了 {ph1}。" + +#. {ph0}: com.beemdevelopment.aegis +#: website/public/showcase/aegis/index.html:451 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Requests show a shortened input path. Result class names omit the common " +"{ph0} prefix." +msgstr "請求顯示縮短的輸入路徑。 結果類名省略常用 {ph0} 字首。" + +#: website/public/showcase/aegis/index.html:458 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the calculation" +msgstr "閱讀計算" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:459 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"REA returns {ph0}the clock conversion, default settings and generating " +"methods.{ph1} The constructors set a 30-second interval and six digits; the " +"timestamp method turns seconds into a block number." +msgstr "" +"REA 返回{ph0}時間轉換、預設設定和生成方法{ph1}。建構函式把間隔設為 30 秒、位數設為 6;接受時間戳的方法將秒數轉換為時間塊編號。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:474 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}01{ph1} Time block" +msgstr "{ph0}01{ph1} 時間塊" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:482 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}02{ph1} Key + block" +msgstr "{ph0}02{ph1} 鍵+塊" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:490 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}03{ph1} Six digits" +msgstr "{ph0}03{ph1} 六位數" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:549 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At" +" 60 seconds, the block becomes 2." +msgstr "{ph0}時間選擇塊。{ph1} 秒30到59都給塊1。 在60秒時,塊變為2。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:555 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}The key matters too.{ph1} The generator combines the account key with " +"the block. An account with a different key can show a different code at the " +"same time." +msgstr "{ph0}金鑰也會影響結果。{ph1} 生成函式把賬戶金鑰和時間塊組合起來。金鑰不同的賬戶,在同一時間也可能顯示不同驗證碼。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:562 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is " +"padded with zeroes when needed, so a code can begin with 0." +msgstr "{ph0}保留六位數字。{ph1} 取除以 1,000,000 的餘數,位數不足時在前面補零,因此驗證碼也可以以 0 開頭。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:569 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Excerpts from several inspected methods, with line wrapping for display. The" +" right panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}" +msgstr "這些節選來自多個檢查過的方法,為便於顯示增加了換行。右側是解釋性摘要。{ph0}Aegis 原始碼採用 GPL-3.0 許可。{ph1}" + +#: website/public/showcase/aegis/index.html:578 +msgctxt "page:showcase/aegis/index.html" +msgid "Inside the generator" +msgstr "驗證碼生成函式內部" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: generateOTP +#. {ph1}: kotlin.ExceptionsKt +#. {ph2}: TotpInfo +#. {ph3}: HOTP +#: website/public/showcase/aegis/index.html:579 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and " +"returns this body; the original source calls the helper {ph3}." +msgstr "" +"釋出的 APK 將 {ph0} 放在 {ph1} 中。REA 從 {ph2} 追蹤呼叫,並返回這個函式體;原始原始碼把輔助函式命名為 {ph3}。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/aegis/index.html:601 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The last hash byte selects a position. Four bytes at that position provide a" +" positive 31-bit number; formatting reduces it to the requested number of " +"digits. The constructor's last argument selects the code-formatting branch " +"introduced by compilation." +msgstr "" +"雜湊的最後一個位元組決定讀取位置。從這個位置讀取四個位元組,得到正的 31 " +"位數,再格式化為指定的位數。建構函式的最後一個引數選擇了編譯過程引入的驗證碼格式化分支。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:608 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}Compare with the matching release source{ph1}." +msgstr "{ph0}與匹配的釋出源進行比較{ph1}." + +#: website/public/showcase/aegis/index.html:618 +msgctxt "page:showcase/aegis/index.html" +msgid "Check the reconstruction" +msgstr "檢查重建" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:619 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"We assembled the selected REA-returned Java methods in a small test program." +" Their output matched an independent reconstruction on {ph0}133 test " +"cases{ph1}, including time-block boundaries and codes beginning with zero." +msgstr "" +"我們將選定的 REA 返回的 Java 方法放進小型測試程式。它們的輸出與獨立重建的實現一致,共驗證 {ph0}133 " +"個測試用例{ph1},包括時間塊邊界和以零開頭的驗證碼。" + +#: website/public/showcase/aegis/index.html:629 +msgctxt "page:showcase/aegis/index.html" +msgid "Example time" +msgstr "示例時間" + +#: website/public/showcase/aegis/index.html:631 +msgctxt "page:showcase/aegis/index.html" +msgid "Six-digit code" +msgstr "六位驗證碼" + +#: website/public/showcase/aegis/index.html:636 +msgctxt "page:showcase/aegis/index.html" +msgid "30 seconds" +msgstr "30秒" + +#: website/public/showcase/aegis/index.html:651 +msgctxt "page:showcase/aegis/index.html" +msgid "1,111,111,109 seconds" +msgstr "1,111,111,109秒" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:658 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The generator also matches the six published SHA-1 reference cases in " +"{ph0}RFC 6238{ph1}. Check the browser implementation against them:" +msgstr "生成函式還符合 {ph0}RFC 6238{ph1} 中釋出的六個 SHA-1 對照用例。可以用這些用例檢查瀏覽器實現:" + +#: website/public/showcase/aegis/index.html:666 +msgctxt "page:showcase/aegis/index.html" +msgid "Run reference checks" +msgstr "執行對照檢查" + +#: website/public/showcase/aegis/index.html:673 +msgctxt "page:showcase/aegis/index.html" +msgid "Read the demo's calculation" +msgstr "閱讀演示的計算" + +#: website/public/showcase/aegis/index.html:677 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"The reference cases use eight digits. The check also verifies their six-" +"digit results." +msgstr "參考案例使用八位數字。 檢查也驗證他們的六位數的結果。" + +#: website/public/showcase/aegis/index.html:686 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Verification runs extracted Java methods and the new demo. The Android APK " +"was inspected statically." +msgstr "驗證執行提取的Java方法和新的演示。 對Android APK進行了靜態檢查。" + +#: website/public/showcase/aegis/index.html:693 +msgctxt "page:showcase/aegis/index.html" +msgid "Inspect the APK yourself" +msgstr "親自檢查APK" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:694 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into " +"the same folder. On Windows, use a Linux environment such as WSL." +msgstr "" +"先在 macOS 或 Linux 上{ph0}設定 REA{ph1},再將這兩個檔案下載到同一資料夾。Windows 上可使用 WSL 等 Linux " +"環境。" + +#. {ph0}: JAVA_HOME +#. {ph1}: PATH +#: website/public/showcase/aegis/index.html:699 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Android analysis needs a full JDK 17 or later. Select it with {ph0} or " +"{ph1}. This case used JDK 21." +msgstr "Android分析需要完整的JDK17或更高版本。 選擇它與 {ph0} 或 {ph1}. 本案例使用了JDK21。" + +#: website/public/showcase/aegis/index.html:715 +msgctxt "page:showcase/aegis/index.html" +msgid "Point REA at the provider file and inspect the APK:" +msgstr "讓 REA 使用分析後端配置檔案,再檢查 APK:" + +#: website/public/showcase/aegis/index.html:718 +msgctxt "page:showcase/aegis/index.html" +msgid "macOS / Linux" +msgstr "macOS/Linux" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: REA_JADX_MCP_JAR +#: website/public/showcase/aegis/index.html:732 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Your agent can continue through REA's CLI using the prompt above. For MCP, " +"add {ph0} to the REA server's environment and reconnect it." +msgstr "助手可以透過 REA CLI 繼續使用上方的 prompt。如果使用 MCP,將 {ph0} 加入 REA 服務的環境配置,再重新連線。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/aegis/index.html:737 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"A next question: {ph0}what happens when an account uses eight digits or a " +"different time interval?{ph1}" +msgstr "下一個問題: {ph0}當帳戶使用八位數字或不同的時間間隔時會發生什麼?{ph1}" + +#: website/public/showcase/aegis/index.html:747 +msgctxt "page:showcase/aegis/index.html" +msgid "Sources" +msgstr "資料來源" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:749 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · " +"{ph4}GPL-3.0 license{ph5}" +msgstr "{ph0}官方Aegis3.4.3釋出{ph1} · {ph2}匹配源提交{ph3} · {ph4}GPL-3.0許可證{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/aegis/index.html:765 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}" +msgstr "{ph0}RFC6238參考案例{ph1} · {ph2}演示測試資料{ph3}" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/aegis/index.html:772 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited" +" to Aegis; the diagram, readable summary and browser reconstruction are new " +"teaching material." +msgstr "使用 REA 6.1.0 於 2026 年 10 月 9 日檢查。反編譯節選歸屬 Aegis;圖示、可讀摘要和瀏覽器重建為新增教學材料。" + +#: website/public/showcase/aegis/index.html:6 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK Reverse Engineering: Login Codes — REA" +msgstr "Aegis APK逆向工程:登入程式碼-REA" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/aegis/index.html:7 +msgctxt "page:showcase/aegis/index.html" +msgid "" +"Inspect the Aegis Android APK with REA, recover its six-digit login-code " +"calculation and try a reconstruction with an adjustable clock." +msgstr "用 REA 檢查 Aegis Android APK,還原六位登入驗證碼的計算,再試玩可調時鐘的重建演示。" + +#: website/public/showcase/aegis/index.html:232 +msgctxt "page:showcase/aegis/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/showcase/aegis/index.html:243 +msgctxt "page:showcase/aegis/index.html" +msgid "Aegis APK case study" +msgstr "Aegis APK案例研究" + +#: website/public/showcase/aegis/index.html:256 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy Aegis example prompt" +msgstr "複製Aegis示例提示" + +#: website/public/showcase/aegis/index.html:469 +msgctxt "page:showcase/aegis/index.html" +msgid "Follow the login-code calculation" +msgstr "按照登入程式碼計算" + +#: website/public/showcase/aegis/index.html:719 +msgctxt "page:showcase/aegis/index.html" +msgid "Copy APK inspection command" +msgstr "複製APK檢查命令" + +#: website/public/showcase/aegis/index.html:795 +msgctxt "page:showcase/aegis/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/showcase/ctf/index.html:99 +msgctxt "page:showcase/ctf/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/ctf/index.html:181 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF" +msgstr "{ph0}首頁{ph1} / {ph2}案例展示{ph3} /CTF" + +#: website/public/showcase/ctf/index.html:184 +msgctxt "page:showcase/ctf/index.html" +msgid "Case study · DownUnderCTF 2023" +msgstr "案例研究·Downunderctf2023" + +#. {ph0}:
+#: website/public/showcase/ctf/index.html:185 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "Find the flag in{ph0}a CTF binary." +msgstr "找到國旗{ph0}一個CTF二進位制檔案。" + +#. {ph0}: Correct! +#: website/public/showcase/ctf/index.html:186 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to inspect a small flag checker, turn its rules into equations and " +"find an input that makes the original program print {ph0}." +msgstr "使用方法 REA 要檢查一個小的flag 檢查器,將其規則轉換為方程,並找到一個使原始程式列印的輸入 {ph0}." + +#: website/public/showcase/ctf/index.html:191 +msgctxt "page:showcase/ctf/index.html" +msgid "masked squares flag checker · Easy · Linux x86-64" +msgstr "蒙面方格旗檢查器 · 容易·Linuxx86-64" + +#: website/public/showcase/ctf/index.html:194 +msgctxt "page:showcase/ctf/index.html" +msgid "View the original challenge" +msgstr "檢視原始挑戰" + +#: website/public/showcase/ctf/index.html:202 +msgctxt "page:showcase/ctf/index.html" +msgid "From a binary to a checked answer" +msgstr "從二進位制到檢查答案" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:204 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA " +"finds the prompt, its references and the code that accepts or rejects an " +"input.{ph5}" +msgstr "" +"{ph0}01 · 找到檢查{ph1}{ph2}字串→檢查函式{ph3}{ph4}REA 查詢提示、其引用以及接受或拒絕輸入的程式碼。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:212 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA " +"returns the instructions and data behind each check. The agent turns them " +"into equations.{ph5}" +msgstr "" +"{ph0}02 · 提取規則{ph1}{ph2}36個字元·26個總和{ph3}{ph4}REA 返回每個檢查後面的指令和資料。 " +"劑將它們轉化為方程。{ph5}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:220 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python" +" script solves the equations. REA captures the original program accepting " +"the result.{ph5}" +msgstr "" +"{ph0}03 · 解決並執行{ph1}{ph2}恢復旗→正確!{ph3}{ph4}一個Python指令碼解決方程. REA " +"捕獲接受結果的原始程式。{ph5}" + +#: website/public/showcase/ctf/index.html:229 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The challenge is by joseph, published in DownUnderCTF's official repository." +msgstr "挑戰是由約瑟夫,發表在DownUnderCTF的官方程式碼儲存庫。" + +#: website/public/showcase/ctf/index.html:237 +msgctxt "page:showcase/ctf/index.html" +msgid "In this case study" +msgstr "在本個案研究中" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:239 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Find the checking code{ph1}" +msgstr "{ph0}查詢檢查程式碼{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:240 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Read one mask{ph1}" +msgstr "{ph0}讀一個面具{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:241 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Assembly to readable code{ph1}" +msgstr "{ph0}彙編到可讀程式碼{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:242 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Solve the equations{ph1}" +msgstr "{ph0}解方程{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:243 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Check the answer{ph1}" +msgstr "{ph0}檢查答案{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:244 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}Try it yourself{ph1}" +msgstr "{ph0}你自己試試吧{ph1}" + +#: website/public/showcase/ctf/index.html:249 +msgctxt "page:showcase/ctf/index.html" +msgid "Find the checking code" +msgstr "查詢檢查程式碼" + +#. {ph0}: Correct! +#. {ph1}: Incorrect! +#: website/public/showcase/ctf/index.html:250 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or " +"{ph1}. Start with a simple request to your agent." +msgstr "講義是一個15KB可執行檔案。 它要求一面旗幟,然後列印 {ph0} 或 {ph1}. 從一個簡單的請求開始給你的程式設計助手。" + +#. {ph0}: +#: website/public/showcase/ctf/index.html:257 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/showcase/ctf/index.html:262 +#: website/public/showcase/ctf/index.html:481 +#: website/public/showcase/ctf/index.html:505 +#: website/public/showcase/ctf/index.html:575 +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy" +msgstr "複製" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/ctf/index.html:271 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. " +"Explain how the checks work, then verify the answer with the original " +"program.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA分析ms_flag_checker並找到標誌。 " +"解釋檢查是如何工作的,然後用原始程式驗證答案。{ph3}{ph4}{ph5}" + +#: website/public/showcase/ctf/index.html:280 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"An example prompt, with the downloaded challenge available locally and a " +"native analysis provider connected." +msgstr "一個示例提示,下載的質詢在本地可用,並連線了原生分析提供程式。" + +#: website/public/showcase/ctf/index.html:286 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the input prompt to its function" +msgstr "按照輸入提示到其函式" + +#: website/public/showcase/ctf/index.html:315 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The reference gives the agent a place to investigate, even though the " +"executable's original function names have been removed." +msgstr "引用為程式設計助手提供了一個調查的地方,即使可執行檔案的原始函式名已被刪除。" + +#: website/public/showcase/ctf/index.html:322 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the checker and its two helpers" +msgstr "閱讀檢查器和它的兩個助手" + +#. {ph0}: 0x18 +#. {ph1}: 0x270 +#: website/public/showcase/ctf/index.html:350 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The first loop copies 36 character codes. The checking loop decodes a mask, " +"sums the selected codes and compares the result with a stored number. Its " +"{ph0}-byte steps across {ph1} bytes give 26 masks." +msgstr "" +"第一個迴圈複製36個字元程式碼。 檢查迴圈解碼掩碼,對所選程式碼求和,並將結果與儲存的數字進行比較。 其 {ph0}-位元組跨步 {ph1} " +"位元組給出26個掩碼。" + +#: website/public/showcase/ctf/index.html:358 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"These are selected results from a fresh REA analysis. The local target path " +"is shortened for display; addresses refer to REA's imported image." +msgstr "這些是來自新鮮REA分析的選擇結果。 本地目標路徑縮短顯示;地址參考REA的匯入影象。" + +#: website/public/showcase/ctf/index.html:366 +msgctxt "page:showcase/ctf/index.html" +msgid "One check reveals one character" +msgstr "一張檢查顯示一個字元" + +#: website/public/showcase/ctf/index.html:367 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The checker arranges the input in a 6×6 grid. A mask chooses which cells " +"contribute to a sum. Its compact encoding uses negative numbers to skip " +"cells and positive numbers to select them." +msgstr "檢查器將輸入排列在6×6網格中。 掩碼選擇哪些單元格對總和做出貢獻。 它的緊湊編碼使用負數跳過單元格和正數來選擇它們。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:387 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "The seventh check selects just one position. {ph0}Open figure{ph1}." +msgstr "第七個檢查只選擇一個位置。 {ph0}開啟圖{ph1}." + +#: website/public/showcase/ctf/index.html:394 +msgctxt "page:showcase/ctf/index.html" +msgid "Read the mask and its target from the binary" +msgstr "從二進位制檔案中讀取掩碼及其目標" + +#. {ph0}: MOVSX +#. {ph1}: eb +#. {ph2}: code[21] = 55 +#. {ph3}: 7 +#: website/public/showcase/ctf/index.html:416 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} " +"means −21. The target is a little-endian integer. Together, these bytes tell" +" the agent that {ph2}, so that character is {ph3}." +msgstr "" +"指示 {ph0} 將掩碼位元組讀取為有符號值。 這就是為什麼 {ph1} 表示-21. 目標是一個小端整數。 這些位元組一起告訴程式設計助手 " +"{ph2},所以該字元是 {ph3}." + +#: website/public/showcase/ctf/index.html:425 +msgctxt "page:showcase/ctf/index.html" +msgid "From instructions to a readable check" +msgstr "從指令到可讀的檢查" + +#: website/public/showcase/ctf/index.html:426 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Select a step to connect the summing helper and its caller to the same rule " +"in C." +msgstr "選擇一個步驟將求和幫助程式及其呼叫者連線到C中的同一規則。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:436 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01{ph1} Start" +msgstr "{ph0}01{ph1} 開始" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:444 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}02{ph1} Select" +msgstr "{ph0}02{ph1} 選擇" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:452 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}03{ph1} Add" +msgstr "{ph0}03{ph1} 新增" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:460 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}04{ph1} Advance" +msgstr "{ph0}04{ph1} 前進,前進" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:468 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}05{ph1} Compare" +msgstr "{ph0}05{ph1} 比較一下" + +#: website/public/showcase/ctf/index.html:480 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · selected original instructions" +msgstr "REA · 選定的原始說明" + +#: website/public/showcase/ctf/index.html:504 +msgctxt "page:showcase/ctf/index.html" +msgid "Readable C · one-check summary" +msgstr "可讀的C · 一檢查摘要" + +#. {ph0}: +#. {ph1}: +#. {ph2}: ECX +#: website/public/showcase/ctf/index.html:533 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum." +msgstr "{ph0}01 · 從零開始。{ph1} {ph2} 持有執行總和。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:537 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a " +"nonzero value includes it." +msgstr "{ph0}02 · 檢查掩碼單元格。{ph1} 零值跳過字元;非零值包括它。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:541 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset " +"is added to the sum." +msgstr "{ph0}03 · 新增字元程式碼。{ph1} 輸入在相同偏移量處的整數被新增到總和中。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/ctf/index.html:545 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes " +"per integer and visits six rows of six cells." +msgstr "{ph0}04 · 移動到下一個單元格。{ph1} 原始迴圈每個整數前進四個位元組,並訪問六個單元格的六行。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: EAX +#. {ph3}: Incorrect! +#: website/public/showcase/ctf/index.html:550 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum " +"in {ph2}. A mismatch jumps to {ph3}." +msgstr "{ph0}05 · 與儲存的目標進行比較。{ph1} 呼叫方在 {ph2}. 不匹配跳轉到 {ph3}." + +#: website/public/showcase/ctf/index.html:557 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The instructions come from the summing helper and its caller. The C is an " +"explanatory summary with descriptive names and a flattened 36-cell loop." +msgstr "指令來自求和助手及其呼叫者。 C是一個具有描述性名稱和扁平36個單元格迴圈的解釋性摘要。" + +#: website/public/showcase/ctf/index.html:565 +msgctxt "page:showcase/ctf/index.html" +msgid "Solve the 26 equations" +msgstr "求解26個方程" + +#: website/public/showcase/ctf/index.html:566 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Most masks select several cells. For example, the first check adds 16 " +"character codes and requires a total of 1441. The overlapping selections " +"give equations that a small Python script can solve together." +msgstr "" +"大多數掩碼選擇幾個單元格。 例如,第一次檢查新增了16個字元程式碼,總共需要1441個。 重疊的選擇給出了一個小的Python指令碼可以一起求解的方程。" + +#: website/public/showcase/ctf/index.html:574 +msgctxt "page:showcase/ctf/index.html" +msgid "Python · solver excerpt" +msgstr "Python · 求解器摘錄" + +#. {ph0}: DUCTF{…} +#: website/public/showcase/ctf/index.html:602 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Z3 is a solver that finds values satisfying these equations. This excerpt " +"uses the extracted checks and assumes a {ph0} flag with letters, digits, " +"underscores and braces. The complete download includes all 26 masks and " +"targets." +msgstr "" +"Z3是一個求解器,可以找到滿足這些方程的值。 此摘錄使用提取的檢查,並假定 {ph0} 用字母,數字,下劃線和大括號標記。 " +"完整的下載包括所有26個面具和目標。" + +#: website/public/showcase/ctf/index.html:608 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the complete solver" +msgstr "下載完整的求解器" + +#: website/public/showcase/ctf/index.html:614 +msgctxt "page:showcase/ctf/index.html" +msgid "Check the answer with the original program" +msgstr "用原始程式檢查答案" + +#. {ph0}: z +#. {ph1}: y +#: website/public/showcase/ctf/index.html:615 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"REA's process capture records the original executable accepting the solved " +"flag. Changing one selected character from {ph0} to {ph1} makes the first " +"sum 1440 instead of 1441, and the program rejects it." +msgstr "" +"REA的程序捕獲記錄接受已解決標誌的原始可執行檔案。 更改一個選定的字元 {ph0} 到 {ph1} 使第一和1440而不是1441,並且程式拒絕它。" + +#: website/public/showcase/ctf/index.html:625 +msgctxt "page:showcase/ctf/index.html" +msgid "Input" +msgstr "輸入" + +#: website/public/showcase/ctf/index.html:626 +msgctxt "page:showcase/ctf/index.html" +msgid "Observed output" +msgstr "觀察到的輸出" + +#: website/public/showcase/ctf/index.html:627 +msgctxt "page:showcase/ctf/index.html" +msgid "Exit code" +msgstr "退出程式碼" + +#: website/public/showcase/ctf/index.html:632 +msgctxt "page:showcase/ctf/index.html" +msgid "Solver's flag" +msgstr "解算者之旗" + +#: website/public/showcase/ctf/index.html:637 +msgctxt "page:showcase/ctf/index.html" +msgid "One character changed" +msgstr "一個角色改變了" + +#: website/public/showcase/ctf/index.html:645 +msgctxt "page:showcase/ctf/index.html" +msgid "Show the recovered flag and captured output" +msgstr "顯示恢復的標誌和捕獲的輸出" + +#: website/public/showcase/ctf/index.html:648 +msgctxt "page:showcase/ctf/index.html" +msgid "REA · original program output" +msgstr "REA · 原始程式輸出" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy flag" +msgstr "複製標誌" + +#: website/public/showcase/ctf/index.html:661 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The recovered value also matches the flag in the organizers' published " +"challenge metadata, checked after solving the binary." +msgstr "恢復的值還與組織者釋出的挑戰後設資料中的標誌相匹配,在解決二進位制後檢查。" + +#: website/public/showcase/ctf/index.html:667 +msgctxt "page:showcase/ctf/index.html" +msgid "Source, target identity and analysis details" +msgstr "來源、目標身份和分析詳細資訊" + +#: website/public/showcase/ctf/index.html:668 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 " +"with Ghidra 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248" +" bytes." +msgstr "" +"在2026年10月8日使用REA4.1.0和Ghidra12.1.4在Linux x64上進行新的分析和兩個過程捕獲。 " +"二進位制檔案是一個剝離的x86-64ELF,15,248位元組。" + +#: website/public/showcase/ctf/index.html:679 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The string references, functions and constants were inspected before reading" +" the organizers' source or solution. The Python solver and the diagram were " +"built from those REA results." +msgstr "在閱讀組織者的原始碼或解決方案之前,對字串引用,函式和常量進行了檢查。 Python求解器和圖表是根據REA結果構建的。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/ctf/index.html:684 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and " +"flag{ph3} · {ph4}REA evidence notes{ph5}" +msgstr "{ph0}與主辦方來源比較{ph1} · {ph2}挑戰後設資料和標誌{ph3} · {ph4} REA證據說明{ph5}" + +#: website/public/showcase/ctf/index.html:704 +msgctxt "page:showcase/ctf/index.html" +msgid "Try it yourself" +msgstr "你自己試試吧" + +#: website/public/showcase/ctf/index.html:705 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Download the original challenge and the solver into one folder. Use the " +"prompt above to investigate with your agent, or run the included script." +msgstr "將原始挑戰和求解器下載到一個資料夾中。 使用上面的提示與你的程式設計助手進行調查,或執行包含的指令碼。" + +#: website/public/showcase/ctf/index.html:721 +msgctxt "page:showcase/ctf/index.html" +msgid "Terminal · solve and run" +msgstr "終端 · 解決和執行" + +#. {ph0}: z3-solver +#: website/public/showcase/ctf/index.html:738 +#, python-brace-format +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The script prints a candidate flag; paste it at the program's prompt. " +"Solving needs Python and {ph0}. Running the original executable needs Linux " +"x86-64." +msgstr "指令碼列印候選標誌;將其貼上到程式的提示符處。 解決需要Python和 {ph0}. 執行原始可執行檔案需要Linux x86-64。" + +#: website/public/showcase/ctf/index.html:743 +msgctxt "page:showcase/ctf/index.html" +msgid "Set up REA with your coding agent" +msgstr "設定REA與你的程式設計助手" + +#: website/public/showcase/ctf/index.html:6 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA" +msgstr "CTF逆向工程:DownUnderCTFflag 檢查器-REA" + +#: website/public/showcase/ctf/index.html:7 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"Use REA to solve DownUnderCTF's masked squares flag checker. Find the " +"checking functions, extract the masks and compare a recovered flag with the " +"original program." +msgstr "使用REA來解決DownUnderCTF的掩碼方塊flag 檢查器。 找到檢查函式,提取掩碼並將恢復的標誌與原始程式進行比較。" + +#: website/public/showcase/ctf/index.html:236 +msgctxt "page:showcase/ctf/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/showcase/ctf/index.html:247 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF flag-checker case study" +msgstr "CTFflag 檢查個案研究" + +#: website/public/showcase/ctf/index.html:262 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF example prompt" +msgstr "複製CTF示例提示" + +#: website/public/showcase/ctf/index.html:373 +msgctxt "page:showcase/ctf/index.html" +msgid "CTF mask equation; scroll horizontally on smaller screens" +msgstr "CTF掩碼方程;在較小的螢幕上水平滾動" + +#: website/public/showcase/ctf/index.html:379 +msgctxt "page:showcase/ctf/index.html" +msgid "" +"The seventh mask skips 21 cells, selects position 21, then skips 14. Only " +"that cell contributes to the sum. Its required character code is 55, which " +"means the character is 7." +msgstr "第七個掩碼跳過21個單元格,選擇位置21,然後跳過14。 只有該單元格貢獻總和。 它所需的字元程式碼是55,這意味著字元是7。" + +#: website/public/showcase/ctf/index.html:431 +msgctxt "page:showcase/ctf/index.html" +msgid "Follow the CTF check" +msgstr "遵循CTF檢查" + +#: website/public/showcase/ctf/index.html:481 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF assembly" +msgstr "複製CTF裝配" + +#: website/public/showcase/ctf/index.html:505 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy readable CTF check" +msgstr "複製可讀CTF檢查" + +#: website/public/showcase/ctf/index.html:575 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver excerpt" +msgstr "複製CTF解算器摘錄" + +#: website/public/showcase/ctf/index.html:649 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy recovered flag" +msgstr "複製恢復標誌" + +#: website/public/showcase/ctf/index.html:722 +msgctxt "page:showcase/ctf/index.html" +msgid "Copy CTF solver commands" +msgstr "複製CTF求解器命令" + +#: website/public/showcase/ctf/index.html:764 +msgctxt "page:showcase/ctf/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/showcase/dx-ball/index.html:99 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:181 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball" +msgstr "{ph0}首頁{ph1} / {ph2}案例展示{ph3} / DX-Ball" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:184 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Case study · DX-Ball 1.07" +msgstr "案例 · DX-Ball 1.07" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}:
+#: website/public/showcase/dx-ball/index.html:185 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Rebuilding DX-Ball{ph0}from its executable." +msgstr "從可執行檔案{ph0}重建 DX-Ball。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:186 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The goal is a maintainable C version of the 1996 Windows game. REA helps the" +" agent inspect the original, one function at a time." +msgstr "目標是為這款 1996 年的 Windows 遊戲重建一份可維護的 C 程式碼。REA 幫助程式設計助手逐個分析原版函式。" + +#: website/public/showcase/dx-ball/index.html:190 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Windows i386 · C · REA" +msgstr "Windows i386 · C · REA" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:207 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"One function, from executable to checked C. REA supplies the instructions, " +"callers and data reads; the reconstruction project implements and tests the " +"result. {ph0}Open figure{ph1}" +msgstr "" +"從可執行檔案中的一個函式,到經過驗證的 C 程式碼:REA 提供指令、呼叫方和讀取的資料,重建專案據此實現並測試函式。{ph0}檢視大圖{ph1}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:218 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In this case study" +msgstr "本案例內容" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:220 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}The project{ph1}" +msgstr "{ph0}專案進度{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:221 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Sound pan{ph1}" +msgstr "{ph0}聲像計算{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:222 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Checking the result{ph1}" +msgstr "{ph0}檢查結果{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:223 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Continue the work{ph1}" +msgstr "{ph0}繼續工作{ph1}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:231 +msgctxt "page:showcase/dx-ball/index.html" +msgid "maintained C functions" +msgstr "個可維護的 C 函式" + +#: website/public/showcase/dx-ball/index.html:235 +msgctxt "page:showcase/dx-ball/index.html" +msgid "comparisons with original code" +msgstr "與原始程式碼的比較" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:239 +msgctxt "page:showcase/dx-ball/index.html" +msgid "functions with matching compiled bytes" +msgstr "個編譯後位元組匹配的函式" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:242 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test " +"coverage{ph3}" +msgstr "專案進度截至 2026 年 10 月 7 日。{ph0}進度記錄{ph1} · {ph2}測試覆蓋情況{ph3}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:254 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The project so far" +msgstr "當前進度" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:255 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered code covers board and resource handling, brick hits, " +"animations, particles and bonus production. Current builds provide " +"inspection utilities and an analysis library. Work on the playable game " +"continues with ball and paddle physics, power-up handling and Windows " +"integration." +msgstr "" +"目前已還原關卡與資源處理、磚塊碰撞、動畫、粒子和獎勵生成。當前構建提供檢查工具與分析庫。可玩的遊戲版本還在開發,後續工作包括球和擋板的物理邏輯、道具處理及" +" Windows 整合。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:265 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Finding the sound-pan calculation" +msgstr "找出聲音的左右位置如何計算" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:266 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"When a brick is hit, its horizontal position is passed to the sound code. " +"The investigation needed to recover how that screen coordinate becomes a " +"left/right panning value." +msgstr "磚塊被擊中時,它的橫座標會傳給聲音處理程式碼。這次調查要找出:螢幕座標如何轉換為聲音的左右聲像值?" + +#. {ph0}: +#: website/public/showcase/dx-ball/index.html:273 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/showcase/dx-ball/index.html:277 +#: website/public/showcase/dx-ball/index.html:468 +#: website/public/showcase/dx-ball/index.html:489 +#: website/public/showcase/dx-ball/index.html:560 +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy" +msgstr "複製" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/dx-ball/index.html:286 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. " +"Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 找出 DX-Ball 如何計算聲音的左右位置。解釋計算過程,並展示程式碼。{ph3}{ph4}{ph5}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:294 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"An example prompt for your coding agent, with the local executable " +"available. The investigation below shows the REA queries and evidence behind" +" the answer." +msgstr "把本地可執行檔案交給程式設計助手,再使用這個示例 prompt。下面展示助手為回答問題發起的 REA 查詢,以及得到的證據。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:299 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The agent used REA to inspect the function, follow its brick-hit caller and " +"read the constants from the executable. Those results supplied the input and" +" arithmetic needed to write the C function below." +msgstr "助手用 REA 檢查函式、追蹤呼叫它的磚塊碰撞函式,再從可執行檔案中讀取常量。這些結果確定了輸入和計算步驟,才有了下面的 C 函式。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: 0x406400 +#. {ph1}: FUN_00406400(void) +#. {ph2}: __ftol() +#: website/public/showcase/dx-ball/index.html:305 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The first function result for {ph0} included pseudocode declaring {ph1} and " +"calling {ph2}. Its instruction view showed a stack input and floating-point " +"operations. That discrepancy gave the agent a concrete reason to keep " +"investigating." +msgstr "" +"REA 最初返回的 {ph0} 虛擬碼宣告瞭 {ph1},並呼叫 {ph2}。但指令中還有來自棧的輸入和浮點運算。這個差異提示助手:還需要繼續查。" + +#: website/public/showcase/dx-ball/index.html:313 +msgctxt "page:showcase/dx-ball/index.html" +msgid "The first decompiler view" +msgstr "最初的反編譯結果" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:326 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The output shows a conversion call. Reading the instructions below reveals " +"the input and the calculation feeding that call." +msgstr "結果裡能看到一次轉換呼叫。繼續閱讀下面的指令,就能找出輸入,以及傳入這個呼叫前的計算。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:332 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Three questions answered through REA" +msgstr "用 REA 回答三個問題" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:335 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Recover the missing input" +msgstr "找回缺失的輸入" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: [EBP+8] +#: website/public/showcase/dx-ball/index.html:352 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The function result includes instructions alongside pseudocode and callers. " +"Here, {ph0} exposes the integer input missing from the decompiler view." +msgstr "函式結果同時提供虛擬碼、指令和呼叫方。這裡的 {ph0} 顯示了反編譯結果中缺失的整數輸入。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:359 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the caller to understand the input" +msgstr "追蹤呼叫方,理解輸入含義" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: tile_x +#. {ph1}: 20 + 30 × tile_x +#: website/public/showcase/dx-ball/index.html:376 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"REA identified this caller in the first result. Its preceding instructions " +"scale {ph0} by 30; adding 20 gives the brick's screen coordinate, {ph1}." +msgstr "REA 在第一次結果中就給出了這個呼叫方。呼叫前的指令將 {ph0} 乘以 30,再加上 20,得到磚塊的螢幕座標 {ph1}。" + +#: website/public/showcase/dx-ball/index.html:383 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Read the values behind the memory addresses" +msgstr "讀取記憶體地址後面的值" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:404 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The returned bytes establish the two arithmetic constants and initial pan " +"scale. The agent now has the values needed for the C expression." +msgstr "返回的位元組確定了兩個運算常量,以及聲像縮放係數的初始值。助手由此得到編寫 C 表示式所需的數值。" + +#: website/public/showcase/dx-ball/index.html:412 +msgctxt "page:showcase/dx-ball/index.html" +msgid "From REA's findings to C" +msgstr "從 REA 分析結果到 C 程式碼" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:413 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow the five steps below. Each selection highlights the original " +"instructions and the C lines they informed." +msgstr "下面分五步展示計算。點選每一步,原始指令和對應的 C 程式碼行會同時高亮。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:423 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}01{ph1} Input" +msgstr "{ph0}01{ph1} 輸入" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:431 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}02{ph1} Multiply" +msgstr "{ph0}02{ph1} 乘以" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:439 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}03{ph1} Subtract" +msgstr "{ph0}03{ph1} 減去" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:447 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}04{ph1} Scale" +msgstr "{ph0}04{ph1} 縮放" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:455 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}05{ph1} Return" +msgstr "{ph0}05{ph1} 返回" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:467 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Original x86 · excerpt" +msgstr "原始 x86 · 節選" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:488 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Reconstructed C" +msgstr "重建的 C 程式碼" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: [EBP+8] +#. {ph3}: FILD +#. {ph4}: x +#: website/public/showcase/dx-ball/index.html:515 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result" +" reads {ph2} and uses {ph3} to load the integer. Following its caller " +"through REA establishes the screen-coordinate meaning of the C parameter " +"{ph4}." +msgstr "" +"{ph0}01 · 讀取輸入。{ph1} REA 返回的指令讀取 {ph2},再透過 {ph3} 載入這個整數。用 REA 追蹤呼叫方,就能確定 C " +"引數 {ph4} 表示螢幕座標。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x420068 +#. {ph4}: read_bytes +#. {ph5}: 1.5625 +#: website/public/showcase/dx-ball/index.html:522 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The " +"bytes returned by REA's {ph4} decode to {ph5}; the C uses the same constant." +msgstr "" +"{ph0}02 · 乘以 1.5625。{ph1} {ph2} 讀取 {ph3} 處的雙精度浮點數。REA 的 {ph4} 返回的位元組解碼後是 " +"{ph5},C 程式碼使用相同常量。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: FSUB +#. {ph3}: 0x420070 +#. {ph4}: 500.0 +#. {ph5}: 320 +#: website/public/showcase/dx-ball/index.html:528 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte " +"result decodes to {ph4}, shifting the calculation's center to screen " +"coordinate {ph5}." +msgstr "" +"{ph0}03 · 減去 500.0。{ph1} {ph2} 讀取 {ph3} 處的雙精度浮點數。REA 返回的位元組解碼後是 " +"{ph4},讓計算的中心對應螢幕座標 {ph5}。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: FMUL +#. {ph3}: 0x4210a0 +#. {ph4}: dxball_pan_scale +#. {ph5}: 1.0 +#: website/public/showcase/dx-ball/index.html:534 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That " +"global is named {ph4} in the maintained source. REA's second byte read " +"establishes its initial value of {ph5}." +msgstr "" +"{ph0}04 · 乘以儲存的縮放係數。{ph1} 第二條 {ph2} 讀取 {ph3}。這個全域性變數在重建原始碼中名為 {ph4}。REA " +"的第二次位元組讀取確認它的初始值是 {ph5}。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: 0x406430 +#. {ph3}: __ftol +#. {ph4}: DxBallInt +#: website/public/showcase/dx-ball/index.html:541 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, " +"identified in REA's callee results. The C casts the result to {ph4}; " +"original-x86 comparisons check the returned value." +msgstr "" +"{ph0}05 · 返回整數。{ph1} {ph2} 處的呼叫進入 {ph3},REA 返回的被呼叫函式資訊確認了這一點。C 程式碼把結果轉換為 " +"{ph4},再與原始 x86 函式比較,驗證返回值。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:550 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The assembly excerpt selects the input, arithmetic and return instructions. " +"The full listing below also includes the intervening stores and function " +"setup and cleanup." +msgstr "這段彙編節選包含輸入、運算和返回指令。下面的完整列表還保留了中間的儲存操作,以及函式開頭和結尾的處理。" + +#: website/public/showcase/dx-ball/index.html:556 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Full assembly and supporting evidence" +msgstr "完整彙編與相關證據" + +#: website/public/showcase/dx-ball/index.html:559 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · 0x406400–0x40643e" +msgstr "REA結果 · 0x406400–0x40643e" + +#: website/public/showcase/dx-ball/index.html:593 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the caller supplies" +msgstr "呼叫方傳入什麼" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: 0x411f40 +#: website/public/showcase/dx-ball/index.html:594 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, " +"then pushes it before the call:" +msgstr "{ph0} 處的磚塊碰撞函式把格子座標乘以 30,再加上 20,然後在呼叫前將結果壓棧:" + +#: website/public/showcase/dx-ball/index.html:608 +msgctxt "page:showcase/dx-ball/index.html" +msgid "What the data reads establish" +msgstr "讀取資料確認了什麼" + +#: website/public/showcase/dx-ball/index.html:611 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte reads, decoded as little-endian doubles" +msgstr "REA 讀取的位元組,按小端雙精度浮點數解碼" + +#: website/public/showcase/dx-ball/index.html:616 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Address" +msgstr "地址" + +#: website/public/showcase/dx-ball/index.html:617 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Value" +msgstr "數值" + +#: website/public/showcase/dx-ball/index.html:618 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Used for" +msgstr "用於" + +#: website/public/showcase/dx-ball/index.html:625 +msgctxt "page:showcase/dx-ball/index.html" +msgid "First multiplication" +msgstr "第一次乘法" + +#: website/public/showcase/dx-ball/index.html:630 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Subtraction" +msgstr "減法" + +#. {ph0}: 1.0 +#: website/public/showcase/dx-ball/index.html:634 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0} initially" +msgstr "{ph0} 最初" + +#: website/public/showcase/dx-ball/index.html:635 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Stored pan scale" +msgstr "儲存的聲像縮放係數" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:640 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked " +"investigation notes retain the Evidence IDs." +msgstr "使用 REA 4.1.0 記錄,分析目標為透過雜湊確定的 DX-Ball 1.07 檔案。連結的調查筆記保留了 Evidence ID。" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:645 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence " +"references{ph3}" +msgstr "{ph0}重建原始碼{ph1} · {ph2}調查筆記與證據引用{ph3}" + +#: website/public/showcase/dx-ball/index.html:659 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Checking the recovered function" +msgstr "驗證還原的函式" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:660 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The recovered function passes two checks: its return values match the " +"original, and its compiled bytes match the executable." +msgstr "還原的函式透過了兩項檢查:返回值與原版一致,編譯後的位元組與原始可執行檔案一致。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:666 +msgctxt "page:showcase/dx-ball/index.html" +msgid "3,205 behavior cases" +msgstr "3,205 個行為測試用例" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:667 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The tests execute the original x86 function and compare its return value " +"with the maintained C. They cover every integer position from 0 to 640 at " +"five pan scales: 0, 0.5, 1, 20 and −1." +msgstr "" +"測試執行原始 x86 函式,將返回值與重建的 C 函式比較。測試覆蓋 0 到 640 的所有整數位置,並分別使用五個聲像縮放係數:0、0.5、1、20 " +"和 −1。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:675 +msgctxt "page:showcase/dx-ball/index.html" +msgid "63 matching bytes" +msgstr "63 位元組完全匹配" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:676 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay " +"matches the complete function after applying the reviewed relocations and " +"checking the referenced constants." +msgstr "C 函式使用指定的 VC4.0 工具鏈編譯。應用經過檢查的重定位,並核對引用的常量後,編譯結果與原始函式的全部位元組一致。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:684 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 " +"at the center and 500 at the right edge. The next part of the audio work is " +"integrating that value with the game's sound backend." +msgstr "縮放係數為 1 時,計算在螢幕左邊緣返回 −500,中心返回 0,右邊緣返回 500。接下來要將這個值接入遊戲的聲音後端。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/dx-ball/index.html:690 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "{ph0}Read the compiler replay details{ph1}" +msgstr "{ph0}閱讀編譯器重播詳細資訊{ph1}" + +#: website/public/showcase/dx-ball/index.html:699 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Continue the investigation" +msgstr "繼續調查" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:700 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"The same approach is being used for particle updates, explosion queues and " +"bonus generation: inspect the relevant functions, recover their state and " +"dependencies, then compare the implementation with the original." +msgstr "粒子更新、爆炸佇列和獎勵生成也使用同樣的方法:檢查相關函式,還原狀態與依賴,再把實現和原版比較。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:706 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"To inspect the sound-pan function yourself, follow the DX-Ball project's " +"setup instructions and supply its matching original target. Then run:" +msgstr "如果你也想分析這個聲像函式,先按 DX-Ball 專案的說明配置環境,並準備匹配的原始檔案。然後執行:" + +#: website/public/showcase/dx-ball/index.html:713 +msgctxt "page:showcase/dx-ball/index.html" +msgid "In the DX-Ball checkout" +msgstr "在 DX-Ball 儲存庫目錄中" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:727 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local " +"setup.{ph3}" +msgstr "{ph0}DX-Ball 儲存庫{ph1}{ph2}當前原始碼、進度和本地配置。{ph3}" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:732 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the " +"same approach with your own binary.{ph3}" +msgstr "{ph0}REA 分析流程{ph1}{ph2}追蹤這段計算,再用同樣方法分析自己的二進位制檔案。{ph3}" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/dx-ball/index.html:739 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into " +"state, queues and pixel writes.{ph3}" +msgstr "{ph0}粒子與獎勵生成{ph1}{ph2}進一步分析狀態、佇列和畫素寫入。{ph3}" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:6 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball Reverse Engineering: Sound Panning — REA" +msgstr "DX-Ball 逆向工程:聲像計算 — REA" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:7 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"Follow a DX-Ball reconstruction from binary analysis through REA to " +"maintained C, original-x86 tests and matching compiled function bytes." +msgstr "" +"檢視 DX-Ball 的重建過程:用 REA 分析二進位制檔案,編寫可維護的 C 程式碼,再透過原始 x86 行為測試和編譯位元組匹配驗證。" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:193 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DX-Ball sound-pan investigation; scroll horizontally on smaller screens" +msgstr "DX-Ball 聲像計算調查;小螢幕可橫向滾動" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:199 +msgctxt "page:showcase/dx-ball/index.html" +msgid "" +"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller " +"supplies 20 plus 30 times tile_x. Instructions load x, multiply by 1.5625, " +"subtract 500.0, apply pan_scale and return an integer. The maintained C is " +"checked independently against the original x86 in 3,205 cases and by VC4.0 " +"compiler replay matching 63 bytes." +msgstr "" +"用 REA 檢查 DXBALL.EXE 中的函式 0x00406400。磚塊碰撞呼叫方傳入 20 + 30 × tile_x。指令載入 x,乘以 " +"1.5625,減去 500.0,再乘以 pan_scale,最後返回整數。重建的 C 程式碼透過 3,205 個用例與原始 x86 函式比較,並用 " +"VC4.0 編譯結果匹配全部 63 位元組。" + +#: website/public/showcase/dx-ball/index.html:217 +msgctxt "page:showcase/dx-ball/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/showcase/dx-ball/index.html:226 +msgctxt "page:showcase/dx-ball/index.html" +msgid "DX-Ball reconstruction case study" +msgstr "DX-Ball重建案例研究" + +#: website/public/showcase/dx-ball/index.html:277 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy example prompt" +msgstr "複製示例提示" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:418 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Follow the sound-pan calculation" +msgstr "追蹤聲像計算" + +#: website/public/showcase/dx-ball/index.html:468 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy original assembly excerpt" +msgstr "複製原始彙編摘錄" + +#: website/public/showcase/dx-ball/index.html:489 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy sound-pan function" +msgstr "複製聲像函式" + +# Reviewed for clear terminology and preserved evidence. +#: website/public/showcase/dx-ball/index.html:560 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy complete sound-pan assembly" +msgstr "複製完整聲像計算彙編" + +#: website/public/showcase/dx-ball/index.html:714 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Copy DX-Ball analysis command" +msgstr "複製DX-Ball分析命令" + +#: website/public/showcase/dx-ball/index.html:772 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/showcase/index.html:99 +msgctxt "page:showcase/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/index.html:181 +#, python-brace-format +msgctxt "page:showcase/index.html" +msgid "{ph0}Home{ph1} / Showcases" +msgstr "{ph0}首頁{ph1} /陳列櫃" + +#: website/public/showcase/index.html:182 +msgctxt "page:showcase/index.html" +msgid "REA case studies." +msgstr "REA 實際案例。" + +#: website/public/showcase/index.html:183 +msgctxt "page:showcase/index.html" +msgid "" +"Android, games, Electron and a CTF challenge, with code, figures and checked" +" results." +msgstr "安卓,遊戲,Electron和CTF挑戰,與程式碼,數字和檢查結果。" + +#: website/public/showcase/index.html:190 +msgctxt "page:showcase/index.html" +msgid "Android · APK analysis" +msgstr "Android · APK 分析" + +#: website/public/showcase/index.html:192 +msgctxt "page:showcase/index.html" +msgid "How an authenticator generates a login code" +msgstr "驗證器如何生成登入驗證碼" + +#: website/public/showcase/index.html:193 +msgctxt "page:showcase/index.html" +msgid "" +"Find Aegis's six-digit code calculation in its released APK. Trace the " +"generating methods with REA, then move a demo clock to see why the code " +"changes every 30 seconds." +msgstr "在其釋出的APK中找到Aegis的六位數程式碼計算。 使用REA跟蹤生成方法,然後移動演示時鐘以檢視程式碼每30秒更改一次的原因。" + +#: website/public/showcase/index.html:204 +msgctxt "page:showcase/index.html" +msgid "Read the Android case study" +msgstr "閱讀Android案例研究" + +#: website/public/showcase/index.html:208 +msgctxt "page:showcase/index.html" +msgid "CTF · Native analysis" +msgstr "CTF · 原生分析" + +#: website/public/showcase/index.html:210 +msgctxt "page:showcase/index.html" +msgid "Solve a CTF flag checker" +msgstr "分析 CTF flag 檢查器" + +#: website/public/showcase/index.html:211 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect an easy DownUnderCTF challenge with REA. Find its checking " +"functions, turn masks and sums into equations, then verify the solved flag " +"with the original program." +msgstr "使用REA檢查一個簡單的DownUnderCTF挑戰。 找到它的檢查函式,將掩碼和和轉換為方程,然後用原始程式驗證已求解的標誌。" + +#: website/public/showcase/index.html:222 +msgctxt "page:showcase/index.html" +msgid "Read the CTF case study" +msgstr "閱讀CTF案例研究" + +#: website/public/showcase/index.html:226 +msgctxt "page:showcase/index.html" +msgid "Native · Reconstruction" +msgstr "原生程式 · 重建" + +#: website/public/showcase/index.html:228 +msgctxt "page:showcase/index.html" +msgid "DX-Ball's sound-pan calculation" +msgstr "DX-Ball 的聲像計算" + +#: website/public/showcase/index.html:229 +msgctxt "page:showcase/index.html" +msgid "" +"Recover a sound-pan calculation from a 1996 Windows game. REA's " +"instructions, caller references and numeric constants lead to a small C " +"function, checked against the original behavior and all 63 compiled bytes." +msgstr "" +"從1996年的Windows遊戲中恢復左/右聲音位置的計算。 " +"REA的指令,呼叫者引用和數字常量導致一個小的C函式,對照原始行為和所有63個編譯位元組進行檢查。" + +#: website/public/showcase/index.html:241 +msgctxt "page:showcase/index.html" +msgid "Read the DX-Ball case study" +msgstr "閱讀DX-Ball案例研究" + +#: website/public/showcase/index.html:245 +msgctxt "page:showcase/index.html" +msgid "Electron · Feature tracing" +msgstr "Electron · 功能追蹤" + +#: website/public/showcase/index.html:247 +msgctxt "page:showcase/index.html" +msgid "How Notion copies text and HTML" +msgstr "Notion 如何複製文字和 HTML" + +#: website/public/showcase/index.html:248 +msgctxt "page:showcase/index.html" +msgid "" +"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC" +" wrappers to the system clipboard, then see how a small HTML marker keeps " +"rich block data connected to a copy." +msgstr "" +"透過跟蹤面向頁面的API Notion包裝好了 JavaScript. " +"跟隨它的IPC包裝到系統剪貼簿,然後看看一個小的HTML標記如何保持豐富的塊資料連線到複製。" + +#: website/public/showcase/index.html:259 +msgctxt "page:showcase/index.html" +msgid "Read the Notion case study" +msgstr "閱讀Notion案例研究" + +#: website/public/showcase/index.html:263 +msgctxt "page:showcase/index.html" +msgid "PC-98 DOS · Reconstruction" +msgstr "PC-98 DOS · 重建" + +#: website/public/showcase/index.html:265 +msgctxt "page:showcase/index.html" +msgid "How TH04 aims a ring of bullets" +msgstr "TH04 如何把環形彈幕對準玩家" + +#: website/public/showcase/index.html:266 +msgctxt "page:showcase/index.html" +msgid "" +"Inspect the original 16-bit angle helper with REA. Match its multiply, " +"divide and coordinate operations to readable C++, then see how they produce " +"a ring aimed at the player." +msgstr "用REA檢查原始的16位角度助手。 將其乘法,除法和座標操作匹配到可讀的C++,然後看看它們如何產生一個針對玩家的環形彈幕。" + +#: website/public/showcase/index.html:277 +msgctxt "page:showcase/index.html" +msgid "Read the TH04 case study" +msgstr "閱讀TH04案例研究" + +#: website/public/showcase/index.html:282 +msgctxt "page:showcase/index.html" +msgid "Step-by-step guides" +msgstr "循序漸進指南" + +#: website/public/showcase/index.html:283 +msgctxt "page:showcase/index.html" +msgid "" +"The guides walk through a native calculation, an Electron export and a " +"browser request. Each starts with a prompt and a concrete target." +msgstr "本指南介紹了本機計算、Electron匯出和瀏覽器請求。 每個都以提示和具體目標開始。" + +#: website/public/showcase/index.html:287 +msgctxt "page:showcase/index.html" +msgid "Read the guides" +msgstr "閱讀指南" + +#: website/public/showcase/index.html:6 +msgctxt "page:showcase/index.html" +msgid "Reverse Engineering Case Studies — REA" +msgstr "逆向工程案例研究-REA" + +#: website/public/showcase/index.html:7 +msgctxt "page:showcase/index.html" +msgid "" +"Follow REA investigations through code, figures and demos: an Android " +"authenticator, DX-Ball, Notion, TH04 and a DownUnderCTF flag checker." +msgstr "" +"跟我來 REA 透過程式碼、數字和演示進行調查:Android身份驗證器, DX-Ball, Notion, TH04 " +"和一個DownUnderCTFflag 檢查器。" + +#: website/public/showcase/index.html:304 +msgctxt "page:showcase/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/showcase/notion/index.html:99 +msgctxt "page:showcase/notion/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:181 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion" +msgstr "{ph0}首頁{ph1} / {ph2}案例展示{ph3} / Notion" + +#: website/public/showcase/notion/index.html:184 +msgctxt "page:showcase/notion/index.html" +msgid "Case study · Electron" +msgstr "個案研究*Electron" + +#. {ph0}:
+#: website/public/showcase/notion/index.html:185 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "How Notion copies{ph0}text and HTML." +msgstr "如何 Notion 複製{ph0}文字和HTML。" + +#: website/public/showcase/notion/index.html:186 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Trace a clipboard call from Notion's page API, through the preload and main " +"process, to Electron's clipboard writer." +msgstr "跟蹤剪貼簿呼叫從Notion的頁面API,透過預載入和主程序,到Electron的剪貼簿編寫器。" + +#: website/public/showcase/notion/index.html:190 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Desktop 7.6.1 · JavaScript · REA" +msgstr "Notion桌面7.6.1·JavaScript*REA" + +#: website/public/showcase/notion/index.html:194 +msgctxt "page:showcase/notion/index.html" +msgid "The bridge inside Notion's desktop package" +msgstr "Notion 桌面包中的橋接程式碼" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:196 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a " +"callable method.{ph6}" +msgstr "{ph0}01 · 面向頁面的API{ph1} {ph2}{ph3}{ph4} {ph5}預載入公開了一個可呼叫的方法。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcRenderer.invoke +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:203 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the " +"channel and arguments.{ph6}" +msgstr "{ph0}02 · 預載入包裝器{ph1} {ph2}{ph3}{ph4} {ph5}包裝器傳送通道和引數。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: ipcMain.handle +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:210 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks" +" which page sent it.{ph6}" +msgstr "{ph0}03 · 主程序處理程式{ph1} {ph2}{ph3}{ph4} {ph5}接收器檢查哪個頁面傳送它。{ph6}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: clipboard.write(data) +#. {ph4}: +#. {ph5}: +#. {ph6}: +#: website/public/showcase/notion/index.html:217 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the " +"supplied text and HTML.{ph6}" +msgstr "{ph0}04 · 系統剪貼簿{ph1} {ph2}{ph3}{ph4} {ph5}Electron 寫入提供的文字和HTML。{ph6}" + +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:225 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "One channel joins the two sides: {ph0}" +msgstr "一個通道連線雙方: {ph0}" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:229 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The packaged code uses the same channel in the preload and main process. " +"Resolving the wrappers reveals the Electron calls behind those names." +msgstr "預載入指令碼和主程序使用同一個通道。解析包裝函式後,就能看出這些名稱背後實際呼叫的 Electron 函式。" + +#: website/public/showcase/notion/index.html:238 +msgctxt "page:showcase/notion/index.html" +msgid "In this case study" +msgstr "在本個案研究中" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:240 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Follow the clipboard bridge{ph1}" +msgstr "{ph0}跟隨剪貼簿橋{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:241 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}Keeping a block's structure{ph1}" +msgstr "{ph0}保留內容塊的結構{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/notion/index.html:242 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}More examples and sources{ph1}" +msgstr "{ph0}更多示例和來源{ph1}" + +#: website/public/showcase/notion/index.html:247 +msgctxt "page:showcase/notion/index.html" +msgid "Where does the copy operation go?" +msgstr "複製操作去哪裡?" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: clipboard.write +#: website/public/showcase/notion/index.html:248 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The page sees a method called {ph0}. Its implementation in the preload is a " +"wrapper. The useful question is what that wrapper sends, and which code " +"receives it." +msgstr "頁面可以呼叫名為 {ph0} 的方法。它在預載入指令碼中的實現是一個包裝函式。關鍵問題是:它傳送了什麼,又由哪段程式碼接收?" + +#. {ph0}: +#: website/public/showcase/notion/index.html:255 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/showcase/notion/index.html:259 +#: website/public/showcase/notion/index.html:332 +#: website/public/showcase/notion/index.html:361 +#: website/public/showcase/notion/index.html:392 +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy" +msgstr "複製" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/notion/index.html:268 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the " +"system clipboard. Show the code at each step.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA跟蹤Notion如何將文字和HTML複製到系統剪貼簿。 在每個步驟顯示程式碼。{ph3}{ph4}{ph5}" + +#: website/public/showcase/notion/index.html:276 +msgctxt "page:showcase/notion/index.html" +msgid "" +"An example prompt with Notion's local application package available to your " +"coding agent." +msgstr "一個示例提示與Notion的本地應用程式包可供你的程式設計助手." + +#: website/public/showcase/notion/index.html:281 +msgctxt "page:showcase/notion/index.html" +msgid "REA finds where to start reading" +msgstr "REA查詢從哪裡開始閱讀" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:282 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Analyzing the tab preload with REA locates the API exposed to the page and " +"the call that sends an IPC request. Both findings come with source ranges in" +" the minified bundle:" +msgstr "用 REA 分析標籤頁的預載入指令碼,可以找到暴露給頁面的 API,以及傳送 IPC 請求的呼叫。兩個結果都給出了在壓縮程式碼中的位置:" + +#: website/public/showcase/notion/index.html:288 +msgctxt "page:showcase/notion/index.html" +msgid "REA findings → two places to open" +msgstr "REA 分析結果 → 兩個原始碼位置" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: analyze_javascript_application +#: website/public/showcase/notion/index.html:303 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded " +"with REA 4.1.0. Positions use the original bundle's line and zero-based " +"column." +msgstr "" +"這是新一次 {ph0} 分析結果中的部分欄位,來自 Notion 標籤頁的預載入指令碼,使用 REA 4.1.0 " +"記錄。位置對應原始壓縮包中的行號和從零開始的列號。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: invokerInMain +#. {ph1}: notion:clipboard:write +#: website/public/showcase/notion/index.html:310 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The agent opens those locations, finds the clipboard member in the assembled" +" API, and reads {ph0}. Its call site supplies {ph1}. That name gives the " +"agent something precise to look for in the main bundle. The four excerpts " +"below show the route it connects." +msgstr "" +"助手開啟這些位置,在組裝的 API 中找到剪貼簿成員,再讀取 {ph0}。呼叫處傳入 " +"{ph1},讓助手知道要在主程序程式碼中搜尋哪個名稱。下面四段程式碼展示這條呼叫鏈。" + +#: website/public/showcase/notion/index.html:319 +msgctxt "page:showcase/notion/index.html" +msgid "Four short pieces of code" +msgstr "四段簡短程式碼" + +#: website/public/showcase/notion/index.html:320 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Simplified from the packaged JavaScript, with readable variable names. " +"Unrelated members are omitted." +msgstr "從打包的JavaScript簡化,具有可讀的變數名稱。 不相關的成員被省略。" + +#: website/public/showcase/notion/index.html:326 +msgctxt "page:showcase/notion/index.html" +msgid "Start at the API exposed to the page" +msgstr "從公開到頁面的API開始" + +#. {ph0}: invokerInMain +#: website/public/showcase/notion/index.html:348 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"This member supplies the channel name. The implementation of {ph0} tells us " +"how the request leaves the page's process." +msgstr "此成員提供通道名稱。 的實施 {ph0} 告訴我們請求如何離開頁面的程序。" + +#: website/public/showcase/notion/index.html:355 +msgctxt "page:showcase/notion/index.html" +msgid "Resolve the preload's wrapper" +msgstr "解析預載入的包裝器" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: notion:clipboard:write +#: website/public/showcase/notion/index.html:378 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The returned function forwards the arguments through Electron's request-and-" +"response IPC. We can now look for {ph0} on the main-process side." +msgstr "返回的函式透過 Electron 的請求/響應 IPC 轉發引數。接下來可以在主程序中查詢 {ph0}。" + +#: website/public/showcase/notion/index.html:386 +msgctxt "page:showcase/notion/index.html" +msgid "Check how the receiver is registered" +msgstr "檢查接收器是如何註冊的" + +#. {ph0}: addListener +#. {ph1}: ipcMain.handle +#: website/public/showcase/notion/index.html:407 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The main process uses another wrapper. Its {ph0} method registers an {ph1} " +"receiver for that channel." +msgstr "主程序使用另一個包裝器。 其 {ph0} 方法註冊一個 {ph1} 那個頻道的接收器。" + +#: website/public/showcase/notion/index.html:414 +msgctxt "page:showcase/notion/index.html" +msgid "Find the write and its sender check" +msgstr "查詢寫入及其發件人檢查" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:437 +msgctxt "page:showcase/notion/index.html" +msgid "" +"This is the destination. After checking the sender, the handler passes the " +"supplied data to Electron's clipboard API. The channel and the two resolved " +"wrappers connect the exposed method to this call." +msgstr "" +"這就是呼叫的終點。處理函式檢查傳送方後,把收到的資料交給 Electron 的剪貼簿 " +"API。通道名和兩個解析後的包裝函式,把暴露給頁面的方法連線到了這裡。" + +#: website/public/showcase/notion/index.html:448 +msgctxt "page:showcase/notion/index.html" +msgid "How does a copied block keep its structure?" +msgstr "複製的塊如何保持其結構?" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: electronApi.clipboard.write +#: website/public/showcase/notion/index.html:449 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's web editor sends text and HTML through {ph0}. It keeps the block " +"data locally and puts an ID in the copied HTML to connect them." +msgstr "" +"Notion 的網頁編輯器透過 {ph0} 傳送文字和 HTML。它在本地保留內容塊資料,再在複製的 HTML 中放入一個 ID,將二者關聯起來。" + +#: website/public/showcase/notion/index.html:455 +msgctxt "page:showcase/notion/index.html" +msgid "HTML links to saved block data" +msgstr "儲存的塊資料的HTML連結" + +#: website/public/showcase/notion/index.html:479 +msgctxt "page:showcase/notion/index.html" +msgid "Read the HTML ID" +msgstr "讀取HTML ID" + +#: website/public/showcase/notion/index.html:480 +msgctxt "page:showcase/notion/index.html" +msgid "Find the same local ID" +msgstr "查詢相同的本地ID" + +#: website/public/showcase/notion/index.html:481 +msgctxt "page:showcase/notion/index.html" +msgid "Restore Notion block data" +msgstr "恢復Notion塊資料" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:483 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Illustrative text and ID. The recorded module test restores the block data " +"when IDs match; a stale entry returns only text and HTML." +msgstr "文字和 ID 為示意值。已記錄的模組測試顯示:ID 匹配時可以取回內容塊資料;條目失效時只返回文字和 HTML。" + +#: website/public/showcase/notion/index.html:489 +msgctxt "page:showcase/notion/index.html" +msgid "" +"On paste, Notion looks for the HTML ID and checks it against the saved copy." +" Matching IDs restore the block data." +msgstr "在貼上時,Notion查詢HTML ID並根據儲存的複製進行檢查。 匹配的Id恢復所述塊資料。" + +#: website/public/showcase/notion/index.html:493 +msgctxt "page:showcase/notion/index.html" +msgid "Clipboard format recorded from web assets cached on July 13, 2026." +msgstr "從2026年7月13日快取的web資產中記錄的剪貼簿格式。" + +#: website/public/showcase/notion/index.html:499 +msgctxt "page:showcase/notion/index.html" +msgid "More examples and sources" +msgstr "更多示例和來源" + +#: website/public/showcase/notion/index.html:501 +msgctxt "page:showcase/notion/index.html" +msgid "Another example: Markdown tables" +msgstr "另一個例子:Markdown 表格" + +#: website/public/showcase/notion/index.html:502 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion parses Markdown into block data. This example shows how a table " +"becomes header and data rows." +msgstr "Notion將Markdown解析為塊資料。 此示例顯示錶如何成為標題和資料行。" + +#: website/public/showcase/notion/index.html:507 +msgctxt "page:showcase/notion/index.html" +msgid "A table through Notion's Markdown parser" +msgstr "透過Notion的Markdown解析器的表格" + +#: website/public/showcase/notion/index.html:528 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Recorded output from an extracted Markdown parser. The table becomes rows " +"and cells." +msgstr "從提取的Markdown解析器記錄輸出。 表變為行和單元格。" + +#: website/public/showcase/notion/index.html:535 +msgctxt "page:showcase/notion/index.html" +msgid "Another path: the offline SQLite connection" +msgstr "另一條路徑:離線SQLite連線" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: getSqliteMeta +#: website/public/showcase/notion/index.html:536 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"Notion's renderer requests {ph0} through IPC. The main process creates a " +"message channel and gives one port to the renderer and the other to a SQLite" +" utility process. Subsequent statement batches and results travel over that " +"port." +msgstr "" +"Notion 的渲染程序透過 IPC 請求 {ph0}。主程序建立訊息通道,把一個埠交給渲染程序,另一個交給 SQLite " +"工具程序。後續的語句批次和結果直接透過這個埠傳輸。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:542 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Following this handoff explains where the database work runs, and why " +"tracing only the initial IPC request misses the later conversation." +msgstr "追蹤這次交接,就能知道資料庫操作在哪個程序執行,也能解釋為什麼只跟蹤最初的 IPC 請求會漏掉後續通訊。" + +#: website/public/showcase/notion/index.html:549 +msgctxt "page:showcase/notion/index.html" +msgid "Sources and how to read the excerpts" +msgstr "資料來源及如何閱讀摘錄" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: app.asar +#. {ph1}: main/index.js +#. {ph2}: isNotionWebContents +#: website/public/showcase/notion/index.html:550 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab " +"preload and {ph1}. The excerpts expand minified variable names and omit " +"unrelated code; the sender-check helper is shown with its underlying {ph2} " +"call." +msgstr "" +"剪貼簿橋接程式碼來自 Notion Desktop 7.6.1 的 {ph0},包括標籤頁預載入指令碼和 " +"{ph1}。節選中展開了壓縮後的變數名,並省略無關程式碼;傳送方檢查輔助函式展示了底層的 {ph2} 呼叫。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 747001 +#. {ph1}: 58169 +#. {ph2}: 736810 +#. {ph3}: 422457 +#: website/public/showcase/notion/index.html:558 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The virtual clipboard and Markdown examples come from web assets cached on " +"July 13, 2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets" +" have their own version. Saved probes executed extracted modules and small " +"harnesses; their outputs describe those probes rather than a captured " +"desktop UI session." +msgstr "" +"虛擬剪貼簿和 Markdown 示例來自 2026 年 7 月 13 日快取的網頁資源,包括 {ph0}、{ph1}、{ph2} 和 {ph3} " +"模組。這些資源有獨立版本。儲存的測試執行提取出的模組和小型測試程式;輸出反映的是這些測試,沒有記錄桌面 UI 操作。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:566 +msgctxt "page:showcase/notion/index.html" +msgid "" +"The REA result shown here is a focused analysis of the saved tab preload, " +"recorded with the published REA 4.1.0 package. It locates the API and invoke" +" operation. The clipboard member and matching receiver are connected by " +"reading their wrapper implementations in the package." +msgstr "" +"這裡的 REA 結果是對儲存的標籤頁預載入指令碼進行的專項分析,使用已釋出的 REA 4.1.0 記錄。它定位了 API " +"和呼叫操作。讀取包中的包裝函式實現後,就能把剪貼簿成員與匹配的接收方連線起來。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 422457 +#: website/public/showcase/notion/index.html:573 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"The Markdown example uses parser module {ph0}. Saved module tests show that " +"both page and chat filters preserve this table. The paste/import, structured" +" Markdown and AI/chat parsers have separate entry points and intermediate " +"formats." +msgstr "" +"Markdown 示例使用解析器模組 {ph0}。儲存的模組測試顯示,頁面和聊天過濾器都會保留這張表格。貼上/匯入、結構化標記和 " +"AI/聊天解析器各自有不同入口與中間格式。" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:581 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron " +"application's export feature.{ph3}" +msgstr "{ph0} JavaScript應用指南{ph1}{ph2}遵循一個小的Electron應用程式的匯出功能。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/notion/index.html:588 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "" +"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked" +" C function.{ph3}" +msgstr "{ph0}DX-Ball 重建工程{ph1}{ph2}按照原生說明檢查c函式。{ph3}" + +#: website/public/showcase/notion/index.html:6 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron Reverse Engineering: Clipboard — REA" +msgstr "Notion Electron逆向工程:Clipboard-REA" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/notion/index.html:7 +msgctxt "page:showcase/notion/index.html" +msgid "" +"Follow Notion's clipboard API through Electron's preload, IPC wrappers and " +"main process, with short code excerpts and a look at its rich clipboard " +"format." +msgstr "" +"追蹤 Notion 的剪貼簿 API,經過 Electron 預載入指令碼、IPC " +"包裝函式和主程序。透過簡短程式碼節選瞭解呼叫鏈,再檢視富文字剪貼簿格式。" + +#: website/public/showcase/notion/index.html:237 +msgctxt "page:showcase/notion/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/showcase/notion/index.html:245 +msgctxt "page:showcase/notion/index.html" +msgid "Notion Electron case study" +msgstr "Notion Electron案例研究" + +#: website/public/showcase/notion/index.html:259 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion analysis prompt" +msgstr "複製Notion分析提示" + +#: website/public/showcase/notion/index.html:332 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion preload excerpt" +msgstr "複製Notion預載入摘錄" + +#: website/public/showcase/notion/index.html:361 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion invoke wrapper excerpt" +msgstr "複製 Notion 呼叫包裝摘錄" + +#: website/public/showcase/notion/index.html:392 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion handler wrapper excerpt" +msgstr "複製Notion處理程式包裝器摘錄" + +#: website/public/showcase/notion/index.html:420 +msgctxt "page:showcase/notion/index.html" +msgid "Copy Notion clipboard receiver excerpt" +msgstr "複製Notion剪貼簿接收器摘錄" + +#: website/public/showcase/notion/index.html:475 +msgctxt "page:showcase/notion/index.html" +msgid "Restoring rich clipboard data on paste" +msgstr "在貼上上還原豐富的剪貼簿資料" + +#: website/public/showcase/notion/index.html:618 +msgctxt "page:showcase/notion/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/showcase/th04/index.html:99 +msgctxt "page:showcase/th04/index.html" +msgid "Skip to content" +msgstr "跳轉到內容" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:181 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04" +msgstr "{ph0}首頁{ph1} / {ph2}案例展示{ph3} / TH04" + +#: website/public/showcase/th04/index.html:184 +msgctxt "page:showcase/th04/index.html" +msgid "Case study · Touhou 4: Lotus Land Story" +msgstr "個案研究·東方4:蓮花地故事" + +#. {ph0}:
+#: website/public/showcase/th04/index.html:185 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Reconstructing TH04's{ph0}bullet patterns." +msgstr "重建TH04{ph0}子彈圖案。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:186 +msgctxt "page:showcase/th04/index.html" +msgid "" +"A ring of bullets starts with a short angle calculation. Use REA to inspect " +"the original DOS function, then follow its instructions into readable C++." +msgstr "一圈彈幕從一段簡短的角度計算開始。用 REA 檢查原始 DOS 函式,再把指令對應到可讀的 C++ 程式碼。" + +#: website/public/showcase/th04/index.html:191 +msgctxt "page:showcase/th04/index.html" +msgid "PC-98 · 16-bit DOS · C++ and assembly" +msgstr "PC-98·16位DOS · C++和彙編" + +#: website/public/showcase/th04/index.html:192 +msgctxt "page:showcase/th04/index.html" +msgid "View the TH04 reconstruction" +msgstr "檢視TH04重建" + +#: website/public/showcase/th04/index.html:198 +msgctxt "page:showcase/th04/index.html" +msgid "From original instructions to checked source" +msgstr "從原始指令到經過驗證的原始碼" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:200 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and " +"its bullet-angle helper.{ph5}" +msgstr "{ph0}01 · 原創遊戲{ph1}{ph2}主要。EXE檔案{ph3}{ph4}該 PC-98 可執行檔案及其子彈角助手。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:207 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + " +"references{ph3}{ph4}Verify the loaded DOS code and read the angle " +"calculation from the executable.{ph5}" +msgstr "" +"{ph0}02 · 用 REA 檢查{ph1}{ph2}指令 + 引用{ph3}{ph4}驗證載入的 DOS " +"程式碼,再從可執行檔案中讀取角度計算。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:215 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each " +"operation to the maintained reconstruction.{ph5}" +msgstr "" +"{ph0}03 · 閱讀 C++{ph1}{ph2}等分 → 瞄準 → 旋轉{ph3}{ph4}把每個操作對應到維護中的重建原始碼。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:222 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded " +"compiler checks cover the bullet-generation code that contains this " +"helper.{ph5}" +msgstr "" +"{ph0}04 · 驗證原始碼{ph1}{ph2}2,139 " +"位元組匹配{ph3}{ph4}已記錄的編譯器檢查覆蓋了包含這個輔助函式的彈幕生成程式碼。{ph5}" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:231 +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA returns the original code and its analysis evidence. The TH04 project " +"supplies the maintained source and compiler checks." +msgstr "REA 返回原始程式碼和分析證據。TH04 專案提供維護中的原始碼,以及編譯器檢查結果。" + +#: website/public/showcase/th04/index.html:239 +msgctxt "page:showcase/th04/index.html" +msgid "In this case study" +msgstr "在本個案研究中" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:241 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The bullet ring{ph1}" +msgstr "{ph0}子彈環{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:242 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}What REA returns{ph1}" +msgstr "{ph0}REA 返回什麼{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:243 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Assembly to C++{ph1}" +msgstr "{ph0}彙編到C++{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:244 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Checking the source{ph1}" +msgstr "{ph0}檢查來源{ph1}" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:245 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}The full project{ph1}" +msgstr "{ph0}完整專案{ph1}" + +#: website/public/showcase/th04/index.html:250 +msgctxt "page:showcase/th04/index.html" +msgid "How a ring aims at the player" +msgstr "環形彈幕如何瞄準玩家" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:251 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Elly's attack requests an aimed ring with an initial count of 16. One helper" +" calculates the direction of each bullet. The same ring can face a fixed " +"direction or turn toward the player." +msgstr "Elly 的攻擊請求一個初始數量為 16 的自機狙環形彈幕。輔助函式計算每顆子彈的方向。同一圈彈幕既可以朝向固定方向,也可以轉向玩家。" + +#. {ph0}: +#: website/public/showcase/th04/index.html:258 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent" +msgstr "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}你的程式設計助手" + +#: website/public/showcase/th04/index.html:263 +#: website/public/showcase/th04/index.html:319 +#: website/public/showcase/th04/index.html:496 +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy" +msgstr "複製" + +#. {ph0}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#: website/public/showcase/th04/index.html:272 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims " +"it at the player. Explain the calculation and show the code.{ph3}{ph4}{ph5}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA查詢TH04如何建立一個子彈環並將其瞄準玩家。 解釋計算並顯示程式碼。{ph3}{ph4}{ph5}" + +#: website/public/showcase/th04/index.html:281 +msgctxt "page:showcase/th04/index.html" +msgid "" +"An example prompt, with the original executable and reconstruction checkout " +"available locally." +msgstr "一個示例提示,原始可執行檔案和重建簽出可在本地使用。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 0, 16, 32, …, 240 +#: website/public/showcase/th04/index.html:285 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each " +"index adds 16 units: {ph0}. Adding the player's direction rotates those " +"positions together." +msgstr "" +"TH04 用 256 個角度單位表示順時針轉一整圈。16 顆子彈之間各隔 16 個單位:{ph0}。再加上玩家方向,就能讓所有方向一起旋轉。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:305 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"An illustration of the recovered angle math for count 16, player direction " +"40 and template rotation 0. {ph0}Open figure{ph1}" +msgstr "圖中演示還原出的角度計算:子彈數量為 16,玩家方向為 40,模板旋轉角為 0。{ph0}檢視大圖{ph1}" + +#: website/public/showcase/th04/index.html:313 +msgctxt "page:showcase/th04/index.html" +msgid "The firing template in the recovered source" +msgstr "還原原始碼中的發射模板" + +#: website/public/showcase/th04/index.html:318 +msgctxt "page:showcase/th04/index.html" +msgid "Elly's ring attack · source excerpt" +msgstr "Elly 的環形攻擊 · 原始碼節選" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:333 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"These lines select the pattern before difficulty and performance tuning. " +"{ph0}Read the attack's source{ph1}." +msgstr "這些線在難度和效能調整之前選擇模式。 {ph0}閱讀攻擊的來源{ph1}." + +#: website/public/showcase/th04/index.html:344 +msgctxt "page:showcase/th04/index.html" +msgid "What REA returns" +msgstr "REA 返回什麼" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: bullet_velocity_and_angle_set() +#: website/public/showcase/th04/index.html:345 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"We inspect {ph0}, the function that sets each bullet's velocity and angle. " +"REA returns its instructions, pseudocode and references. Three parts of that" +" result explain the pattern." +msgstr "我們檢查設定每顆子彈速度和角度的函式 {ph0}。REA 返回指令、虛擬碼和引用,其中三部分解釋了這種彈幕如何生成。" + +#: website/public/showcase/th04/index.html:353 +msgctxt "page:showcase/th04/index.html" +msgid "Check the DOS image before reading its code" +msgstr "在閱讀其程式碼之前檢查DOS映像" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:374 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The check ties the loaded code and relocation records to the supplied " +"executable. The path above is shortened for display." +msgstr "這項檢查確認載入的程式碼和重定位記錄對應提供的可執行檔案。上方路徑為便於顯示而縮短。" + +#: website/public/showcase/th04/index.html:380 +msgctxt "page:showcase/th04/index.html" +msgid "Read the ring's multiply and divide" +msgstr "檢視環形彈幕的乘除計算" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: SI +#. {ph1}: DS:53AF +#. {ph2}: bullet_template.count +#: website/public/showcase/th04/index.html:398 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0} holds the bullet index. The shift multiplies it by 256, then the " +"division uses the count read from {ph1}. The maintained source names that " +"field {ph2}. The complete sequence appears below." +msgstr "" +"{ph0} 儲存子彈索引。移位將它乘以 256,再除以從 {ph1} 讀取的數量。重建原始碼把這個欄位命名為 {ph2}。完整指令序列見下文。" + +#: website/public/showcase/th04/index.html:407 +msgctxt "page:showcase/th04/index.html" +msgid "Find where the pattern turns toward the player" +msgstr "找到模式轉向玩家的位置" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:428 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The instruction operands expose two coordinate differences and a direction " +"helper. Its return value is added to the relative ring angle. Source names " +"make those addresses readable; REA lets the agent check the original " +"operations behind them." +msgstr "" +"指令運算元顯示了兩個座標差,以及一個計算方向的輔助函式。它的返回值加到相對環形角度上。原始碼名稱讓這些地址的含義更易讀;REA " +"則幫助助手核對地址背後的原始操作。" + +#: website/public/showcase/th04/index.html:439 +msgctxt "page:showcase/th04/index.html" +msgid "From assembly to readable C++" +msgstr "從彙編到可讀C++" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:440 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Select a step to match the original instructions with the angle calculation." +" This summary follows the aimed-ring path; the full source also handles " +"spreads, stacks and random patterns." +msgstr "點選每一步,對照原始指令和角度計算。這份摘要展示自機狙環形彈幕的路徑;完整原始碼還處理散射、疊層和隨機模式。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:451 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}01{ph1} Index" +msgstr "{ph0}01{ph1} 索引" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:459 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}02{ph1} Space" +msgstr "{ph0}02{ph1} 等分" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:467 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}03{ph1} Aim" +msgstr "{ph0}03{ph1} 瞄準" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:475 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}04{ph1} Rotate" +msgstr "{ph0}04{ph1} 旋轉" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:483 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}05{ph1} Store" +msgstr "{ph0}05{ph1} 儲存" + +#: website/public/showcase/th04/index.html:495 +msgctxt "page:showcase/th04/index.html" +msgid "REA · original 16-bit instructions" +msgstr "REA · 原始 16 位指令" + +#: website/public/showcase/th04/index.html:529 +msgctxt "page:showcase/th04/index.html" +msgid "Readable C++ · aimed-ring summary" +msgstr "可讀 C++ · 自機狙環形彈幕摘要" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: SI +#: website/public/showcase/th04/index.html:558 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into " +"{ph2}. In a 16-bullet ring, this member index runs from 0 through 15." +msgstr "{ph0}01 · 讀取子彈索引。{ph1} 棧引數載入到 {ph2}。在 16 顆子彈的環中,索引從 0 到 15。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: SHL AX,8 +#. {ph3}: IDIV +#: website/public/showcase/th04/index.html:563 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by " +"256. The count is zero-extended into a word, then {ph3} divides the product " +"by that count. For count 16, each index advances 16 angle units." +msgstr "" +"{ph0}02 · 在整圈中等分方向。{ph1} {ph2} 將索引乘以 256。數量先零擴充套件為一個字,再由 {ph3} 用乘積除以數量。數量為 " +"16 時,每個索引前進 16 個角度單位。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: AX +#: website/public/showcase/th04/index.html:570 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-" +"minus-origin coordinates. The direction helper returns an angle in {ph2}; " +"adding it turns the whole ring toward the player." +msgstr "" +"{ph0}03 · 加上玩家方向。{ph1} 兩次減法得到玩家座標與原點座標的差。方向輔助函式在 {ph2} " +"中返回角度;加上這個值,就能把整圈彈幕轉向玩家。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: ADD AL,[0x53ad] +#: website/public/showcase/th04/index.html:576 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. " +"Elly's initial template sets it to zero; other patterns can use the same " +"helper with a rotation." +msgstr "" +"{ph0}04 · 加上模板旋轉角。{ph1} {ph2} 加上模板中的角度。Elly 的初始模板將它設為零;其他彈幕可以用同一個輔助函式進行旋轉。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: +#. {ph1}: +#. {ph2}: AL +#: website/public/showcase/th04/index.html:582 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to " +"the spawn-angle field. Values wrap after 255, just as the unsigned-byte cast" +" does. The surrounding source also converts this angle and speed into " +"velocity." +msgstr "" +"{ph0}05 · 用一個位元組儲存最終角度。{ph1} 儲存指令把 {ph2} 寫入子彈生成角度欄位。值超過 255 " +"後迴繞,與無符號位元組轉換一致。周圍原始碼還會根據這個角度和速率計算速度分量。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:591 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The assembly selects the aimed-ring branch, aim calculation and final store." +" The C++ above is a readable summary. Compiler checks below apply to the " +"maintained source in the linked project." +msgstr "彙編節選展示自機狙環形分支、瞄準計算和最終儲存。上面的 C++ 是便於閱讀的摘要。下方的編譯器檢查針對連結專案中維護的原始碼。" + +#: website/public/showcase/th04/index.html:597 +msgctxt "page:showcase/th04/index.html" +msgid "Read the maintained ring and aim source" +msgstr "閱讀維護的環和瞄準源" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#: website/public/showcase/th04/index.html:626 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle " +"representation{ph5}" +msgstr "{ph0}環宏{ph1} · {ph2}目標和速度源{ph3} · {ph4}角度表示{ph5}" + +#: website/public/showcase/th04/index.html:646 +msgctxt "page:showcase/th04/index.html" +msgid "Checking the maintained source" +msgstr "檢查維護的源" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:647 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The TH04 project's recorded checks compile the bullet-generation code, " +"including this helper, with its pinned Turbo C++ 4.0J toolchain." +msgstr "TH04 專案記錄的檢查使用指定的 Turbo C++ 4.0J 工具鏈,編譯包含這個輔助函式的彈幕生成程式碼。" + +#: website/public/showcase/th04/index.html:654 +msgctxt "page:showcase/th04/index.html" +msgid "2,139 matching bytes" +msgstr "2,139匹配位元組" + +#: website/public/showcase/th04/index.html:655 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The compiled bullet-generation code matches a 2,139-byte section of the " +"original executable." +msgstr "編譯的子彈生成程式碼與原始可執行檔案的2,139位元組部分相匹配。" + +#: website/public/showcase/th04/index.html:661 +msgctxt "page:showcase/th04/index.html" +msgid "Two clean builds" +msgstr "兩個乾淨的構建" + +#: website/public/showcase/th04/index.html:662 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two separate builds produce the same matching bytes. The recorded input " +"hashes match the maintained source shown here." +msgstr "兩個單獨的構建產生相同的匹配位元組。 記錄的輸入雜湊值與此處顯示的維護源匹配。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:668 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}." +msgstr "2026年10月3日錄得。 {ph0}閱讀編譯器檢查{ph1}." + +#: website/public/showcase/th04/index.html:676 +msgctxt "page:showcase/th04/index.html" +msgid "Target identity and analysis scope" +msgstr "目標身份和分析範圍" + +#: website/public/showcase/th04/index.html:681 +msgctxt "page:showcase/th04/index.html" +msgid "Original target" +msgstr "原始目標" + +#. {ph0}: MAIN.EXE +#: website/public/showcase/th04/index.html:682 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, 156,258 bytes, DOS MZ" +msgstr "{ph0},156,258位元組,DOS MZ" + +#: website/public/showcase/th04/index.html:685 +msgctxt "page:showcase/th04/index.html" +msgid "Helper entry" +msgstr "傭工入境" + +#. {ph0}: 0x2cfc8 +#: website/public/showcase/th04/index.html:686 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0} in REA's loaded image" +msgstr "{ph0} 在REA的載入影象" + +#: website/public/showcase/th04/index.html:689 +msgctxt "page:showcase/th04/index.html" +msgid "Original file offset" +msgstr "原始檔案偏移量" + +#. {ph0}: 0x1e7c8 +#. {ph1}: address_to_file_offset +#: website/public/showcase/th04/index.html:690 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}, returned by {ph1}" +msgstr "{ph0},返回 {ph1}" + +#: website/public/showcase/th04/index.html:696 +msgctxt "page:showcase/th04/index.html" +msgid "Recorded code inspection" +msgstr "記錄程式碼檢查" + +#: website/public/showcase/th04/index.html:697 +msgctxt "page:showcase/th04/index.html" +msgid "REA 4.1.0 · 7 October 2026" +msgstr "REA4.1.0*2026年10月7日" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:702 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Compiler checks cover the complete bullet-add code section, including this " +"helper. They also compare its MAP contribution and overlapping relocation." +msgstr "編譯器檢查覆蓋完整的彈幕新增程式碼段,包括這個輔助函式。檢查還比較它在 map 檔案中的貢獻,以及重疊的重定位項。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 0x1000 +#: website/public/showcase/th04/index.html:707 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"REA verified the static DOS load image at load segment {ph0}. Its addresses " +"describe that analysis image. The function result reports 503 body bytes in " +"two ranges across a 517-byte span; the selected instructions above lie in " +"those reported ranges." +msgstr "" +"REA 驗證了載入段為 {ph0} 的靜態 DOS 載入映像。地址描述的是分析映像。函式結果在一個 517 位元組範圍內報告了兩段程式碼,共 503 " +"位元組;上方節選的指令都位於這些已報告的程式碼範圍內。" + +# Reviewed for clear case-study reasoning and evidence. +#. {ph0}: 0d72e980 +#: website/public/showcase/th04/index.html:714 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"The source names and compiler checks come from TH04 checkpoint {ph0}. " +"Earlier reconstruction observations used the project's own analysis scripts;" +" this page adds a fresh REA inspection of the same original target. The " +"supplied game's identity is pinned by its repository manifest, with " +"independent pristine-dump provenance still open." +msgstr "" +"原始碼名稱和編譯器檢查來自 TH04 檢查點 {ph0}。較早的重建分析使用專案自身的指令碼;這個頁面新增了用 REA " +"對同一原始目標的檢查。遊戲檔案的身份由儲存庫清單確定,獨立原始轉儲的來源仍未確定。" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:722 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The figure illustrates the angle calculation. Full-game controls, timing and" +" PC-98 hardware behavior have separate runtime checks in the reconstruction " +"project." +msgstr "圖中說明的是角度計算。完整遊戲的控制、時序和 PC-98 硬體行為,在重建專案中有各自的執行時檢查。" + +#: website/public/showcase/th04/index.html:731 +msgctxt "page:showcase/th04/index.html" +msgid "The full TH04 reconstruction" +msgstr "完整的TH04重建" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:732 +msgctxt "page:showcase/th04/index.html" +msgid "" +"The project builds the game's four DOS products from maintained C++ and " +"assembly. Beyond bullet generation, the source covers stages, bosses, " +"rendering, input, menus, endings and score handling." +msgstr "專案用維護中的 C++ 和彙編構建遊戲的四個 DOS 程式。除了彈幕生成,原始碼還覆蓋關卡、Boss、渲染、輸入、選單、結局和分數處理。" + +#. {ph0}: +#. {ph1}: +#: website/public/showcase/th04/index.html:738 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "{ph0}Explore the TH04 repository{ph1}" +msgstr "{ph0}探索 TH04 程式碼儲存庫{ph1}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:744 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern " +"types and template tuning.{ph3}" +msgstr "{ph0}子彈生成源{ph1}{ph2}完整的助手,其他模式型別和模板調整。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:753 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the " +"project's PC-98 emulator workflow.{ph3}" +msgstr "{ph0}DOS構建和執行指南{ph1}{ph2}構建原始碼並在專案的PC-98模擬器工作流中進行測試。{ph3}" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: +#: website/public/showcase/th04/index.html:762 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "" +"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native" +" x64 port.{ph3}" +msgstr "{ph0}當前專案狀態{ph1}{ph2}DOS驗證和單獨的原生x64移植版。{ph3}" + +#: website/public/showcase/th04/index.html:6 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA" +msgstr "TH04逆向工程:DOS子彈模式-REA" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:7 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and " +"recovered C++ to see how a ring of bullets is spaced and aimed at the " +"player." +msgstr "用 REA 檢查 TH04 的原始 16 位 DOS 程式碼。對照彙編與還原的 C++,瞭解環形彈幕如何等分方向並瞄準玩家。" + +#: website/public/showcase/th04/index.html:238 +msgctxt "page:showcase/th04/index.html" +msgid "On this page" +msgstr "在本頁" + +#: website/public/showcase/th04/index.html:248 +msgctxt "page:showcase/th04/index.html" +msgid "TH04 bullet-pattern case study" +msgstr "TH04子彈型案例研究" + +#: website/public/showcase/th04/index.html:263 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 example prompt" +msgstr "複製TH04示例提示" + +#: website/public/showcase/th04/index.html:291 +msgctxt "page:showcase/th04/index.html" +msgid "" +"TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens" +msgstr "TH04固定和瞄準子彈環;在較小的螢幕上水平滾動" + +# Reviewed for clear case-study reasoning and evidence. +#: website/public/showcase/th04/index.html:297 +msgctxt "page:showcase/th04/index.html" +msgid "" +"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. " +"Adding a player direction of 40 rotates every direction by the same amount; " +"the highlighted first bullet points toward the player. Both keep a spacing " +"of 16 angle units, or 22.5 degrees." +msgstr "" +"兩幅圖展示 16 顆子彈的環。固定環從角度 0 開始。加上玩家方向 40 後,每個方向都旋轉相同角度,高亮的第一顆子彈指向玩家。兩者都保持 16 " +"個角度單位的間距,即 22.5 度。" + +#: website/public/showcase/th04/index.html:319 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 firing template" +msgstr "複製TH04燒製模板" + +#: website/public/showcase/th04/index.html:446 +msgctxt "page:showcase/th04/index.html" +msgid "Follow the TH04 aimed-ring calculation" +msgstr "按照TH04-環計算" + +#: website/public/showcase/th04/index.html:496 +msgctxt "page:showcase/th04/index.html" +msgid "Copy TH04 assembly excerpt" +msgstr "複製TH04彙編摘錄" + +#: website/public/showcase/th04/index.html:530 +msgctxt "page:showcase/th04/index.html" +msgid "Copy readable aimed-ring calculation" +msgstr "複製可讀瞄準環計算" + +#: website/public/showcase/th04/index.html:787 +msgctxt "page:showcase/th04/index.html" +msgid "Back to top" +msgstr "回到頂部" + +#: website/public/assets/main.js:39 +msgctxt "runtime" +msgid "Copy" +msgstr "複製" + +#: website/public/assets/main.js:20 +msgctxt "runtime" +msgid "Copied" +msgstr "已複製" + +#: website/public/assets/main.js:31 +msgctxt "runtime" +msgid "Selected" +msgstr "已選中" + +#: website/public/assets/main.js:22 +msgctxt "runtime" +msgid "Code copied to clipboard." +msgstr "程式碼已複製到剪貼簿。" + +#: website/public/assets/main.js:33 +msgctxt "runtime" +msgid "Code selected. Use your keyboard to copy it." +msgstr "程式碼已選中,請用鍵盤快捷鍵複製。" + +#: website/public/assets/main.js:147 +#, python-brace-format +msgctxt "runtime" +msgid "REA on GitHub ({count})" +msgstr "REA在GitHub({count})" + +#: website/public/assets/dino-demo.js:71 +#, python-brace-format +msgctxt "runtime" +msgid "Distance {distance}" +msgstr "距離 {distance}" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Hit a cactus. Try another speed." +msgstr "撞到仙人掌了,試試其他速度。" + +#: website/public/assets/dino-demo.js:81 +msgctxt "runtime" +msgid "Space or Jump ↑" +msgstr "空格鍵或“跳躍” ↑" + +#: website/public/assets/dino-demo.js:91 +msgctxt "runtime" +msgid "Play again" +msgstr "再玩一次" + +#: website/public/assets/dino-demo.js:91 +#: website/public/assets/dino-demo.js:105 +msgctxt "runtime" +msgid "Play" +msgstr "開始" + +#: website/public/assets/dino-demo.js:165 +msgctxt "runtime" +msgid "Pause" +msgstr "暫停" + +#: website/public/assets/dino-demo.js:106 +msgctxt "runtime" +msgid "Press Play, then jump over the cactus." +msgstr "點選“開始”,再跳過仙人掌。" + +#: website/public/assets/dino-demo.js:141 +msgctxt "runtime" +msgid "Hit a cactus. Press Play again, or change the speed and restart." +msgstr "撞到仙人掌了。再點選“開始”,或調整速度後重新開始。" + +#: website/public/assets/dino-demo.js:166 +msgctxt "runtime" +msgid "Running. Space or Jump clears a cactus." +msgstr "遊戲執行中。按空格鍵或“跳躍”越過仙人掌。" + +#: website/public/assets/dino-demo.js:177 +#: website/public/assets/dino-demo.js:213 +#: website/public/assets/dino-demo.js:218 +msgctxt "runtime" +msgid "Paused. Press Play to continue." +msgstr "已暫停。點選“開始”繼續。" + +#: website/public/assets/dino-demo.js:197 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Space or Jump clears a cactus." +msgstr "固定速度:{speed}。按空格鍵或“跳躍”越過仙人掌。" + +#: website/public/assets/dino-demo.js:200 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}. Press Play to try it." +msgstr "固定速度:{speed}。點選“開始”試試。" + +#: website/public/assets/dino-demo.js:209 +msgctxt "runtime" +msgid "Recovered rule: start at 6, then increase toward 13." +msgstr "還原的規則:速度從 6 開始,逐漸增加到 13。" + +#: website/public/assets/dino-demo.js:210 +#, python-brace-format +msgctxt "runtime" +msgid "Fixed speed: {speed}." +msgstr "固定速度: {speed}." + +#: website/public/assets/dino-demo.js:242 +msgctxt "runtime" +msgid "" +"Replayed the recovered rule. All four values match the controlled original-" +"game check when rounded to three decimals." +msgstr "重放了恢復的規則。 當四捨五入到三位小數時,所有四個值都匹配受控的原始遊戲檢查。" + +#: website/public/assets/dino-demo.js:245 +msgctxt "runtime" +msgid "" +"The replay differs from the recorded original-game values. Compare the speed" +" rule and settings above." +msgstr "重播與記錄的原始遊戲值不同。 比較上面的速度規則和設定。" + +#: website/public/assets/aegis-demo.js:22 +#, python-brace-format +msgctxt "runtime" +msgid "{start}–{end} seconds" +msgstr "{start}–{end} 秒" + +#: website/public/assets/aegis-demo.js:29 +#, python-brace-format +msgctxt "runtime" +msgid "{seconds} seconds, time block {block}" +msgstr "{seconds} 秒,時間塊 {block}" + +#: website/public/assets/aegis-demo.js:35 +msgctxt "runtime" +msgid "" +"Interactive calculation is unavailable in this browser. The example shows " +"the code at 59 seconds." +msgstr "互動式計算在此瀏覽器中不可用. 該示例顯示了59秒時的程式碼。" + +#: website/public/assets/aegis-demo.js:62 +msgctxt "runtime" +msgid "Checking…" +msgstr "檢查中…" + +#: website/public/assets/aegis-demo.js:76 +#, python-brace-format +msgctxt "runtime" +msgid "" +"{passed} / {total} checks passed (six reference cases, at six and eight " +"digits)." +msgstr "透過 {passed} / {total} 項檢查(六個對照案例,分別驗證六位和八位結果)。" + +#: website/public/assets/aegis-demo.js:81 +msgctxt "runtime" +msgid "Could not run the reference checks. Try again." +msgstr "未能完成對照檢查,請重試。" + +#: website/public/assets/figures/analyst-thinking.svg:2 +msgctxt "figure:analyst-thinking.svg" +msgid "An analyst thinking at a computer" +msgstr "在電腦前思考的分析師" + +#: website/public/assets/figures/ctf-mask-equation.svg:2 +#: website/public/assets/figures/ctf-mask-equation.svg:7 +msgctxt "figure:ctf-mask-equation.svg" +msgid "One check reveals one character" +msgstr "一張檢查顯示一個字元" + +#: website/public/assets/figures/ctf-mask-equation.svg:3 +msgctxt "figure:ctf-mask-equation.svg" +msgid "" +"The seventh mask selects only position 21 in the six by six input grid. Its " +"character code must equal 55, so the character is 7. The other masks select " +"different positions and give further equations." +msgstr "第七掩碼僅選擇六乘六輸入網格中的位置21。 它的字元程式碼必須等於55,所以字元是7。 其他掩碼選擇不同的位置並給出進一步的方程。" + +#: website/public/assets/figures/ctf-mask-equation.svg:8 +msgctxt "figure:ctf-mask-equation.svg" +msgid "The seventh check. Cell labels are input positions, starting at 0." +msgstr "第七次檢查。 單元格標籤是輸入位置,從0開始。" + +#: website/public/assets/figures/ctf-mask-equation.svg:10 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Encoded mask: −21, +1, −14, 0" +msgstr "編碼掩碼:-21,+1,-14,0" + +#: website/public/assets/figures/ctf-mask-equation.svg:11 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0." +msgstr "跳過21個單元格。 選擇1。 跳過14。 停在0。" + +#: website/public/assets/figures/ctf-mask-equation.svg:15 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Only one cell contributes to this sum" +msgstr "只有一個單元格貢獻這一總和" + +#: website/public/assets/figures/ctf-mask-equation.svg:18 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Position 21 in the flag must contain 7." +msgstr "標誌中的位置21必須包含7。" + +#: website/public/assets/figures/ctf-mask-equation.svg:20 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Selected: one cell" +msgstr "選擇:一個單元格" + +#: website/public/assets/figures/ctf-mask-equation.svg:21 +msgctxt "figure:ctf-mask-equation.svg" +msgid "26 masks give 26 equations." +msgstr "26個掩碼給出26個方程。" + +#: website/public/assets/figures/ctf-mask-equation.svg:22 +msgctxt "figure:ctf-mask-equation.svg" +msgid "Solve them together to find the flag." +msgstr "解決他們一起找到標誌。" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:9 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "DX-Ball sound-pan investigation" +msgstr "DX-Ball 聲像調查" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "" +"REA provides the instruction, caller and byte-read evidence for one DX-Ball " +"function. A stack input is multiplied by 1.5625, offset by 500, scaled, and " +"converted to an integer. Maintained C is checked in 3,205 original-x86 cases" +" and a separate 63-byte compiler replay." +msgstr "" +"REA為一個DX-Ball函式提供指令、呼叫方和位元組讀取證據。 堆疊輸入乘以1.5625,偏移500,縮放並轉換為整數。 " +"在3,205個原始-x86案例和單獨的63位元組編譯器重放中檢查維護的C。" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:28 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Stack" +msgstr "棧" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:29 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "input x" +msgstr "輸入 x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:33 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Integer" +msgstr "整數" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:34 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "return" +msgstr "返回" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:35 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Reconstructed function" +msgstr "還原的函式" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:36 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Maintained C" +msgstr "可維護的 C" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:37 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Brick-hit caller" +msgstr "磚塊碰撞呼叫方" + +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:38 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "20 + 30 × tile_x" +msgstr "20 + 30 × tile_x" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "Original code" +msgstr "原始程式碼" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40 +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:43 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "comparison" +msgstr "比較" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:41 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "3,205 cases" +msgstr "3,205 個用例" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:42 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "VC4.0 build" +msgstr "VC4.0 編譯" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44 +msgctxt "figure:dx-ball-sound-pan-investigation.svg" +msgid "63 matching bytes" +msgstr "63 位元組匹配" + +#: website/public/assets/figures/rea-investigation-flow.svg:2 +#: website/public/assets/figures/rea-investigation-flow.svg:10 +msgctxt "figure:rea-investigation-flow.svg" +msgid "REA investigation flow" +msgstr "REA調查流程" + +#: website/public/assets/figures/rea-investigation-flow.svg:3 +msgctxt "figure:rea-investigation-flow.svg" +msgid "" +"Ask a question about a local target. REA inspects and traces through local " +"analysis adapters, returns evidence, and supports follow-up questions as " +"your agent explains, implements and tests." +msgstr "問一個關於當地目標的問題。 REA透過本地分析介面卡檢查和跟蹤,返回證據,並在你的程式設計助手解釋,實施和測試時支援後續問題。" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:19 +msgctxt "figure:rea-investigation-flow.svg" +msgid "1. Ask" +msgstr "1. 提問" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:20 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent + local target" +msgstr "助手 + 本地目標" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:21 +msgctxt "figure:rea-investigation-flow.svg" +msgid "App / binary / browser" +msgstr "應用 / 二進位制 / 瀏覽器" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:22 +msgctxt "figure:rea-investigation-flow.svg" +msgid "2. Inspect & trace" +msgstr "2. 檢查與追蹤" + +#: website/public/assets/figures/rea-investigation-flow.svg:24 +msgctxt "figure:rea-investigation-flow.svg" +msgid "CLI / MCP" +msgstr "CLI / MCP" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:25 +msgctxt "figure:rea-investigation-flow.svg" +msgid "3. Read the evidence" +msgstr "3. 閱讀證據" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:26 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Code / references /" +msgstr "程式碼 / 引用 /" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:27 +msgctxt "figure:rea-investigation-flow.svg" +msgid "unknowns" +msgstr "未知資訊" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:28 +msgctxt "figure:rea-investigation-flow.svg" +msgid "4. Use what you learn" +msgstr "4. 應用結果" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:29 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Your agent" +msgstr "程式設計助手" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:30 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Explain / implement / test" +msgstr "解釋 / 實現 / 測試" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:31 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Analysis tools" +msgstr "分析工具" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:32 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Local analysis adapters" +msgstr "本地分析介面卡" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/rea-investigation-flow.svg:33 +msgctxt "figure:rea-investigation-flow.svg" +msgid "Follow-up question" +msgstr "繼續提問" + +#: website/public/assets/figures/th04-bullet-ring.svg:2 +msgctxt "figure:th04-bullet-ring.svg" +msgid "TH04: spacing and aiming a ring of bullets" +msgstr "TH04:間隔和瞄準一圈子彈" + +#: website/public/assets/figures/th04-bullet-ring.svg:3 +msgctxt "figure:th04-bullet-ring.svg" +msgid "" +"A full clockwise turn has 256 angle units. Sixteen bullets start at angles " +"zero, sixteen, thirty-two, through 240. Adding an example player direction " +"of forty turns all sixteen directions together; the first bullet points at " +"the player. Template rotation is zero." +msgstr "" +"一個完整的順時針旋轉有256個角度單位. 十六顆子彈從零,十六,三十二,到240角度開始。 " +"新增一個四十的示例玩家方向將所有十六個方向旋轉在一起;第一個子彈指向玩家。 模板旋轉為零。" + +#: website/public/assets/figures/th04-bullet-ring.svg:8 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Fixed ring" +msgstr "固定環" + +#: website/public/assets/figures/th04-bullet-ring.svg:9 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: angle 0" +msgstr "第一顆子彈:角度0" + +#: website/public/assets/figures/th04-bullet-ring.svg:10 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Aimed ring" +msgstr "瞄準環" + +#: website/public/assets/figures/th04-bullet-ring.svg:11 +msgctxt "figure:th04-bullet-ring.svg" +msgid "First bullet: player direction" +msgstr "第一彈:玩家方向" + +# Reviewed for technical meaning and concise diagram labels. +#: website/public/assets/figures/th04-bullet-ring.svg:48 +#: website/public/assets/figures/th04-bullet-ring.svg:86 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Origin" +msgstr "原點" + +#: website/public/assets/figures/th04-bullet-ring.svg:89 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Player" +msgstr "球員" + +#: website/public/assets/figures/th04-bullet-ring.svg:94 +msgctxt "figure:th04-bullet-ring.svg" +msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°" +msgstr "相同間距:256÷16=16角度單位=22.5°" + +#: website/public/blog/index.html:109 +#: website/public/blog/touhou-reconstruction/index.html:109 +#: website/public/examples/dino-lab/index.html:110 +#: website/public/faq/index.html:109 +#: website/public/first-investigation/index.html:109 +#: website/public/get-started/index.html:109 +#: website/public/guides/browser/index.html:109 +#: website/public/guides/index.html:109 +#: website/public/guides/javascript/index.html:109 +#: website/public/guides/native/index.html:109 website/public/index.html:111 +#: website/public/showcase/aegis/index.html:110 +#: website/public/showcase/ctf/index.html:109 +#: website/public/showcase/dx-ball/index.html:109 +#: website/public/showcase/index.html:109 +#: website/public/showcase/notion/index.html:109 +#: website/public/showcase/th04/index.html:109 +msgctxt "shared" +msgid "Showcases" +msgstr "案例展示" + +#: website/public/blog/index.html:110 +#: website/public/blog/touhou-reconstruction/index.html:110 +#: website/public/examples/dino-lab/index.html:111 +#: website/public/faq/index.html:110 +#: website/public/first-investigation/index.html:110 +#: website/public/get-started/index.html:110 +#: website/public/guides/browser/index.html:110 +#: website/public/guides/index.html:110 +#: website/public/guides/javascript/index.html:110 +#: website/public/guides/native/index.html:110 website/public/index.html:112 +#: website/public/showcase/aegis/index.html:111 +#: website/public/showcase/ctf/index.html:110 +#: website/public/showcase/dx-ball/index.html:110 +#: website/public/showcase/index.html:110 +#: website/public/showcase/notion/index.html:110 +#: website/public/showcase/th04/index.html:110 +msgctxt "shared" +msgid "Blog" +msgstr "部落格" + +#: website/public/blog/index.html:111 +#: website/public/blog/touhou-reconstruction/index.html:111 +#: website/public/examples/dino-lab/index.html:112 +#: website/public/faq/index.html:111 +#: website/public/first-investigation/index.html:111 +#: website/public/get-started/index.html:111 +#: website/public/guides/browser/index.html:111 +#: website/public/guides/index.html:111 +#: website/public/guides/javascript/index.html:111 +#: website/public/guides/native/index.html:111 website/public/index.html:113 +#: website/public/showcase/aegis/index.html:112 +#: website/public/showcase/ctf/index.html:111 +#: website/public/showcase/dx-ball/index.html:111 +#: website/public/showcase/index.html:111 +#: website/public/showcase/notion/index.html:111 +#: website/public/showcase/th04/index.html:111 +msgctxt "shared" +msgid "Get started" +msgstr "開始使用" + +#: website/public/blog/index.html:112 +#: website/public/blog/touhou-reconstruction/index.html:112 +#: website/public/examples/dino-lab/index.html:113 +#: website/public/faq/index.html:112 +#: website/public/first-investigation/index.html:112 +#: website/public/get-started/index.html:112 +#: website/public/guides/browser/index.html:112 +#: website/public/guides/index.html:112 +#: website/public/guides/javascript/index.html:112 +#: website/public/guides/native/index.html:112 website/public/index.html:114 +#: website/public/showcase/aegis/index.html:113 +#: website/public/showcase/ctf/index.html:112 +#: website/public/showcase/dx-ball/index.html:112 +#: website/public/showcase/index.html:112 +#: website/public/showcase/notion/index.html:112 +#: website/public/showcase/th04/index.html:112 +msgctxt "shared" +msgid "Guides" +msgstr "指南" + +#: website/public/blog/index.html:209 +#: website/public/blog/touhou-reconstruction/index.html:1059 +#: website/public/examples/dino-lab/index.html:454 +#: website/public/faq/index.html:552 +#: website/public/first-investigation/index.html:502 +#: website/public/get-started/index.html:861 +#: website/public/guides/browser/index.html:477 +#: website/public/guides/index.html:261 +#: website/public/guides/javascript/index.html:482 +#: website/public/guides/native/index.html:488 website/public/index.html:1165 +#: website/public/showcase/aegis/index.html:787 +#: website/public/showcase/ctf/index.html:756 +#: website/public/showcase/dx-ball/index.html:764 +#: website/public/showcase/index.html:296 +#: website/public/showcase/notion/index.html:610 +#: website/public/showcase/th04/index.html:779 +msgctxt "shared" +msgid "Source" +msgstr "原始碼" + +#: website/public/blog/index.html:210 +#: website/public/blog/touhou-reconstruction/index.html:1060 +#: website/public/examples/dino-lab/index.html:455 +#: website/public/faq/index.html:553 +#: website/public/first-investigation/index.html:503 +#: website/public/get-started/index.html:862 +#: website/public/guides/browser/index.html:478 +#: website/public/guides/index.html:262 +#: website/public/guides/javascript/index.html:483 +#: website/public/guides/native/index.html:489 website/public/index.html:1166 +#: website/public/showcase/aegis/index.html:788 +#: website/public/showcase/ctf/index.html:757 +#: website/public/showcase/dx-ball/index.html:765 +#: website/public/showcase/index.html:297 +#: website/public/showcase/notion/index.html:611 +#: website/public/showcase/th04/index.html:780 +msgctxt "shared" +msgid "MIT license" +msgstr "MIT 許可證" + +#: website/public/blog/index.html:211 +#: website/public/blog/touhou-reconstruction/index.html:1061 +#: website/public/examples/dino-lab/index.html:456 +#: website/public/faq/index.html:554 +#: website/public/first-investigation/index.html:504 +#: website/public/get-started/index.html:863 +#: website/public/guides/browser/index.html:479 +#: website/public/guides/index.html:263 +#: website/public/guides/javascript/index.html:484 +#: website/public/guides/native/index.html:490 website/public/index.html:1167 +#: website/public/showcase/aegis/index.html:789 +#: website/public/showcase/ctf/index.html:758 +#: website/public/showcase/dx-ball/index.html:766 +#: website/public/showcase/index.html:298 +#: website/public/showcase/notion/index.html:612 +#: website/public/showcase/th04/index.html:781 +msgctxt "shared" +msgid "Join the community" +msgstr "加入社群" + +#: website/public/blog/index.html:212 +#: website/public/blog/touhou-reconstruction/index.html:1062 +#: website/public/examples/dino-lab/index.html:457 +#: website/public/faq/index.html:555 +#: website/public/first-investigation/index.html:505 +#: website/public/get-started/index.html:864 +#: website/public/guides/browser/index.html:480 +#: website/public/guides/index.html:264 +#: website/public/guides/javascript/index.html:485 +#: website/public/guides/native/index.html:491 website/public/index.html:1168 +#: website/public/showcase/aegis/index.html:790 +#: website/public/showcase/ctf/index.html:759 +#: website/public/showcase/dx-ball/index.html:767 +#: website/public/showcase/index.html:299 +#: website/public/showcase/notion/index.html:613 +#: website/public/showcase/th04/index.html:782 +msgctxt "shared" +msgid "Follow us on X" +msgstr "在 X 上關注我們" + +#: website/public/examples/dino-lab/index.html:293 +msgctxt "page:examples/dino-lab/index.html" +msgid "REA · selected script source" +msgstr "REA · 選定指令碼源" + +#: website/public/first-investigation/index.html:361 +msgctxt "page:first-investigation/index.html" +msgid "Source" +msgstr "原始碼" + +#: website/public/first-investigation/index.html:415 +msgctxt "page:first-investigation/index.html" +msgid "Expected formatter output" +msgstr "預期格式化程式輸出" + +#: website/public/guides/index.html:206 +msgctxt "page:guides/index.html" +msgid "Instructions" +msgstr "指令" + +#: website/public/guides/index.html:207 +msgctxt "page:guides/index.html" +msgid "Caller" +msgstr "呼叫方" + +#: website/public/guides/index.html:208 +msgctxt "page:guides/index.html" +msgid "Constants" +msgstr "常量" + +#: website/public/guides/index.html:209 +msgctxt "page:guides/index.html" +msgid "C function" +msgstr "C函式" + +#: website/public/guides/index.html:224 +msgctxt "page:guides/index.html" +msgid "Button" +msgstr "按鈕" + +#: website/public/guides/index.html:225 +msgctxt "page:guides/index.html" +msgid "Preload API" +msgstr "預載入API" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "IPC" +msgstr "IPC" + +#: website/public/guides/index.html:226 +msgctxt "page:guides/index.html" +msgid "CSV file" +msgstr "CSV檔案" + +#: website/public/guides/index.html:246 +msgctxt "page:guides/index.html" +msgid "Your click" +msgstr "你的點選" + +#: website/public/guides/index.html:247 +msgctxt "page:guides/index.html" +msgid "Captured request" +msgstr "捕獲的請求" + +#: website/public/guides/index.html:248 +msgctxt "page:guides/index.html" +msgid "Export script" +msgstr "匯出指令碼" + +#: website/public/guides/javascript/index.html:344 +msgctxt "page:guides/javascript/index.html" +msgid "REA result · summary.ipc excerpt" +msgstr "REA結果 · 摘要。ipc摘錄" + +#: website/public/guides/native/index.html:371 +msgctxt "page:guides/native/index.html" +msgid "REA instruction excerpt · 0x406409" +msgstr "REA指令摘錄·0x406409" + +#: website/public/guides/native/index.html:385 +msgctxt "page:guides/native/index.html" +msgid "REA caller excerpt · 0x411f5b" +msgstr "REA呼叫方摘錄 · 0x411f5b" + +#: website/public/guides/native/index.html:399 +msgctxt "page:guides/native/index.html" +msgid "REA byte results · interpreted as little-endian doubles" +msgstr "REA位元組結果 · 解釋為little-endian雙精度浮點數" + +#: website/public/guides/native/index.html:416 +msgctxt "page:guides/native/index.html" +msgid "Recovered C · excerpt" +msgstr "恢復C · 摘錄" + +#: website/public/index.html:219 +msgctxt "page:index.html" +msgid "See how REA works ↓" +msgstr "看看 REA 如何工作 ↓" + +#: website/public/index.html:220 +msgctxt "page:index.html" +msgid "Setup guide" +msgstr "安裝指南" + +#: website/public/index.html:221 +msgctxt "page:index.html" +msgid "Showcases →" +msgstr "檢視案例 →" + +#: website/public/index.html:731 +msgctxt "page:index.html" +msgid "Selected settings from the inspected script" +msgstr "實際指令碼中的設定節選" + +#: website/public/index.html:903 +msgctxt "page:index.html" +msgid "Readable summary of the % handler" +msgstr "% 處理函式的可讀摘要" + +#: website/public/index.html:967 +msgctxt "page:index.html" +msgid "REA · selected original instructions" +msgstr "REA · 原始指令節選" + +#: website/public/index.html:978 +msgctxt "page:index.html" +msgid "Operator IDs · Microsoft’s source" +msgstr "運算子 ID · Microsoft 原始碼" + +#: website/public/index.html:1152 +msgctxt "page:index.html" +msgid "Follow @reatools on X" +msgstr "在X上關注@reatools" + +#: website/public/showcase/aegis/index.html:386 +#: website/public/showcase/aegis/index.html:418 +msgctxt "page:showcase/aegis/index.html" +msgid "Agent → REA" +msgstr "程式設計助手→ REA" + +#: website/public/showcase/aegis/index.html:396 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · selected results" +msgstr "REA →程式設計助手 · 選定結果" + +#: website/public/showcase/aegis/index.html:432 +msgctxt "page:showcase/aegis/index.html" +msgid "REA → agent · methods and callers" +msgstr "REA →程式設計助手·方法和呼叫者" + +#: website/public/showcase/aegis/index.html:502 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · selected decompiled Java" +msgstr "REA · 精選反編譯Java" + +#: website/public/showcase/aegis/index.html:532 +msgctxt "page:showcase/aegis/index.html" +msgid "Readable summary · agent's interpretation" +msgstr "可讀摘要 · 程式設計助手解釋" + +#: website/public/showcase/aegis/index.html:587 +msgctxt "page:showcase/aegis/index.html" +msgid "REA · generateOTP, complete body" +msgstr "REA · generateOTP 完整函式體" + +#: website/public/showcase/aegis/index.html:705 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Aegis APK" +msgstr "下載Aegis APK" + +#: website/public/showcase/aegis/index.html:709 +msgctxt "page:showcase/aegis/index.html" +msgid "Download Android analysis provider" +msgstr "下載 Android 分析後端" + +#: website/public/showcase/ctf/index.html:289 +#: website/public/showcase/ctf/index.html:325 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA" +msgstr "程式設計助手→ REA" + +#: website/public/showcase/ctf/index.html:305 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected results" +msgstr "REA →程式設計助手 · 選定結果" + +#: website/public/showcase/ctf/index.html:337 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · selected instructions" +msgstr "REA →程式設計助手 · 選擇說明" + +#: website/public/showcase/ctf/index.html:400 +msgctxt "page:showcase/ctf/index.html" +msgid "Agent → REA · read_bytes" +msgstr "程式設計助手→ REA · read_bytes" + +#: website/public/showcase/ctf/index.html:407 +msgctxt "page:showcase/ctf/index.html" +msgid "REA → agent · seventh entries" +msgstr "REA →程式設計助手·第七項" + +#: website/public/showcase/ctf/index.html:675 +msgctxt "page:showcase/ctf/index.html" +msgid "Original executable · SHA-256" +msgstr "原始可執行檔案 · SHA-256" + +#: website/public/showcase/ctf/index.html:711 +msgctxt "page:showcase/ctf/index.html" +msgid "Download the original challenge" +msgstr "下載原始挑戰" + +#: website/public/showcase/ctf/index.html:715 +msgctxt "page:showcase/ctf/index.html" +msgid "Download solver" +msgstr "下載求解器" + +#: website/public/showcase/dx-ball/index.html:316 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA result · pseudocode excerpt" +msgstr "REA結果 · 虛擬碼摘錄" + +#. {ph0}: analyze_function +#: website/public/showcase/dx-ball/index.html:339 +#: website/public/showcase/dx-ball/index.html:363 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · {ph0}" +msgstr "程式設計助手→ REA · {ph0}" + +#: website/public/showcase/dx-ball/index.html:345 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA →程式設計助手·指令摘錄" + +#: website/public/showcase/dx-ball/index.html:369 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA → agent · caller excerpt" +msgstr "REA →程式設計助手·呼叫方摘錄" + +# Reviewed for clear terminology and preserved evidence. +#. {ph0}: read_bytes +#: website/public/showcase/dx-ball/index.html:387 +#, python-brace-format +msgctxt "page:showcase/dx-ball/index.html" +msgid "Agent → REA · two {ph0} requests" +msgstr "助手 → REA · 兩次 {ph0} 請求" + +#: website/public/showcase/dx-ball/index.html:397 +msgctxt "page:showcase/dx-ball/index.html" +msgid "REA byte results · decoded as doubles" +msgstr "REA 位元組結果 · 雙精度浮點數解碼" + +#: website/public/showcase/dx-ball/index.html:750 +msgctxt "page:showcase/dx-ball/index.html" +msgid "Start with your own target" +msgstr "從你自己的目標開始" + +#: website/public/showcase/index.html:199 +msgctxt "page:showcase/index.html" +msgid "APK" +msgstr "APK" + +#: website/public/showcase/index.html:200 +msgctxt "page:showcase/index.html" +msgid "Generating code" +msgstr "生成驗證碼" + +#: website/public/showcase/index.html:201 +msgctxt "page:showcase/index.html" +msgid "Recovered rule" +msgstr "還原的規則" + +#: website/public/showcase/index.html:202 +msgctxt "page:showcase/index.html" +msgid "Adjustable clock" +msgstr "可調時鐘" + +#: website/public/showcase/index.html:217 +msgctxt "page:showcase/index.html" +msgid "Binary" +msgstr "二進位制" + +#: website/public/showcase/index.html:218 +msgctxt "page:showcase/index.html" +msgid "Checking code" +msgstr "檢查 flag 的程式碼" + +#: website/public/showcase/index.html:219 +msgctxt "page:showcase/index.html" +msgid "Equations" +msgstr "方程" + +#: website/public/showcase/index.html:220 +msgctxt "page:showcase/index.html" +msgid "Correct!" +msgstr "正確!" + +#: website/public/showcase/index.html:236 +msgctxt "page:showcase/index.html" +msgid "Executable" +msgstr "可執行檔案" + +#: website/public/showcase/index.html:237 +msgctxt "page:showcase/index.html" +msgid "REA findings" +msgstr "REA調查結果" + +#: website/public/showcase/index.html:238 +msgctxt "page:showcase/index.html" +msgid "Recovered C" +msgstr "還原的 C 程式碼" + +#: website/public/showcase/index.html:239 +msgctxt "page:showcase/index.html" +msgid "Validation" +msgstr "驗證" + +#: website/public/showcase/index.html:254 +msgctxt "page:showcase/index.html" +msgid "Packaged app" +msgstr "打包應用程式" + +#: website/public/showcase/index.html:255 +msgctxt "page:showcase/index.html" +msgid "Exposed API" +msgstr "公開API" + +#: website/public/showcase/index.html:256 +msgctxt "page:showcase/index.html" +msgid "IPC wrappers" +msgstr "IPC包裝器" + +#: website/public/showcase/index.html:257 +msgctxt "page:showcase/index.html" +msgid "Clipboard" +msgstr "剪貼簿" + +#: website/public/showcase/index.html:272 +msgctxt "page:showcase/index.html" +msgid "Original DOS code" +msgstr "原始DOS程式碼" + +#: website/public/showcase/index.html:273 +msgctxt "page:showcase/index.html" +msgid "REA instructions" +msgstr "REA 指令" + +#: website/public/showcase/index.html:274 +msgctxt "page:showcase/index.html" +msgid "Angle calculation" +msgstr "角度計算" + +#: website/public/showcase/index.html:275 +msgctxt "page:showcase/index.html" +msgid "Bullet ring" +msgstr "環形彈幕" + +#: website/public/showcase/notion/index.html:291 +msgctxt "page:showcase/notion/index.html" +msgid "Exposed page API" +msgstr "公開頁面API" + +#: website/public/showcase/notion/index.html:297 +msgctxt "page:showcase/notion/index.html" +msgid "Renderer IPC call" +msgstr "渲染器IPC呼叫" + +#: website/public/showcase/notion/index.html:459 +msgctxt "page:showcase/notion/index.html" +msgid "Sent to the system clipboard" +msgstr "傳送到系統剪貼簿" + +#: website/public/showcase/notion/index.html:467 +msgctxt "page:showcase/notion/index.html" +msgid "Saved locally by Notion" +msgstr "Notion本地儲存" + +#: website/public/showcase/notion/index.html:512 +msgctxt "page:showcase/notion/index.html" +msgid "Markdown input" +msgstr "Markdown 輸入" + +#: website/public/showcase/notion/index.html:519 +msgctxt "page:showcase/notion/index.html" +msgid "Structured parser output · excerpt" +msgstr "結構化解析器輸出 · 摘錄" + +#: website/public/showcase/notion/index.html:596 +msgctxt "page:showcase/notion/index.html" +msgid "Analyze your own app" +msgstr "分析你自己的應用程式" + +#: website/public/showcase/th04/index.html:356 +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA" +msgstr "程式設計助手→ REA" + +#: website/public/showcase/th04/index.html:365 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · selected fields" +msgstr "REA →程式設計助手 · 選定欄位" + +#. {ph0}: analyze_function +#: website/public/showcase/th04/index.html:384 +#, python-brace-format +msgctxt "page:showcase/th04/index.html" +msgid "Agent → REA · {ph0}" +msgstr "程式設計助手→ REA · {ph0}" + +#: website/public/showcase/th04/index.html:390 +msgctxt "page:showcase/th04/index.html" +msgid "REA → agent · instruction excerpt" +msgstr "REA →程式設計助手·指令摘錄" + +#: website/public/showcase/th04/index.html:411 +msgctxt "page:showcase/th04/index.html" +msgid "Same function result · aim excerpt" +msgstr "相同的函式結果 · 目標摘錄" + +#: website/public/showcase/th04/index.html:420 +msgctxt "page:showcase/th04/index.html" +msgid "Corresponding maintained C++" +msgstr "對應維護的C++" + +#: website/public/showcase/th04/index.html:600 +msgctxt "page:showcase/th04/index.html" +msgid "Ring macro · TH04 branch, excerpt" +msgstr "環宏 · TH04分支,摘錄" + +#: website/public/showcase/th04/index.html:610 +msgctxt "page:showcase/th04/index.html" +msgid "Angle and velocity · source excerpt" +msgstr "角度和速度 · 源摘錄" + +#: website/public/assets/home.js:29 +msgctxt "runtime" +msgid "Press % to see what happens to 10." +msgstr "按%檢視10會發生什麼。" + +#: website/public/assets/home.js:32 +msgctxt "runtime" +msgid "10% of 200 is 20. Press = to add it." +msgstr "200的10%是20. 按=新增它。" + +#: website/public/assets/home.js:33 +msgctxt "runtime" +msgid "For multiplication, 10 becomes 0.1. Press = to multiply." +msgstr "對於乘法,10變為0.1。 按=相乘。" + +#: scripts/website_i18n.py +msgctxt "runtime" +msgid "Translation is being updated. Read this page in English for now." +msgstr "譯文正在更新,這一頁暫時顯示英文。" + +#. {ph0}: +#. {ph2}: +#. {ph3}: /absolute/path/to/app +#. {ph4}: +#. {ph5}: +#: website/public/faq/index.html:412 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. " +"Show the relevant code and source locations.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 分析 {ph3},解釋它如何匯出資料。給出相關程式碼和原始碼位置。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/first-investigation/index.html:230 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}使用 {ph3} 安裝 " +"REA,並連線到這個程式設計助手。先展示安裝計劃,等我確認後再執行,然後驗證安裝結果。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/examples/notes- +#. example.zip +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#: website/public/first-investigation/index.html:280 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use " +"REA to find what happens when I click Export notes. Show where {ph4} is " +"written, which fields it contains, and the relevant files and " +"lines.{ph5}{ph6}{ph7}" +msgstr "" +"{ph0}›{ph1}{ph2}下載 {ph3},放進一個新的示例資料夾並解壓。用 REA 找出點選 Export notes 後發生了什麼。展示 " +"{ph4} 寫到哪裡、有哪些欄位,以及相關檔案和行號。{ph5}{ph6}{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/get-started/index.html:419 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}使用 {ph3} 安裝 " +"REA,並連線到這個程式設計助手。先展示安裝計劃,等我確認後再執行,然後驗證安裝結果。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: npx rea-agents@latest setup +#. {ph4}: +#. {ph5}: +#: website/public/index.html:251 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}." +" Show me the setup plan for approval, then verify the " +"installation.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}使用 {ph3} 安裝 " +"REA,並連線到這個程式設計助手。先展示安裝計劃,等我確認後再執行,然後驗證安裝結果。{ph4}{ph5}{ph6}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: https://rea.tools/ +#. {ph4}: +#. {ph5}: +#: website/public/index.html:1054 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for " +"me.{ph4}{ph5}{ph6}" +msgstr "{ph0}›{ph1}{ph2}用 REA 檢查 {ph3}。幫我克隆這個網站。{ph4}{ph5}{ph6}" + +#. {ph0}: dino-speed.js +#: website/public/examples/dino-lab/index.html:307 +#, python-brace-format +msgctxt "page:examples/dino-lab/index.html" +msgid "Reconstruction · {ph0}" +msgstr "重建工程 · {ph0}" + +#. {ph0}: Node.js +#: website/public/faq/index.html:205 +#, python-brace-format +msgctxt "page:faq/index.html" +msgid "" +"With {ph0} and npm available, run setup, choose your coding agent and review" +" the proposed changes." +msgstr "準備好 {ph0} 和 npm 後,執行 setup,選擇程式設計助手,再確認擬進行的更改。" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:189 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "A supplied example · {ph0} and npm · Your coding agent" +msgstr "提供的示例 · {ph0} 和 npm · 程式設計助手" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/first-investigation/index.html:208 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} " +"and npm; the {ph1}setup guide lists supported versions{ph2}." +msgstr "" +"使用 Claude Code、Codex、Cursor 等程式設計助手。需要 {ph0} 和 npm;{ph1}安裝指南列出了支援的版本{ph2}。" + +#. {ph0}: +#. {ph1}: renderer.js +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.exportCsv() +#. {ph7}: +#: website/public/first-investigation/index.html:326 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}" +msgstr "{ph0}頁面 · {ph1}{ph2}{ph3}Export notes(匯出筆記){ph4}{ph5}呼叫 {ph6}。{ph7}" + +#. {ph0}: +#. {ph1}: preload.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes:export +#. {ph5}: +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:334 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the " +"main process.{ph7}" +msgstr "{ph0}橋接 · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}向主程序傳送命名訊息。{ph7}" + +#. {ph0}: +#. {ph1}: main.js +#. {ph2}: +#. {ph3}: +#. {ph4}: notes.csv +#. {ph5}: +#. {ph6}: +#. {ph7}: csv.js +#. {ph8}: +#: website/public/first-investigation/index.html:342 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in " +"{ph7} and writes the file.{ph8}" +msgstr "" +"{ph0}處理函式 · {ph1}{ph2}{ph3}寫入 {ph4}{ph5}{ph6}呼叫 {ph7} 中的格式化函式,再寫入檔案。{ph8}" + +#. {ph0}: main.js +#: website/public/first-investigation/index.html:360 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · lines 8–12" +msgstr "{ph0} · 第 8–12 行" + +#. {ph0}: +#. {ph2}: +#. {ph3}: Hello, "REA" +#. {ph4}: toCsv +#. {ph5}: Node.js +#. {ph6}: +#. {ph7}: +#: website/public/first-investigation/index.html:402 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then " +"run the example’s {ph4} formatter with {ph5} to check it. Show the " +"prediction and actual output.{ph6}{ph7}{ph8}" +msgstr "" +"{ph0}›{ph1}{ph2}預測 id 為 1、標題為 {ph3} 的筆記會匯出怎樣的 CSV。再用 {ph5} 執行示例的 {ph4} " +"格式化函式驗證。展示預測和實際輸出。{ph6}{ph7}{ph8}" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:420 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "" +"The title stays in one quoted field; each quotation mark is doubled. This " +"checks the formatter directly with {ph0}." +msgstr "標題保留在一個帶引號的欄位裡,每個引號都寫成兩個。這裡用 {ph0} 直接檢查格式化函式。" + +#. {ph0}: Node.js +#: website/public/first-investigation/index.html:433 +#, python-brace-format +msgctxt "page:first-investigation/index.html" +msgid "{ph0} · CSV formatter" +msgstr "{ph0} · CSV 格式化函式" + +#. {ph0}: Node.js +#. {ph1}: Node.js +#: website/public/get-started/index.html:187 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}." +msgstr "你需要 {ph0} 22 (22.19+), 24 (24.11+) 或26+。 npm自帶 {ph1}." + +#. {ph0}: Node.js +#: website/public/get-started/index.html:192 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "Don't have {ph0}, or not sure?" +msgstr "還沒安裝 {ph0},或不確定?" + +#. {ph0}: node -v +#. {ph1}: Node.js +#: website/public/get-started/index.html:211 +#, python-brace-format +msgctxt "page:get-started/index.html" +msgid "" +"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +"older version or \"not recognized\" / \"command not found\", install {ph1} " +"24 LTS:" +msgstr "" +"如果 {ph0} 顯示 v22.19+、v24.11+ 或 v26+,就可以繼續。如果版本更舊,或顯示“無法識別”/“command not " +"found”,先安裝 {ph1} 24 LTS:" + +#. {ph0}: export.js +#: website/public/guides/browser/index.html:428 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "{ph0} · example source excerpt" +msgstr "{ph0} · 示例源摘錄" + +#. {ph0}: +#. {ph1}: +#. {ph2}: +#. {ph3}: export.js +#. {ph4}: +#. {ph5}: +#. {ph6}: notes.json +#. {ph7}: +#: website/public/guides/browser/index.html:446 +#, python-brace-format +msgctxt "page:guides/browser/index.html" +msgid "" +"{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download " +"{ph6}{ph7}" +msgstr "{ph0}開啟示例{ph1} · {ph2}下載 {ph3}{ph4} · {ph5}下載 {ph6}{ph7}" + +#. {ph0}: renderer.js +#: website/public/guides/javascript/index.html:296 +#: website/public/guides/javascript/index.html:312 +#: website/public/guides/javascript/index.html:327 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "{ph0} · example source" +msgstr "{ph0} · 示例來源" + +#. {ph0}: notes-example +#. {ph1}: Node.js +#: website/public/guides/javascript/index.html:361 +#, python-brace-format +msgctxt "page:guides/javascript/index.html" +msgid "" +"Download the example and unzip it. The archive contains the complete {ph0} " +"folder. Analyze it with {ph1} and npm; Electron is not needed for this " +"example." +msgstr "下載示例並解壓縮。 存檔包含完整的 {ph0} 資料夾。 分析它與 {ph1} 和 npm; Electron 本例不需要。" + +#. {ph0}: Node.js +#. {ph1}: +#. {ph2}: +#: website/public/index.html:276 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step" +" setup guide →{ph2}" +msgstr "第一次使用,還沒安裝 {ph0} 或程式設計助手?{ph1}跟著安裝指南一步步來 →{ph2}" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:300 +#, python-brace-format +msgctxt "page:index.html" +msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}" +msgstr "比如:{ph0}為什麼計算器算 {ph1} 會得到 220?{ph2}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 200 + 10% +#. {ph4}: +#. {ph5}: +#: website/public/index.html:488 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give " +"220?{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}用 REA 檢查 Windows 計算器。為什麼 {ph3} 會得到 220?{ph4}{ph5}{ph6}" + +#. {ph0}: index.js +#: website/public/index.html:673 +#, python-brace-format +msgctxt "page:index.html" +msgid "REA · loaded {ph0} · selected lines" +msgstr "REA · 已載入 {ph0} · 程式碼節選" + +#. {ph0}: +#. {ph1}: 200 + 10% +#. {ph2}: +#: website/public/index.html:777 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both +" +" and ×, and try them." +msgstr "我們已看到{ph0}為什麼 {ph1} 得到 220。{ph2}現在把 + 和 × 後的規則都還原出來,親自試試。" + +#. {ph0}: +#. {ph1}: calc.exe +#. {ph2}: +#. {ph3}: +#. {ph4}: +#. {ph5}: +#. {ph6}: ms-calculator: +#. {ph7}: +#: website/public/index.html:934 +#, python-brace-format +msgctxt "page:index.html" +msgid "" +"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator " +"app{ph4}{ph5}The code opens {ph6}. The agent then selects the installed " +"app’s library.{ph7}" +msgstr "" +"{ph0}01 · REA 讀取 {ph1}{ph2}{ph3}它啟動計算器應用{ph4}{ph5}程式碼開啟 " +"{ph6}。助手隨後選擇已安裝應用的庫。{ph7}" + +#. {ph0}: +#. {ph2}: +#. {ph3}: 3.apk +#. {ph4}: +#. {ph5}: +#: website/public/showcase/aegis/index.html:265 +#, python-brace-format +msgctxt "page:showcase/aegis/index.html" +msgid "" +"{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.{ph3}. Find how it generates " +"the six-digit login code, explain why it changes every 30 seconds, and " +"rebuild a small demo where I can change the time.{ph4}{ph5}{ph6}" +msgstr "" +"{ph0}›{ph1}{ph2}使用REA檢查aegis-v3.4。{ph3}. " +"找到它如何生成六位數的登入程式碼,解釋為什麼它每30秒更改一次,並重建一個我可以更改時間的小演示。{ph4}{ph5}{ph6}" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:329 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · API member" +msgstr "tab_browser_view/{ph0} · API 成員" + +#. {ph0}: preload.js +#: website/public/showcase/notion/index.html:358 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "tab_browser_view/{ph0} · IPC helper" +msgstr "tab_browser_view/{ph0} · IPC 輔助函式" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:389 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · handler helper" +msgstr "主要/{ph0} · 處理程式助手" + +#. {ph0}: index.js +#: website/public/showcase/notion/index.html:417 +#, python-brace-format +msgctxt "page:showcase/notion/index.html" +msgid "main/{ph0} · clipboard receiver" +msgstr "主要/{ph0} · 剪貼簿接收器" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "DXBALL.EXE" +#~ msgstr "DXBALL。EXE檔案" + +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "Reconstruction · dino-speed.js" +#~ msgstr "重建*迪諾-速度。js的" + +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "With Node.js and npm available, run setup, choose your coding agent and " +#~ "review the proposed changes." +#~ msgstr "與 Node.js 和 npm 可用,執行安裝程式,選擇您的編碼代理並檢視建議的更改。" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "A supplied example · Node.js and npm · Your coding agent" +#~ msgstr "提供的示例 · Node.js 和 npm *您的編碼代理" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "Use a coding agent such as Claude Code, Codex or Cursor. You’ll need Node.js" +#~ " and npm; the {ph0}setup guide lists supported versions{ph1}." +#~ msgstr "" +#~ "使用編碼劑如 Claude Code, Codex 或 Cursor. 你需要 Node.js 和 npm; " +#~ "{ph0}安裝指南列出了支援的版本{ph1}." + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Page · renderer.js{ph1}{ph2}Export notes{ph3}{ph4}Calls {ph5}.{ph6}" +#~ msgstr "{ph0}頁*渲染器。js的{ph1}{ph2}出口票據{ph3}{ph4}電話 {ph5}.{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Bridge · preload.js{ph1}{ph2}{ph3}{ph4}{ph5}Sends a named message to " +#~ "the main process.{ph6}" +#~ msgstr "{ph0}橋*預緊。js的{ph1}{ph2}{ph3}{ph4}{ph5}向主程序傳送命名訊息。{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}Handler · main.js{ph1}{ph2}Write notes.csv{ph3}{ph4}Calls the formatter" +#~ " in {ph5} and writes the file.{ph6}" +#~ msgstr "" +#~ "{ph0}處理程式*主。js的{ph1}{ph2}寫筆記。csv檔案源{ph3}{ph4}呼叫格式化程式 {ph5} 並寫入檔案。{ph6}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title Hello, " +#~ "\"REA\". Then run the example’s toCsv formatter with Node.js to check it. " +#~ "Show the prediction and actual output.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}預測 CSV 對於id1和標題Hello的註釋,\"REA\". 然後執行示例的toCsv格式化程式 Node.js " +#~ "檢查一下。 示預測和實際輸出。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "The title stays in one quoted field; each quotation mark is doubled. This " +#~ "checks the formatter directly with Node.js." +#~ msgstr "標題停留在一個帶引號的欄位中;每個引號加倍。 這直接用Node.js檢查格式化程式。" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "Node.js · CSV formatter" +#~ msgstr "Node.js · CSV 格式化程式" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+. npm comes with Node.js." +#~ msgstr "你需要Node.js 22 (22.19+), 24 (24.11+) 或26+。 npm附帶Node.js。" + +#~ msgctxt "page:get-started/index.html" +#~ msgid "Don't have Node.js, or not sure?" +#~ msgstr "沒有 Node.js,還是不確定?" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an " +#~ "older version or \"not recognized\" / \"command not found\", install Node.js" +#~ " 24 LTS:" +#~ msgstr "" +#~ "如果 {ph0} 列印v22.19+,v24.11+或v26+,你準備好了。 如果它列印舊版本或\"未識別\"/\"未找到命令\",請安裝 " +#~ "Node.js 24LTS:" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "" +#~ "{ph0}Open the example{ph1} · {ph2}Download export.js{ph3} · {ph4}Download " +#~ "notes.json{ph5}" +#~ msgstr "{ph0}開啟示例{ph1} · {ph2}下載匯出。js的{ph3} · {ph4}下載筆記。json格式{ph5}" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "" +#~ "Download the example and unzip it. The archive contains the complete {ph0} " +#~ "folder. Analyze it with Node.js and npm; Electron is not needed for this " +#~ "example." +#~ msgstr "下載示例並解壓縮。 存檔包含完整的 {ph0} 資料夾。 分析它與 Node.js 和 npm; Electron 本例不需要。" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "First time, or missing Node.js or a coding agent? {ph0}Follow the step-by-" +#~ "step setup guide →{ph1}" +#~ msgstr "第一次,或失蹤 Node.js 還是編碼代理? {ph0}按照一步一步的設定指南→{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "One question: {ph0}why does Calculator give 220 for 200 + 10%?{ph1}" +#~ msgstr "一個問題: {ph0}為什麼計算器給220為200+10%?{ph1}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does 200 + 10% " +#~ "give 220?{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用方法 REA 檢查 Windows 計算器。 為什麼200+10%給220?{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "We saw why {ph0}200 + 10% gives 220.{ph1} Now let’s recover the rules for " +#~ "both + and ×, and try them." +#~ msgstr "我們看到了原因 {ph0}200+10%給出220.{ph1} 現在讓我們恢復+和×的規則,並嘗試它們。" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}01 · REA reads calc.exe{ph1}{ph2}It launches the Calculator " +#~ "app{ph3}{ph4}The code opens {ph5}. The agent then selects the installed " +#~ "app’s library.{ph6}" +#~ msgstr "" +#~ "{ph0}01 · REA 讀calc。exe檔案{ph1}{ph2}它啟動計算器應用程式{ph3}{ph4}程式碼開啟 {ph5}. " +#~ "然後,代理選擇已安裝應用程式的庫。{ph6}" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect aegis-v3.4.3.apk. Find how it generates " +#~ "the six-digit login code, explain why it changes every 30 seconds, and " +#~ "rebuild a small demo where I can change the time.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用方法 REA 檢查aegis-v3.4.3。丹共。 " +#~ "找到它如何生成六位數的登入程式碼,解釋為什麼它每30秒更改一次,並重建一個我可以更改時間的小演示。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · API member" +#~ msgstr "tab_browser_view/預載入。js*API成員" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "tab_browser_view/preload.js · IPC helper" +#~ msgstr "tab_browser_view/預載入。js*IPC助手" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · handler helper" +#~ msgstr "主/索引。js*handler helper" + +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "main/index.js · clipboard receiver" +#~ msgstr "主/索引。js*剪貼簿接收器" + +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "main.js · lines 8–12" +#~ msgstr "主要。js*第8-12行" + +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "export.js · example source excerpt" +#~ msgstr "出口。js*例項原始碼摘錄" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "renderer.js · example source" +#~ msgstr "渲染器。js*示例源" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "preload.js · example source" +#~ msgstr "預緊力。js*示例源" + +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "main.js · example source" +#~ msgstr "主要。js*示例源" + +#~ msgctxt "page:index.html" +#~ msgid "REA · loaded index.js · selected lines" +#~ msgstr "REA*載入索引。js*選定行" + +#, python-brace-format +#~ msgctxt "page:faq/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to analyze /absolute/path/to/app and explain how it " +#~ "exports data. Show the relevant code and source locations.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用方法 REA 分析/絕對/路徑/到/應用程式並解釋它如何匯出資料。 " +#~ "顯示相關程式碼和源位置。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}安裝/安裝 REA 並將其連線到這個編碼代理使用 npx rea-代理@最新設定。 " +#~ "向我顯示安裝計劃以供批准,然後驗證安裝。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Download https://rea.tools/examples/notes-example.zip into a" +#~ " new example folder and unpack it. Use REA to find what happens when I click" +#~ " Export notes. Show where notes.csv is written, which fields it contains, " +#~ "and the relevant files and lines.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}下載 https://rea.tools/examples/notes-example.zip " +#~ "到一個新的示例資料夾中並解壓縮。 使用方法 REA 要查詢當我單擊匯出筆記時會發生什麼。 " +#~ "顯示註釋的位置。csv被寫入,它包含哪些欄位,以及相關的檔案和行。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:get-started/index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}安裝/安裝 REA 並將其連線到這個編碼代理使用 npx rea-代理@最新設定。 " +#~ "向我顯示安裝計劃以供批准,然後驗證安裝。{ph3}{ph4}{ph5}" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using npx " +#~ "rea-agents@latest setup. Show me the setup plan for approval, then verify " +#~ "the installation.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}安裝/安裝 REA 並將其連線到這個編碼代理使用 npx rea-代理@最新設定。 " +#~ "向我顯示安裝計劃以供批准,然後驗證安裝。{ph3}{ph4}{ph5}" + +#~ msgctxt "page:index.html" +#~ msgid "0x5b" +#~ msgstr "0x5b" + +#~ msgctxt "page:index.html" +#~ msgid "0x5c" +#~ msgstr "0x5c" + +#~ msgctxt "page:index.html" +#~ msgid "0x64" +#~ msgstr "0x64" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}›{ph1}{ph2}Use REA to inspect https://rea.tools/. Clone this website " +#~ "for me.{ph3}{ph4}{ph5}" +#~ msgstr "" +#~ "{ph0}›{ph1}{ph2}使用方法 REA 檢查 https://rea.tools/. 為我克隆這個網站。{ph3}{ph4}{ph5}" + +#~ msgctxt "figure:ctf-mask-equation.svg" +#~ msgid "code[21] = 55" +#~ msgstr "編碼[21]=55" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "0x00406400" +#~ msgstr "0x00406400" + +#~ msgctxt "figure:dx-ball-sound-pan-investigation.svg" +#~ msgid "× pan_scale" +#~ msgstr "×××尺度" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "{ph0}REA{ph1}{ph2}Reverse Engineer Anything{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Showcases{ph1} {ph2}Blog{ph3} {ph4}Get started{ph5} {ph6}Guides{ph7} " +#~ "{ph8}FAQ{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "shared" +#~ msgid "" +#~ "{ph0}Source{ph1}{ph2}MIT license{ph3}{ph4}Join the community{ph5}{ph6}Follow" +#~ " us on X{ph7}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:blog/touhou-reconstruction/index.html" +#~ msgid "{ph0}TH08{ph1}{ph2}→{ph3}{ph4}TH095{ph5}{ph6}→{ph7}{ph8}TH04{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:examples/dino-lab/index.html" +#~ msgid "{ph0}REA · selected script source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}main.js · lines 8–12{ph1}{ph2}Source{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:first-investigation/index.html" +#~ msgid "{ph0}Expected formatter output{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/browser/index.html" +#~ msgid "{ph0}export.js · example source excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Instructions{ph1} {ph2}→{ph3} {ph4}Caller{ph5} {ph6}→{ph7} " +#~ "{ph8}Constants{ph9} {ph10}→{ph11} {ph12}C function{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Button{ph1} {ph2}→{ph3} {ph4}Preload API{ph5} {ph6}→{ph7} {ph8}IPC{ph9}" +#~ " {ph10}→{ph11} {ph12}CSV file{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/index.html" +#~ msgid "" +#~ "{ph0}Your click{ph1} {ph2}→{ph3} {ph4}Captured request{ph5} {ph6}→{ph7} " +#~ "{ph8}Export script{ph9}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}renderer.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}preload.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}main.js · example source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/javascript/index.html" +#~ msgid "{ph0}REA result · summary.ipc excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA instruction excerpt · 0x406409{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA caller excerpt · 0x411f5b{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}REA byte results · interpreted as little-endian doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:guides/native/index.html" +#~ msgid "{ph0}Recovered C · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "" +#~ "{ph0}See how REA works ↓{ph1} {ph2}Setup guide{ph3} {ph4}Showcases →{ph5}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · loaded index.js · selected lines{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Selected settings from the inspected script{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Readable summary of the % handler{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}REA · selected original instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Operator IDs · Microsoft’s source{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:index.html" +#~ msgid "{ph0}Join the community{ph1} {ph2}Follow @reatools on X{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA → agent · methods and callers{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · selected decompiled Java{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}Readable summary · agent's interpretation{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "{ph0}REA · generateOTP, complete body{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/aegis/index.html" +#~ msgid "" +#~ "{ph0}Download Aegis APK{ph1}{ph2}Download Android analysis provider{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected results{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · selected instructions{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Agent → REA · read_bytes{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}REA → agent · seventh entries{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Original executable · SHA-256{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/ctf/index.html" +#~ msgid "{ph0}Download the original challenge{ph1}{ph2}Download solver{ph3}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA result · pseudocode excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA → agent · caller excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Agent → REA · two {ph1} requests{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}REA byte results · decoded as doubles{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/dx-ball/index.html" +#~ msgid "{ph0}Start with your own target{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}APK{ph1} {ph2}→{ph3} {ph4}Generating code{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered rule{ph9} {ph10}→{ph11} {ph12}Adjustable clock{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Binary{ph1} {ph2}→{ph3} {ph4}Checking code{ph5} {ph6}→{ph7} " +#~ "{ph8}Equations{ph9} {ph10}→{ph11} {ph12}Correct!{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Executable{ph1} {ph2}→{ph3} {ph4}REA findings{ph5} {ph6}→{ph7} " +#~ "{ph8}Recovered C{ph9} {ph10}→{ph11} {ph12}Validation{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Packaged app{ph1} {ph2}→{ph3} {ph4}Exposed API{ph5} {ph6}→{ph7} " +#~ "{ph8}IPC wrappers{ph9} {ph10}→{ph11} {ph12}Clipboard{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/index.html" +#~ msgid "" +#~ "{ph0}Original DOS code{ph1} {ph2}→{ph3} {ph4}REA instructions{ph5} " +#~ "{ph6}→{ph7} {ph8}Angle calculation{ph9} {ph10}→{ph11} {ph12}Bullet " +#~ "ring{ph13}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Exposed page API{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Renderer IPC call{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Sent to the system clipboard{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Saved locally by Notion{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Markdown input{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Structured parser output · excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/notion/index.html" +#~ msgid "{ph0}Analyze your own app{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · selected fields{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Agent → REA · {ph1}{ph2}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}REA → agent · instruction excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Same function result · aim excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Corresponding maintained C++{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Ring macro · TH04 branch, excerpt{ph1}" +#~ msgstr "" + +#, python-brace-format +#~ msgctxt "page:showcase/th04/index.html" +#~ msgid "{ph0}Angle and velocity · source excerpt{ph1}" +#~ msgstr "" diff --git a/website/public/assets/aegis-demo.js b/website/public/assets/aegis-demo.js index 74afa79b3..35f5d71f6 100644 --- a/website/public/assets/aegis-demo.js +++ b/website/public/assets/aegis-demo.js @@ -1,4 +1,5 @@ import { generateExampleCode } from "./aegis-otp.js"; +import { t } from "./i18n.js"; async function initializeAegisDemo() { const demo = document.querySelector("[data-aegis-demo]"); @@ -18,19 +19,22 @@ async function initializeAegisDemo() { demo.querySelector("[data-aegis-block]").textContent = String(block); demo.querySelector("[data-aegis-division]").textContent = `floor(${seconds} / 30)`; - demo.querySelector("[data-aegis-window]").textContent = - `${block * 30}–${block * 30 + 29} seconds`; + demo.querySelector("[data-aegis-window]").textContent = t( + "{start}–{end} seconds", + { start: block * 30, end: block * 30 + 29 }, + ); demo.querySelector("[data-aegis-code]").textContent = code; clock.setAttribute( "aria-valuetext", - `${seconds} seconds, time block ${block}`, + t("{seconds} seconds, time block {block}", { seconds, block }), ); status.textContent = ""; return true; } catch { if (currentRevision === revision) { - status.textContent = - "Interactive calculation is unavailable in this browser. The example shows the code at 59 seconds."; + status.textContent = t( + "Interactive calculation is unavailable in this browser. The example shows the code at 59 seconds.", + ); } return false; } @@ -55,7 +59,7 @@ async function initializeAegisDemo() { checkButton.disabled = false; checkButton.addEventListener("click", async () => { checkButton.disabled = true; - checkResult.textContent = "Checking…"; + checkResult.textContent = t("Checking…"); try { const response = await fetch( new URL("../showcase/aegis/test-vectors.json", import.meta.url), @@ -69,12 +73,14 @@ async function initializeAegisDemo() { if (code === vector.sha1.slice(-digits)) passed += 1; } } - checkResult.textContent = - `${passed} / ${vectors.length * 2} checks passed ` + - "(six reference cases, at six and eight digits)."; + checkResult.textContent = t( + "{passed} / {total} checks passed (six reference cases, at six and eight digits).", + { passed, total: vectors.length * 2 }, + ); } catch { - checkResult.textContent = - "Could not run the reference checks. Try again."; + checkResult.textContent = t( + "Could not run the reference checks. Try again.", + ); } finally { checkButton.disabled = false; } diff --git a/website/public/assets/dino-demo.js b/website/public/assets/dino-demo.js index 9988e9f52..0253c7540 100644 --- a/website/public/assets/dino-demo.js +++ b/website/public/assets/dino-demo.js @@ -1,4 +1,5 @@ import { advanceSpeed, simulateSpeed, SPEED_RULE } from "./dino-speed.js"; +import { t } from "./i18n.js"; // A new teaching game around the recovered speed rule. Drawing, jump physics // and rectangle collision checks are authored for this demo. @@ -67,7 +68,9 @@ function initializeDinoDemo(demo) { context.font = "13px monospace"; context.textAlign = "right"; context.fillText( - `DISTANCE ${String(Math.floor(distance / 100)).padStart(4, "0")}`, + t("Distance {distance}", { + distance: String(Math.floor(distance / 100)).padStart(4, "0"), + }), 580, 28, ); @@ -75,7 +78,7 @@ function initializeDinoDemo(demo) { context.textAlign = "center"; context.font = "15px system-ui"; context.fillText( - crashed ? "Hit a cactus. Try another speed." : "Space or Jump ↑", + crashed ? t("Hit a cactus. Try another speed.") : t("Space or Jump ↑"), 330, 85, ); @@ -85,7 +88,7 @@ function initializeDinoDemo(demo) { const stop = (message) => { running = false; cancelAnimationFrame(frame); - start.textContent = crashed ? "Play again" : "Play"; + start.textContent = crashed ? t("Play again") : t("Play"); if (message) status.textContent = message; draw(); }; @@ -99,8 +102,8 @@ function initializeDinoDemo(demo) { obstacles = [{ x: 550, height: 38 }]; if (auto.checked) speed = SPEED_RULE.start; elapsed = 0; - start.textContent = "Play"; - status.textContent = "Press Play, then jump over the cactus."; + start.textContent = t("Play"); + status.textContent = t("Press Play, then jump over the cactus."); updateSpeedDisplay(); draw(); }; @@ -134,7 +137,9 @@ function initializeDinoDemo(demo) { ) ) { crashed = true; - stop("Hit a cactus. Press Play again, or change the speed and restart."); + stop( + t("Hit a cactus. Press Play again, or change the speed and restart."), + ); } }; @@ -157,8 +162,8 @@ function initializeDinoDemo(demo) { running = true; lastTime = performance.now(); elapsed = 0; - start.textContent = "Pause"; - status.textContent = "Running. Space or Jump clears a cactus."; + start.textContent = t("Pause"); + status.textContent = t("Running. Space or Jump clears a cactus."); frame = requestAnimationFrame(animate); }; @@ -169,7 +174,7 @@ function initializeDinoDemo(demo) { }; start.addEventListener("click", () => { - if (running) stop("Paused. Press Play to continue."); + if (running) stop(t("Paused. Press Play to continue.")); else play(); }); demo.querySelector("[data-dino-jump]").addEventListener("click", jump); @@ -189,24 +194,28 @@ function initializeDinoDemo(demo) { speed = Number(slider.value); updateSpeedDisplay(); status.textContent = running - ? `Fixed speed: ${speed.toFixed(1)}. Space or Jump clears a cactus.` - : `Fixed speed: ${speed.toFixed(1)}. Press Play to try it.`; + ? t("Fixed speed: {speed}. Space or Jump clears a cactus.", { + speed: speed.toFixed(1), + }) + : t("Fixed speed: {speed}. Press Play to try it.", { + speed: speed.toFixed(1), + }); draw(); }); auto.addEventListener("change", () => { if (auto.checked) speed = SPEED_RULE.start; updateSpeedDisplay(); status.textContent = auto.checked - ? "Recovered rule: start at 6, then increase toward 13." - : `Fixed speed: ${speed.toFixed(1)}.`; + ? t("Recovered rule: start at 6, then increase toward 13.") + : t("Fixed speed: {speed}.", { speed: speed.toFixed(1) }); }); document.addEventListener("visibilitychange", () => { - if (document.hidden && running) stop("Paused. Press Play to continue."); + if (document.hidden && running) stop(t("Paused. Press Play to continue.")); }); if ("IntersectionObserver" in window) { new IntersectionObserver((entries) => { if (!entries[0].isIntersecting && running) - stop("Paused. Press Play to continue."); + stop(t("Paused. Press Play to continue.")); }).observe(demo); } demo.querySelector(".dino-fallback").setAttribute("hidden", ""); @@ -230,6 +239,10 @@ speedCheck?.addEventListener("click", () => { matches && speed === cell.parentElement.children[1].textContent.trim(); }); document.querySelector("[data-speed-check-status]").textContent = matches - ? "Replayed the recovered rule. All four values match the controlled original-game check when rounded to three decimals." - : "The replay differs from the recorded original-game values. Compare the speed rule and settings above."; + ? t( + "Replayed the recovered rule. All four values match the controlled original-game check when rounded to three decimals.", + ) + : t( + "The replay differs from the recorded original-game values. Compare the speed rule and settings above.", + ); }); diff --git a/website/public/assets/home.js b/website/public/assets/home.js index c5e102da6..b4682c4b6 100644 --- a/website/public/assets/home.js +++ b/website/public/assets/home.js @@ -1,3 +1,5 @@ +import { t } from "./i18n.js"; + function initializePercentDemo() { const demo = document.querySelector("[data-percent-demo]"); if (demo === null) return; @@ -24,11 +26,11 @@ function initializePercentDemo() { equals.disabled = stage !== "percent"; status.textContent = stage === "input" - ? "Press % to see what happens to 10." + ? t("Press % to see what happens to 10.") : stage === "percent" ? adding - ? "10% of 200 is 20. Press = to add it." - : "For multiplication, 10 becomes 0.1. Press = to multiply." + ? t("10% of 200 is 20. Press = to add it.") + : t("For multiplication, 10 becomes 0.1. Press = to multiply.") : `200 ${operator} ${percent} = ${result}.`; }; diff --git a/website/public/assets/i18n.js b/website/public/assets/i18n.js new file mode 100644 index 000000000..9af94bb63 --- /dev/null +++ b/website/public/assets/i18n.js @@ -0,0 +1,31 @@ +const messages = JSON.parse( + document.getElementById("website-messages")?.textContent ?? "{}", +); + +export function t(message, values = {}) { + const translated = messages[message] ?? message; + return translated.replace(/\{([a-zA-Z][a-zA-Z0-9_]*)\}/g, (match, key) => + Object.hasOwn(values, key) ? String(values[key]) : match, + ); +} + +document.querySelectorAll("[data-language]").forEach((link) => { + link.addEventListener("click", () => { + const target = new URL(link.href); + target.hash = window.location.hash; + link.href = target.href; + }); +}); + +const picker = document.querySelector(".language-picker"); +if (picker !== null) { + document.addEventListener("click", (event) => { + if (!picker.contains(event.target)) picker.open = false; + }); + picker.addEventListener("keydown", (event) => { + if (event.key === "Escape") { + picker.open = false; + picker.querySelector("summary").focus(); + } + }); +} diff --git a/website/public/assets/main.js b/website/public/assets/main.js index b927dff64..ed5281d36 100644 --- a/website/public/assets/main.js +++ b/website/public/assets/main.js @@ -1,142 +1,160 @@ -function initializeCopyButtons() { - document.querySelectorAll("[data-copy]").forEach((button) => { - button.addEventListener("click", async () => { - const target = document.getElementById(button.getAttribute("data-copy")); - if (target === null) return; +async function initializeWebsite() { + const { t } = await import("./i18n.js"); - const status = document.getElementById("copy-status"); - const content = target.textContent.trim(); - const text = - target.closest(".terminal-prompt") === null - ? content - : content.replace(/\s+/g, " "); - try { - await navigator.clipboard.writeText(text); - button.textContent = "Copied"; - if (status !== null) status.textContent = "Code copied to clipboard."; - } catch { - const range = document.createRange(); - range.selectNodeContents(target); - const selection = window.getSelection(); - if (selection !== null) { - selection.removeAllRanges(); - selection.addRange(range); - } - button.textContent = "Selected"; - if (status !== null) - status.textContent = "Code selected. Use your keyboard to copy it."; - } - - window.setTimeout(() => { - button.textContent = "Copy"; - }, 2000); - }); - }); -} - -initializeCopyButtons(); - -function initializeStepComparisons() { - document.querySelectorAll("[data-step-comparison]").forEach((comparison) => { - const buttons = comparison.querySelectorAll("[data-select-step]"); - const selectStep = (button) => { - const selected = button.getAttribute("data-select-step"); - buttons.forEach((candidate) => { - candidate.setAttribute("aria-pressed", String(candidate === button)); - }); - comparison.querySelectorAll("[data-step]").forEach((fragment) => { - fragment.classList.toggle( - "is-active", - fragment.getAttribute("data-step") === selected, + function initializeCopyButtons() { + document.querySelectorAll("[data-copy]").forEach((button) => { + button.addEventListener("click", async () => { + const target = document.getElementById( + button.getAttribute("data-copy"), ); + if (target === null) return; + + const status = document.getElementById("copy-status"); + const content = target.textContent.trim(); + const text = + target.closest(".terminal-prompt") === null + ? content + : content.replace(/\s+/g, " "); + try { + await navigator.clipboard.writeText(text); + button.textContent = t("Copied"); + if (status !== null) + status.textContent = t("Code copied to clipboard."); + } catch { + const range = document.createRange(); + range.selectNodeContents(target); + const selection = window.getSelection(); + if (selection !== null) { + selection.removeAllRanges(); + selection.addRange(range); + } + button.textContent = t("Selected"); + if (status !== null) + status.textContent = t( + "Code selected. Use your keyboard to copy it.", + ); + } + + window.setTimeout(() => { + button.textContent = t("Copy"); + }, 2000); }); - comparison.querySelectorAll("[data-step-note]").forEach((note) => { - note.hidden = note.getAttribute("data-step-note") !== selected; + }); + } + + initializeCopyButtons(); + + function initializeStepComparisons() { + document + .querySelectorAll("[data-step-comparison]") + .forEach((comparison) => { + const buttons = comparison.querySelectorAll("[data-select-step]"); + const selectStep = (button) => { + const selected = button.getAttribute("data-select-step"); + buttons.forEach((candidate) => { + candidate.setAttribute( + "aria-pressed", + String(candidate === button), + ); + }); + comparison.querySelectorAll("[data-step]").forEach((fragment) => { + fragment.classList.toggle( + "is-active", + fragment.getAttribute("data-step") === selected, + ); + }); + comparison.querySelectorAll("[data-step-note]").forEach((note) => { + note.hidden = note.getAttribute("data-step-note") !== selected; + }); + }; + buttons.forEach((button) => { + button.addEventListener("click", () => selectStep(button)); + }); + const initial = Array.from(buttons).find( + (button) => button.getAttribute("aria-pressed") === "true", + ); + if (initial) selectStep(initial); + }); + } + + initializeStepComparisons(); + + function initializeFaqAnswers() { + const answers = document.querySelectorAll("[data-faq] details[id]"); + if (answers.length === 0) return; + + const revealAnswer = (fragment) => { + answers.forEach((answer) => { + if (`#${answer.id}` === fragment) answer.open = true; }); }; - buttons.forEach((button) => { - button.addEventListener("click", () => selectStep(button)); - }); - const initial = Array.from(buttons).find( - (button) => button.getAttribute("aria-pressed") === "true", + window.addEventListener("hashchange", () => + revealAnswer(window.location.hash), ); - if (initial) selectStep(initial); - }); -} - -initializeStepComparisons(); - -function initializeFaqAnswers() { - const answers = document.querySelectorAll("[data-faq] details[id]"); - if (answers.length === 0) return; - - const revealAnswer = (fragment) => { - answers.forEach((answer) => { - if (`#${answer.id}` === fragment) answer.open = true; + document.querySelectorAll('[data-faq] a[href^="#"]').forEach((link) => { + link.addEventListener("click", () => + revealAnswer(link.getAttribute("href")), + ); }); - }; - window.addEventListener("hashchange", () => - revealAnswer(window.location.hash), - ); - document.querySelectorAll('[data-faq] a[href^="#"]').forEach((link) => { - link.addEventListener("click", () => - revealAnswer(link.getAttribute("href")), - ); - }); - revealAnswer(window.location.hash); -} - -initializeFaqAnswers(); - -function initializeBackToTop() { - const link = document.querySelector(".back-to-top"); - if (link === null) return; - - const updateVisibility = () => { - link.hidden = window.scrollY < 400; - }; - window.addEventListener("scroll", updateVisibility, { passive: true }); - updateVisibility(); - - link.addEventListener("click", (event) => { - event.preventDefault(); - const reduceMotion = window.matchMedia( - "(prefers-reduced-motion: reduce)", - ).matches; - window.scrollTo({ top: 0, behavior: reduceMotion ? "auto" : "smooth" }); - document - .querySelector(".brand, .breadcrumb a") - ?.focus({ preventScroll: true }); - }); -} - -initializeBackToTop(); - -async function initializeGitHubStars() { - const link = document.querySelector(".nav-github"); - const count = link?.querySelector(".nav-github-count"); - if (count === null || count === undefined) return; - - try { - const response = await fetch("https://api.github.com/repos/morluto/rea", { - headers: { Accept: "application/vnd.github+json" }, - credentials: "omit", - signal: AbortSignal.timeout(5000), - }); - if (!response.ok) return; - const repository = await response.json(); - const stars = repository.stargazers_count; - if (!Number.isSafeInteger(stars) || stars < 0) return; - - const formatted = new Intl.NumberFormat("en-US").format(stars); - const label = `REA on GitHub (${formatted} ${stars === 1 ? "star" : "stars"})`; - count.textContent = formatted; - count.hidden = false; - link.setAttribute("aria-label", label); - link.setAttribute("title", label); - } catch { - // Keep the repository link usable when GitHub is unavailable. + revealAnswer(window.location.hash); } + + initializeFaqAnswers(); + + function initializeBackToTop() { + const link = document.querySelector(".back-to-top"); + if (link === null) return; + + const updateVisibility = () => { + link.hidden = window.scrollY < 400; + }; + window.addEventListener("scroll", updateVisibility, { passive: true }); + updateVisibility(); + + link.addEventListener("click", (event) => { + event.preventDefault(); + const reduceMotion = window.matchMedia( + "(prefers-reduced-motion: reduce)", + ).matches; + window.scrollTo({ top: 0, behavior: reduceMotion ? "auto" : "smooth" }); + document + .querySelector(".brand, .breadcrumb a") + ?.focus({ preventScroll: true }); + }); + } + + initializeBackToTop(); + + async function initializeGitHubStars() { + const link = document.querySelector(".nav-github"); + const count = link?.querySelector(".nav-github-count"); + if (count === null || count === undefined) return; + + try { + const response = await fetch("https://api.github.com/repos/morluto/rea", { + headers: { Accept: "application/vnd.github+json" }, + credentials: "omit", + signal: AbortSignal.timeout(5000), + }); + if (!response.ok) return; + const repository = await response.json(); + const stars = repository.stargazers_count; + if (!Number.isSafeInteger(stars) || stars < 0) return; + + const formatted = new Intl.NumberFormat( + document.documentElement.lang, + ).format(stars); + const label = t("REA on GitHub ({count})", { count: formatted }); + count.textContent = formatted; + count.hidden = false; + link.setAttribute("aria-label", label); + link.setAttribute("title", label); + } catch { + // Keep the repository link usable when GitHub is unavailable. + } + } + + initializeGitHubStars(); } -initializeGitHubStars(); +initializeWebsite(); diff --git a/website/public/assets/styles.css b/website/public/assets/styles.css index 5e566f39c..9385d63c3 100644 --- a/website/public/assets/styles.css +++ b/website/public/assets/styles.css @@ -20,6 +20,7 @@ body { background: var(--page); color: var(--ink); line-height: 1.65; + overflow-wrap: anywhere; } a { color: var(--accent); @@ -50,6 +51,15 @@ code { font-size: 0.9em; overflow-wrap: anywhere; } +span[translate="no"] { + direction: ltr; + unicode-bidi: isolate; +} +html[dir="rtl"] span[translate="no"] { + display: inline-block; + max-inline-size: 100%; + text-align: start; +} kbd { padding: 0.05rem 0.35rem; border: 1px solid var(--line); @@ -136,8 +146,72 @@ section[id] { color: var(--ink); } .site-header { + position: relative; border-bottom: 1px solid var(--line); } +.language-picker { + position: relative; + font-size: 0.8rem; +} +.language-picker summary { + display: flex; + align-items: center; + gap: 0.4rem; + min-height: 44px; + padding: 0.35rem 0.65rem; + border: 1px solid var(--line); + border-radius: 5px; + color: var(--muted); + cursor: pointer; + white-space: nowrap; + list-style: none; +} +.language-picker summary::-webkit-details-marker { + display: none; +} +.language-picker summary::after { + content: "⌄"; +} +.language-picker nav { + position: absolute; + inset-inline-end: 0; + top: calc(100% + 0.5rem); + z-index: 12; + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.15rem; + width: min(340px, calc(100vw - 2.5rem)); + max-height: 70vh; + overflow: auto; + padding: 0.6rem; + border: 1px solid var(--line); + border-radius: 6px; + background: var(--page); + box-shadow: 0 5px 20px rgb(32 37 43 / 8%); +} +.language-picker nav a { + display: flex; + align-items: center; + min-height: 44px; + padding: 0.45rem 0.6rem; + color: var(--muted); + text-decoration: none; + border-radius: 3px; + overflow-wrap: anywhere; +} +.language-picker nav a:hover, +.language-picker nav a[aria-current="true"] { + color: var(--accent); + background: var(--soft); +} +.translation-notice { + padding: 0.9rem 1.2rem; + margin-block: 1.5rem; + border-inline-start: 2px solid var(--accent); + background: var(--soft); + color: var(--muted); + font-size: 0.9rem; +} .header-inner { min-height: 88px; display: grid; @@ -165,8 +239,9 @@ section[id] { display: flex; align-items: center; justify-content: flex-end; - gap: 1.8rem; font-size: 0.9rem; + flex-wrap: wrap; + gap: 0.65rem 1.4rem; } .navigation a { color: var(--muted); @@ -534,7 +609,7 @@ pre code { } .stats { display: grid; - grid-template-columns: repeat(3, 1fr); + grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.5rem; } .stats dt { @@ -564,7 +639,7 @@ pre code { } .workflows { display: grid; - grid-template-columns: repeat(3, 1fr); + grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 2.8rem; } .workflows p { @@ -1586,7 +1661,7 @@ pre code { font-size: 0.85rem; } .home-expert-shortcut a { - white-space: nowrap; + white-space: normal; } .home-expert-shortcut + .home-expert-shortcut { margin-top: 0.5rem; @@ -1798,12 +1873,12 @@ pre code { outline-offset: 3px; } .assembly-disclosure::after { - content: "Show +"; + content: "+"; color: var(--accent); white-space: nowrap; } .expert-assembly[open] .assembly-disclosure::after { - content: "Hide −"; + content: "−"; } .expert-assembly pre { margin: 0; @@ -2188,6 +2263,10 @@ pre code { .speed-check-table th:last-child { text-align: right; } +.speed-check-table { + width: 100%; + table-layout: fixed; +} [hidden] { display: none !important; } @@ -2382,7 +2461,7 @@ pre code { grid-template-columns: 1fr; } .case-stats { - grid-template-columns: repeat(3, 1fr); + grid-template-columns: repeat(3, minmax(0, 1fr)); border-left: 0; padding: 1.5rem 0 0; border-top: 1px solid var(--line); @@ -2485,3 +2564,96 @@ pre code { grid-template-columns: 1fr; } } + +/* Keep prose natural in each language while code and evidence stay left-to-right. */ +html:lang(zh), +html:lang(ja), +html:lang(ko), +html:lang(th), +html[dir="rtl"] { + letter-spacing: normal; +} +html:lang(zh) h1, +html:lang(zh) h2, +html:lang(zh) h3, +html:lang(ja) h1, +html:lang(ja) h2, +html:lang(ja) h3, +html:lang(ko) h1, +html:lang(ko) h2, +html:lang(ko) h3, +html:lang(th) h1, +html:lang(th) h2, +html:lang(th) h3, +html[dir="rtl"] h1, +html[dir="rtl"] h2, +html[dir="rtl"] h3 { + letter-spacing: normal; + line-height: 1.35; +} +html[dir="rtl"] code, +html[dir="rtl"] pre, +html[dir="rtl"] kbd, +html[dir="rtl"] .dino-stage, +html[dir="rtl"] .percent-demo, +html[dir="rtl"] .aegis-calculation { + direction: ltr; + unicode-bidi: isolate; + text-align: left; +} +html[dir="rtl"] ul, +html[dir="rtl"] ol { + padding-left: 0; + padding-right: 1.3rem; +} +html[dir="rtl"] .terminal-prompt { + font-family: inherit; + text-align: start; +} +html[dir="rtl"] .breadcrumb, +html[dir="rtl"] .brand-name { + unicode-bidi: isolate; +} +@media (min-width: 851px) and (max-width: 1250px) { + .brand-caption { + display: none; + } +} +@media (max-width: 850px) { + .header-inner { + grid-template-columns: minmax(0, 1fr) auto; + } + .brand-caption { + display: none; + } + .navigation { + grid-column: 1 / -1; + grid-row: 2; + justify-content: flex-start; + padding-bottom: 0.8rem; + } + .header-social { + grid-column: 2; + grid-row: 1; + gap: 0.45rem; + } + .nav-github-count { + display: none; + } + .language-picker { + position: static; + } + .language-picker nav { + inset-inline: 1.25rem; + top: 4.3rem; + width: auto; + } + .explanatory-figure figcaption a { + white-space: normal; + } +} +@media (max-width: 400px) { + .header-social .nav-x { + display: none; + } +} diff --git a/website/public/blog/index.html b/website/public/blog/index.html index 0f0a5a9d8..1711be21a 100644 --- a/website/public/blog/index.html +++ b/website/public/blog/index.html @@ -11,6 +11,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61,7 +103,7 @@
REAReverse Engineer AnythingReverse Engineer Anything
+
English
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61,7 +103,7 @@
REAReverse Engineer AnythingReverse Engineer Anything
+
English
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -62,7 +104,7 @@
REAReverse Engineer AnythingReverse Engineer Anything
+
English
Use the same rule in the new game
- Reconstruction · dino-speed.jsReconstruction · + dino-speed.js
@@ -880,7 +932,8 @@ SPEED: 6

  1. - 01 · REA reads calc.exe01 · REA reads calc.exeIt launches the Calculator appThe code opens ms-calculator:. The agent then @@ -1001,8 +1054,9 @@ SPEED: 6

    Use REA to inspect https://rea.tools/. Clone this website - for me.Use REA to inspect + https://rea.tools/. Clone this + website for me.

diff --git a/website/public/showcase/aegis/index.html b/website/public/showcase/aegis/index.html index c8178aca1..3c09fd44f 100644 --- a/website/public/showcase/aegis/index.html +++ b/website/public/showcase/aegis/index.html @@ -11,6 +11,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -62,7 +104,7 @@
REAReverse Engineer AnythingReverse Engineer Anything diff --git a/website/public/showcase/ctf/index.html b/website/public/showcase/ctf/index.html index 33d519f8b..7fdde3456 100644 --- a/website/public/showcase/ctf/index.html +++ b/website/public/showcase/ctf/index.html @@ -11,6 +11,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61,7 +103,7 @@
REAReverse Engineer AnythingReverse Engineer Anything
+
English
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61,7 +103,7 @@
REAReverse Engineer AnythingReverse Engineer Anything
+
English
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61,7 +103,7 @@
REAReverse Engineer AnythingReverse Engineer Anything
+
English
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -61,7 +103,7 @@
REAReverse Engineer AnythingReverse Engineer Anything
+
English

Start at the API exposed to the page

- tab_browser_view/preload.js · API membertab_browser_view/preload.js · + API member